From 46eb997741b5a7aad8c8edefe1af7e0c22b477c7 Mon Sep 17 00:00:00 2001 From: Mark Baird Date: Sat, 5 Dec 2015 21:30:08 -0500 Subject: [PATCH 001/439] Fixing a typo in the README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d20fd959..830649e0 100644 --- a/README.md +++ b/README.md @@ -280,10 +280,10 @@ JSONObject subs = header.getSubstitutions(); ### [Unique Arguments](http://sendgrid.com/docs/API_Reference/SMTP_API/unique_arguments.html) -#### addUniqueAarg +#### addUniqueArg ```java -email.addUniqueAarg("key", "value"); +email.addUniqueArg("key", "value"); // or Map map = new HashMap(); map.put("unique", "value"); From cf86ccbd88d5dae9b0205f5d8ce3f0fcab79c738 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 5 Jan 2016 09:52:32 -0800 Subject: [PATCH 002/439] Use API Keys --- README.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d20fd959..e1729593 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ import com.sendgrid.*; public class SendGridExample { public static void main(String[] args) { - SendGrid sendgrid = new SendGrid("SENDGRID USERNAME", "SENDGRID_PASSWORD"); + SendGrid sendgrid = new SendGrid('YOUR_SENDGRID_API_KEY'); SendGrid.Email email = new SendGrid.Email(); email.addTo("example@example.com"); @@ -84,13 +84,11 @@ import com.sendgrid.*; ## Usage -To begin using this library, initialize the SendGrid object with your SendGrid credentials OR a SendGrid API Key. API Key is the preferred method. API Keys are in beta. To configure API keys, visit https://sendgrid.com/beta/settings/api_keys. +To begin using this library, initialize the SendGrid object with your SendGrid API Key. To configure API keys, visit https://sendgrid.com/beta/settings/api_keys. ```java import com.sendgrid.SendGrid; -SendGrid sendgrid = new SendGrid("sendgrid_username", "sendgrid_password"); -// or -SendGrid sendgrid = new SendGrid("sendgrid_api_key"); +SendGrid sendgrid = new SendGrid('YOUR_SENDGRID_API_KEY'); ``` Add your message details. @@ -236,7 +234,7 @@ email.setHtml("TEXT BEFORE IMAGEAF ### Proxy Server Setup ```java -SendGrid sendgrid = new SendGrid("SENDGRID USERNAME", "SENDGRID_PASSWORD"); +SendGrid sendgrid = new SendGrid('YOUR_SENDGRID_API_KEY'); HttpHost proxy = new HttpHost("server", 3128); CloseableHttpClient http = HttpClientBuilder.create().setProxy(proxy).setUserAgent("sendgrid/" + sendgrid.getVersion() + ";java").build(); sendgrid.setClient(http); @@ -334,7 +332,7 @@ JSONObject filters = email.getFilters(); Example enabling bcc app: ```java -SendGrid sendgrid = new SendGrid("sendgrid_username", "sendgrid_password"); +SendGrid sendgrid = new SendGrid('YOUR_SENDGRID_API_KEY'); sendgrid.addTo("example@example.com"); ... sendgrid.addFilter("bcc", "enabled", 1); From 084fecbcf7eb0a6db85fa1889c1c20abcfd3648f Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 11 Jan 2016 21:49:12 -0800 Subject: [PATCH 003/439] fixing Travis tests --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 8a02d27a..30b2d3d4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: java +sudo: false jdk: - oraclejdk8 - oraclejdk7 From 77c222d9247712efb341812d60998367db461a6d Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 22 Mar 2016 14:12:48 -0700 Subject: [PATCH 004/439] Create LICENSE.txt --- LICENSE.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE.txt diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..a5e93d27 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 SendGrid + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From f987795c14a64ba367c3ad736f3b4c7a590d3626 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 15 Apr 2016 17:01:05 -0700 Subject: [PATCH 005/439] Removed v2 --- build.gradle | 7 +- examples/Example.class | Bin 0 -> 1245 bytes examples/Example.java | 21 + pom.xml | 5 + src/main/java/com/sendgrid/SendGrid.java | 518 ++---------------- .../java/com/sendgrid/SendGridException.java | 7 - src/test/java/com/sendgrid/SendGridTest.java | 191 +------ 7 files changed, 80 insertions(+), 669 deletions(-) create mode 100644 examples/Example.class create mode 100644 examples/Example.java delete mode 100644 src/main/java/com/sendgrid/SendGridException.java diff --git a/build.gradle b/build.gradle index 21756c0b..35910786 100644 --- a/build.gradle +++ b/build.gradle @@ -17,13 +17,13 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '2.2.2' +version = '3.0.0' ext.packaging = 'jar' allprojects { apply plugin: 'java' - sourceCompatibility = 1.6 - targetCompatibility = 1.6 + sourceCompatibility = 1.7 + targetCompatibility = 1.7 } if (!hasProperty("sonatypeUsername")) { @@ -45,6 +45,7 @@ buildscript { } dependencies { + compile 'com.sendgrid:java-http-client:1.0.0' compile 'com.sendgrid:smtpapi-java:1.2.0' compile 'org.apache.httpcomponents:httpcore:4.3.2' compile 'org.apache.httpcomponents:httpclient:4.3.4' diff --git a/examples/Example.class b/examples/Example.class new file mode 100644 index 0000000000000000000000000000000000000000..89f5522c61a1e1299f779e84fa2ef3801f398e41 GIT binary patch literal 1245 zcmZuwZBr6a6n-us7jP8?wO1=k4OF1iQqwG7P*Fe=vvK<1EO5h>m)+RK(O=YOn+7Xq z>U%$`Iu|f8VTXI4J@=gRoO{l*zkYxJ0bmll9`s>|W7q>5hFo~;LZBT%jBt#)Fy=uB zVGlSWEMR`X}7s%o$s#=MmFYrEos2-`2f?CQ&QdU_j>K3K?bn_#~|9M6BR778rUndNE>(QZ`rC zvXK;lRRRoMsc3R}bvw4azpxeC--zyUEGk&SvaBG=;8G23KQB&91uIxpu!b1Nx`GYF zIT8wz*i^8EHxg|tNMT2!w+#MT>6#viZT`D518-cCh%Z~WnLZR5x{|*|KdGCSJ*eH^ zZdAy3I?&YndV<;Omf&^M73S25X^A3DJ|`?uI${`ZPJ1!ZrX&p$wZDa9-LEz+sL4$|NK2-rS{1XdSr%&= zKvO&oz>wJrBwt4$CdI0h8_bJ(_JqOL>axA9>Ze%mMeLeTv!YCj_Wsucs<%0|F{t1! z2GC32vi#Y=q}XY_MQ{DIGuqom&cIFyFx;lqSu;A}#vRR(xW{py;{h1Q SfDI4n%s~u2^nXOyhQYrvV<}Gn literal 0 HcmV?d00001 diff --git a/examples/Example.java b/examples/Example.java new file mode 100644 index 00000000..98c834b4 --- /dev/null +++ b/examples/Example.java @@ -0,0 +1,21 @@ +// SendGridExample.java +import com.sendgrid.*; +import java.io.*; +import java.util.*; + +public class Example { + public static void main(String[] args) throws IOException { + Map opts = new HashMap(); + opts.put("host","e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY"), opts); + try{ + Response response = sg.get("api_keys"); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index f8647eba..5ae6d8bb 100644 --- a/pom.xml +++ b/pom.xml @@ -87,6 +87,11 @@ jar + + com.sendgrid + java-http-client + 1.0.0 + com.sendgrid smtpapi-java diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 1c9efaab..e9d03406 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -1,492 +1,62 @@ package com.sendgrid; -import com.sendgrid.smtpapi.SMTPAPI; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.mime.MultipartEntityBuilder; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.util.EntityUtils; -import org.json.JSONObject; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; import java.io.*; import java.util.*; public class SendGrid { - private static final String VERSION = "2.2.2"; + private static final String VERSION = "3.0.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; + + private String apiKey; + private String host; + private String version; + private Client client; + private Map requestHeaders; - private static final String PARAM_TO = "to[]"; - private static final String PARAM_TONAME = "toname[]"; - private static final String PARAM_CC = "cc[]"; - private static final String PARAM_BCC = "bcc[]"; - - private static final String PARAM_FROM = "from"; - private static final String PARAM_FROMNAME = "fromname"; - private static final String PARAM_REPLYTO = "replyto"; - private static final String PARAM_SUBJECT = "subject"; - private static final String PARAM_HTML = "html"; - private static final String PARAM_TEXT = "text"; - private static final String PARAM_FILES = "files[%s]"; - private static final String PARAM_CONTENTS = "content[%s]"; - private static final String PARAM_XSMTPAPI = "x-smtpapi"; - private static final String PARAM_HEADERS = "headers"; - private static final String TEXT_PLAIN = "text/plain"; - private static final String UTF_8 = "UTF-8"; - - - private String username; - private String password; - private String url; - private String port; - private String endpoint; - private CloseableHttpClient client; - - /** - * Constructor for using a username and password - * - * @param username SendGrid username - * @param password SendGrid password - */ - public SendGrid(String username, String password) { - this.username = username; - this.password = password; - this.url = "https://api.sendgrid.com"; - this.endpoint = "/api/mail.send.json"; - this.client = HttpClientBuilder.create().setUserAgent(USER_AGENT).build(); - } - - /** - * Constructor for using an API key - * - * @param apiKey SendGrid api key - */ public SendGrid(String apiKey) { - this.password = apiKey; - this.username = null; - this.url = "https://api.sendgrid.com"; - this.endpoint = "/api/mail.send.json"; - this.client = HttpClientBuilder.create().setUserAgent(USER_AGENT).build(); + this.apiKey = apiKey; + this.host = "api.sendgrid.com"; + this.version = "v3"; + this.client = new Client(); + this.requestHeaders = new HashMap(); + this.requestHeaders.put("Authorization", "Bearer " + apiKey); + this.requestHeaders.put("Content-Type", "application/json"); + this.requestHeaders.put("User-agent", USER_AGENT); } - public SendGrid setUrl(String url) { - this.url = url; - return this; - } - - public SendGrid setEndpoint(String endpoint) { - this.endpoint = endpoint; - return this; - } - - public String getVersion() { - return VERSION; - } - - public SendGrid setClient(CloseableHttpClient client) { - this.client = client; - return this; - } - - public HttpEntity buildBody(Email email) { - MultipartEntityBuilder builder = MultipartEntityBuilder.create(); - - // We are using an API key - if (this.username != null) { - builder.addTextBody("api_user", this.username); - builder.addTextBody("api_key", this.password); + public SendGrid(String apiKey, Map opts) { + this(apiKey); + if(opts.containsKey("host") == true) { + this.host = opts.get("host"); } - - String[] tos = email.getTos(); - String[] tonames = email.getToNames(); - String[] ccs = email.getCcs(); - String[] bccs = email.getBccs(); - - // If SMTPAPI Header is used, To is still required. #workaround. - if (tos.length == 0) { - builder.addTextBody(String.format(PARAM_TO, 0), email.getFrom(), ContentType.create(TEXT_PLAIN, UTF_8)); - } - for (int i = 0, len = tos.length; i < len; i++) - builder.addTextBody(PARAM_TO, tos[i], ContentType.create("text/plain", "UTF-8")); - for (int i = 0, len = tonames.length; i < len; i++) - builder.addTextBody(PARAM_TONAME, tonames[i], ContentType.create("text/plain", "UTF-8")); - for (int i = 0, len = ccs.length; i < len; i++) - builder.addTextBody(PARAM_CC, ccs[i], ContentType.create("text/plain", "UTF-8")); - for (int i = 0, len = bccs.length; i < len; i++) - builder.addTextBody(PARAM_BCC, bccs[i], ContentType.create(TEXT_PLAIN, UTF_8)); - // Files - if (email.getAttachments().size() > 0) { - Iterator it = email.getAttachments().entrySet().iterator(); - while (it.hasNext()) { - Map.Entry entry = (Map.Entry) it.next(); - builder.addBinaryBody(String.format(PARAM_FILES, entry.getKey()), (InputStream) entry.getValue()); - } - } - - if (email.getContentIds().size() > 0) { - Iterator it = email.getContentIds().entrySet().iterator(); - while (it.hasNext()) { - Map.Entry entry = (Map.Entry) it.next(); - builder.addTextBody(String.format(PARAM_CONTENTS, entry.getKey()), (String) entry.getValue()); - } - } - - if (email.getHeaders().size() > 0) - builder.addTextBody(PARAM_HEADERS, new JSONObject(email.getHeaders()).toString(), ContentType.create(TEXT_PLAIN, UTF_8)); - - if (email.getFrom() != null && !email.getFrom().isEmpty()) - builder.addTextBody(PARAM_FROM, email.getFrom(), ContentType.create(TEXT_PLAIN, UTF_8)); - - if (email.getFromName() != null && !email.getFromName().isEmpty()) - builder.addTextBody(PARAM_FROMNAME, email.getFromName(), ContentType.create(TEXT_PLAIN, UTF_8)); - - if (email.getReplyTo() != null && !email.getReplyTo().isEmpty()) - builder.addTextBody(PARAM_REPLYTO, email.getReplyTo(), ContentType.create(TEXT_PLAIN, UTF_8)); - - if (email.getSubject() != null && !email.getSubject().isEmpty()) - builder.addTextBody(PARAM_SUBJECT, email.getSubject(), ContentType.create(TEXT_PLAIN, UTF_8)); - - if (email.getHtml() != null && !email.getHtml().isEmpty()) - builder.addTextBody(PARAM_HTML, email.getHtml(), ContentType.create(TEXT_PLAIN, UTF_8)); - - if (email.getText() != null && !email.getText().isEmpty()) - builder.addTextBody(PARAM_TEXT, email.getText(), ContentType.create(TEXT_PLAIN, UTF_8)); - - String tmpString = email.smtpapi.jsonString(); - if (!tmpString.equals("{}")) - builder.addTextBody(PARAM_XSMTPAPI, tmpString, ContentType.create(TEXT_PLAIN, UTF_8)); - - return builder.build(); } - - public SendGrid.Response send(Email email) throws SendGridException { - HttpPost httppost = new HttpPost(this.url + this.endpoint); - httppost.setEntity(this.buildBody(email)); - - // Using an API key - if (this.username == null) { - httppost.setHeader("Authorization", "Bearer " + this.password); - } - + + public String getVersion() { + return this.VERSION; + } + + public Response get(String endpoint) throws IOException { + Request request = new Request(); + request.baseUri = host; + request.requestHeaders = requestHeaders; + request.method = Method.GET; + request.endpoint = "/" + version + "/" + endpoint; + Map queryParams = new HashMap(); + queryParams.put("limit", "100"); + queryParams.put("offset", "0"); + request.queryParams = queryParams; + + Response response = new Response(); try { - HttpResponse res = this.client.execute(httppost); - return new SendGrid.Response(res.getStatusLine().getStatusCode(), EntityUtils.toString(res.getEntity())); - } catch (IOException e) { - throw new SendGridException(e); - } - - } - - public static class Email { - private SMTPAPI smtpapi; - private ArrayList to; - private ArrayList toname; - private ArrayList cc; - private String from; - private String fromname; - private String replyto; - private String subject; - private String text; - private String html; - private ArrayList bcc; - private Map attachments; - private Map contents; - private Map headers; - - public Email() { - this.smtpapi = new SMTPAPI(); - this.to = new ArrayList(); - this.toname = new ArrayList(); - this.cc = new ArrayList(); - this.bcc = new ArrayList(); - this.attachments = new HashMap(); - this.contents = new HashMap(); - this.headers = new HashMap(); - } - - public Email addTo(String to) { - this.to.add(to); - return this; - } - - public Email addTo(String[] tos) { - this.to.addAll(Arrays.asList(tos)); - return this; - } - - public Email addTo(String to, String name) { - this.addTo(to); - return this.addToName(name); - } - - public Email setTo(String[] tos) { - this.to = new ArrayList(Arrays.asList(tos)); - return this; - } - - public String[] getTos() { - return this.to.toArray(new String[this.to.size()]); - } - - public Email addSmtpApiTo(String to) { - this.smtpapi.addTo(to); - return this; - } - - public Email addSmtpApiTo(String[] to) { - this.smtpapi.addTos(to); - return this; - } - - public Email addToName(String toname) { - this.toname.add(toname); - return this; - } - - public Email addToName(String[] tonames) { - this.toname.addAll(Arrays.asList(tonames)); - return this; - } - - public Email setToName(String[] tonames) { - this.toname = new ArrayList(Arrays.asList(tonames)); - return this; - } - - public String[] getToNames() { - return this.toname.toArray(new String[this.toname.size()]); - } - - public Email addCc(String cc) { - this.cc.add(cc); - return this; - } - - public Email addCc(String[] ccs) { - this.cc.addAll(Arrays.asList(ccs)); - return this; - } - - public Email setCc(String[] ccs) { - this.cc = new ArrayList(Arrays.asList(ccs)); - return this; - } - - public String[] getCcs() { - return this.cc.toArray(new String[this.cc.size()]); - } - - public Email setFrom(String from) { - this.from = from; - return this; - } - - public String getFrom() { - return this.from; - } - - public Email setFromName(String fromname) { - this.fromname = fromname; - return this; - } - - public String getFromName() { - return this.fromname; - } - - public Email setReplyTo(String replyto) { - this.replyto = replyto; - return this; - } - - public String getReplyTo() { - return this.replyto; - } - - public Email addBcc(String bcc) { - this.bcc.add(bcc); - return this; - } - - public Email addBcc(String[] bccs) { - this.bcc.addAll(Arrays.asList(bccs)); - return this; - } - - public Email setBcc(String[] bccs) { - this.bcc = new ArrayList(Arrays.asList(bccs)); - return this; - } - - public String[] getBccs() { - return this.bcc.toArray(new String[this.bcc.size()]); - } - - public Email setSubject(String subject) { - this.subject = subject; - return this; - } - - public String getSubject() { - return this.subject; - } - - public Email setText(String text) { - this.text = text; - return this; - } - - public String getText() { - return this.text; - } - - public Email setHtml(String html) { - this.html = html; - return this; - } - - public String getHtml() { - return this.html; - } - - public Email addSubstitution(String key, String[] val) { - this.smtpapi.addSubstitutions(key, val); - return this; - } - - public JSONObject getSubstitutions() { - return this.smtpapi.getSubstitutions(); - } - - public Email addUniqueArg(String key, String val) { - this.smtpapi.addUniqueArg(key, val); - return this; - } - - public JSONObject getUniqueArgs() { - return this.smtpapi.getUniqueArgs(); - } - - public Email addCategory(String category) { - this.smtpapi.addCategory(category); - return this; - } - - public String[] getCategories() { - return this.smtpapi.getCategories(); - } - - public Email addSection(String key, String val) { - this.smtpapi.addSection(key, val); - return this; - } - - public JSONObject getSections() { - return this.smtpapi.getSections(); - } - - public Email addFilter(String filter_name, String parameter_name, String parameter_value) { - this.smtpapi.addFilter(filter_name, parameter_name, parameter_value); - return this; - } - - public JSONObject getFilters() { - return this.smtpapi.getFilters(); - } - - public Email setASMGroupId(int val) { - this.smtpapi.setASMGroupId(val); - return this; - } - - public Integer getASMGroupId() { - return this.smtpapi.getASMGroupId(); - } - - public Email setSendAt(int sendAt) { - this.smtpapi.setSendAt(sendAt); - return this; - } - - public int getSendAt() { - return this.smtpapi.getSendAt(); - } - - /** - * Convenience method to set the template - * - * @param templateId The ID string of your template - * @return this - */ - public Email setTemplateId(String templateId) { - this.getSMTPAPI().addFilter("templates", "enable", 1); - this.getSMTPAPI().addFilter("templates", "template_id", templateId); - return this; - } - - public Email addAttachment(String name, File file) throws IOException, FileNotFoundException { - return this.addAttachment(name, new FileInputStream(file)); - } - - public Email addAttachment(String name, String file) throws IOException { - return this.addAttachment(name, new ByteArrayInputStream(file.getBytes())); - } - - public Email addAttachment(String name, InputStream file) throws IOException { - this.attachments.put(name, file); - return this; - } - - public Map getAttachments() { - return this.attachments; - } - - public Email addContentId(String attachmentName, String cid) { - this.contents.put(attachmentName, cid); - return this; - } - - public Map getContentIds() { - return this.contents; - } - - public Email addHeader(String key, String val) { - this.headers.put(key, val); - return this; - } - - public Map getHeaders() { - return this.headers; - } - - public SMTPAPI getSMTPAPI() { - return this.smtpapi; - } - } - - public static class Response { - private int code; - private boolean success; - private String message; - - public Response(int code, String msg) { - this.code = code; - this.success = code == 200; - this.message = msg; - } - - public int getCode() { - return this.code; - } - - public boolean getStatus() { - return this.success; - } - - public String getMessage() { - return this.message; + response = client.api(request); + } catch (IOException ex) { + throw ex; } + return response; } } diff --git a/src/main/java/com/sendgrid/SendGridException.java b/src/main/java/com/sendgrid/SendGridException.java deleted file mode 100644 index 57b35b50..00000000 --- a/src/main/java/com/sendgrid/SendGridException.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.sendgrid; - -public class SendGridException extends Exception { - public SendGridException(Exception e) { - super(e); - } -} diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index f9130bed..d2e443d3 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -15,24 +15,22 @@ import static org.junit.Assert.*; public class SendGridTest { - SendGrid.Email email; - - private static final String USERNAME = "USERNAME"; - private static final String PASSWORD = "PASSWORD"; + private final String SENDGRID_API_KEY = ""; + @Test public void testVersion() { - SendGrid client = new SendGrid(USERNAME, PASSWORD); - assertEquals(client.getVersion(), "2.2.2"); + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + assertEquals(sg.getVersion(), "3.0.0"); } @Test public void testBuildGradleVersion() { try { - SendGrid client = new SendGrid(USERNAME, PASSWORD); + SendGrid sg = new SendGrid(SENDGRID_API_KEY); BufferedReader br = new BufferedReader(new FileReader("./build.gradle")); String line = br.readLine(); - String regex = "version\\s*=\\s*'" + client.getVersion() + "'"; + String regex = "version\\s*=\\s*'" + sg.getVersion() + "'"; while (line != null) { if (line.matches(regex)) { @@ -50,181 +48,4 @@ public void testBuildGradleVersion() { } } - - @Test - public void testUsernamePasswordConstructor() { - SendGrid client = new SendGrid(USERNAME, PASSWORD); - } - - @Test - public void testApiKeyConstructor() { - SendGrid client = new SendGrid(PASSWORD); - } - - @Test - public void testAddTo() { - email = new SendGrid.Email(); - - String address = "email@example.com"; - String address2 = "email2@example.com"; - email.addTo(address); - email.addTo(address2); - - String[] correct = {address, address2}; - - assertArrayEquals(correct, email.getTos()); - } - - @Test - public void testAddToWithAFrom() { - email = new SendGrid.Email(); - - String address = "email@example.com"; - String fromaddress = "from@mailinator.com"; - email.addTo(address); - email.setFrom(fromaddress); - - String[] correct = {address}; - - assertArrayEquals(correct, email.getTos()); - assertEquals(fromaddress, email.getFrom()); - - } - - @Test - public void testAddToName() { - email = new SendGrid.Email(); - - String name = "John"; - email.addToName(name); - - String[] correct = {name}; - - assertArrayEquals(correct, email.getToNames()); - } - - @Test - public void testAddCc() { - email = new SendGrid.Email(); - - String address = "email@example.com"; - email.addCc(address); - - String[] correct = {address}; - - assertArrayEquals(correct, email.getCcs()); - } - - @Test - public void testSetFrom() { - email = new SendGrid.Email(); - - String address = "email@example.com"; - email.setFrom(address); - - assertEquals(address, email.getFrom()); - } - - @Test - public void testSetFromName() { - email = new SendGrid.Email(); - - String fromname = "Uncle Bob"; - email.setFromName(fromname); - - assertEquals(fromname, email.getFromName()); - } - - @Test - public void testSetReplyTo() { - email = new SendGrid.Email(); - - String address = "email@example.com"; - email.setReplyTo(address); - - assertEquals(address, email.getReplyTo()); - } - - @Test - public void testAddBcc() { - email = new SendGrid.Email(); - - String address = "email@example.com"; - email.addBcc(address); - - String[] correct = {address}; - - assertArrayEquals(correct, email.getBccs()); - } - - @Test - public void testSetSubject() { - email = new SendGrid.Email(); - - String subject = "This is a subject"; - email.setSubject(subject); - - assertEquals(subject, email.getSubject()); - } - - @Test - public void testSetText() { - email = new SendGrid.Email(); - - String text = "This is some email text."; - email.setText(text); - - assertEquals(text, email.getText()); - } - - @Test - public void testSetHtml() { - email = new SendGrid.Email(); - - String html = "This is some email text."; - email.setHtml(html); - - assertEquals(html, email.getHtml()); - } - - @Test - public void testAddHeader() { - email = new SendGrid.Email(); - - email.addHeader("key", "value"); - email.addHeader("other", "other-value"); - - Map correct = new HashMap(); - correct.put("key", "value"); - correct.put("other", "other-value"); - - assertEquals(correct, email.getHeaders()); - } - - @Test - public void testSetTemplateId() { - email = new SendGrid.Email(); - email.setTemplateId("abc-123"); - - String filters = email.getSMTPAPI().jsonString(); - - JSONObject obj = new JSONObject(); - obj.put("filters", new JSONObject().put("templates", new JSONObject() - .put("settings", new JSONObject().put("enable", 1) - .put("template_id", "abc-123")))); - - JSONAssert.assertEquals(filters, obj.toString(), false); - } - - @Test - public void testSmtpapiToHeader() { - email = new SendGrid.Email(); - - String[] expected = {"example@email.com"}; - - email.getSMTPAPI().addTo(expected[0]); - String[] result = email.getSMTPAPI().getTos(); - - assertArrayEquals(expected, result); - } } From 721e7a589368f19c5dd8652d9bfbd17d00696eba Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 19 Apr 2016 23:06:17 -0700 Subject: [PATCH 006/439] Added Mail Helper Object --- .gitignore | 3 +- build.gradle | 5 +- examples/Example.class | Bin 1245 -> 0 bytes examples/Example.java | 97 ++++++- examples/Mail/Example.java | 198 +++++++++++++++ examples/jackson-annotations-2.7.0.jar | Bin 0 -> 50894 bytes examples/jackson-core-2.7.3.jar | Bin 0 -> 252518 bytes examples/jackson-databind-2.7.3.jar | Bin 0 -> 1202276 bytes pom.xml | 16 +- src/main/java/com/sendgrid/SendGrid.java | 45 ++-- src/main/java/com/sendgrid/helpers/README.md | 0 .../java/com/sendgrid/helpers/mail/Mail.java | 240 ++++++++++++++++++ .../sendgrid/helpers/mail/objects/ASM.java | 18 ++ .../helpers/mail/objects/Attachments.java | 58 +++++ .../helpers/mail/objects/BccSettings.java | 29 +++ .../mail/objects/ClickTrackingSetting.java | 29 +++ .../helpers/mail/objects/Content.java | 29 +++ .../sendgrid/helpers/mail/objects/Email.java | 29 +++ .../helpers/mail/objects/FooterSetting.java | 38 +++ .../mail/objects/GoogleAnalyticsSetting.java | 70 +++++ .../helpers/mail/objects/MailSettings.java | 59 +++++ .../mail/objects/OpenTrackingSetting.java | 29 +++ .../helpers/mail/objects/Personalization.java | 143 +++++++++++ .../helpers/mail/objects/Setting.java | 19 ++ .../mail/objects/SpamCheckSetting.java | 38 +++ .../objects/SubscriptionTrackingSetting.java | 50 ++++ .../mail/objects/TrackingSettings.java | 49 ++++ src/test/java/com/sendgrid/MailTest.java | 0 src/test/java/com/sendgrid/SendGridTest.java | 11 +- 29 files changed, 1267 insertions(+), 35 deletions(-) delete mode 100644 examples/Example.class create mode 100644 examples/Mail/Example.java create mode 100644 examples/jackson-annotations-2.7.0.jar create mode 100644 examples/jackson-core-2.7.3.jar create mode 100644 examples/jackson-databind-2.7.3.jar create mode 100644 src/main/java/com/sendgrid/helpers/README.md create mode 100644 src/main/java/com/sendgrid/helpers/mail/Mail.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/ASM.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/Content.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/Email.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/Setting.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java create mode 100644 src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java create mode 100644 src/test/java/com/sendgrid/MailTest.java diff --git a/.gitignore b/.gitignore index e52e240b..7ca3c861 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ out .DS_Store repo gradle.properties -target \ No newline at end of file +target +*.class \ No newline at end of file diff --git a/build.gradle b/build.gradle index 35910786..202fe50d 100644 --- a/build.gradle +++ b/build.gradle @@ -50,9 +50,10 @@ dependencies { compile 'org.apache.httpcomponents:httpcore:4.3.2' compile 'org.apache.httpcomponents:httpclient:4.3.4' compile 'org.apache.httpcomponents:httpmime:4.3.4' - compile 'org.json:json:20140107' + compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' + compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' + compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' testCompile group: 'junit', name: 'junit', version: '4.12' - testCompile group: 'org.skyscreamer', name: 'jsonassert', version: '1.2.3' } repositories { diff --git a/examples/Example.class b/examples/Example.class deleted file mode 100644 index 89f5522c61a1e1299f779e84fa2ef3801f398e41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1245 zcmZuwZBr6a6n-us7jP8?wO1=k4OF1iQqwG7P*Fe=vvK<1EO5h>m)+RK(O=YOn+7Xq z>U%$`Iu|f8VTXI4J@=gRoO{l*zkYxJ0bmll9`s>|W7q>5hFo~;LZBT%jBt#)Fy=uB zVGlSWEMR`X}7s%o$s#=MmFYrEos2-`2f?CQ&QdU_j>K3K?bn_#~|9M6BR778rUndNE>(QZ`rC zvXK;lRRRoMsc3R}bvw4azpxeC--zyUEGk&SvaBG=;8G23KQB&91uIxpu!b1Nx`GYF zIT8wz*i^8EHxg|tNMT2!w+#MT>6#viZT`D518-cCh%Z~WnLZR5x{|*|KdGCSJ*eH^ zZdAy3I?&YndV<;Omf&^M73S25X^A3DJ|`?uI${`ZPJ1!ZrX&p$wZDa9-LEz+sL4$|NK2-rS{1XdSr%&= zKvO&oz>wJrBwt4$CdI0h8_bJ(_JqOL>axA9>Ze%mMeLeTv!YCj_Wsucs<%0|F{t1! z2GC32vi#Y=q}XY_MQ{DIGuqom&cIFyFx;lqSu;A}#vRR(xW{py;{h1Q SfDI4n%s~u2^nXOyhQYrvV<}Gn diff --git a/examples/Example.java b/examples/Example.java index 98c834b4..360ba4e5 100644 --- a/examples/Example.java +++ b/examples/Example.java @@ -1,21 +1,110 @@ // SendGridExample.java +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.sendgrid.*; + import java.io.*; import java.util.*; public class Example { public static void main(String[] args) throws IOException { - Map opts = new HashMap(); - opts.put("host","e9sk3d3bfaikbpdq7.stoplight-proxy.io"); - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY"), opts); + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.addHeader("X-Test", "test"); + + // GET + Request request = new Request(); + try{ + request.method = Method.GET; + request.endpoint = "api_keys"; + Map queryParams = new HashMap(); + queryParams.put("limit", "100"); + queryParams.put("offset", "0"); + request.queryParams = queryParams; + + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } finally { + request.queryParams = null; + } + + // POST + String apiKeyId = ""; try{ - Response response = sg.get("api_keys"); + request.method = Method.POST; + request.endpoint = "api_keys"; + request.requestBody = "{\"name\": \"My api Key\",\"scopes\": [\"mail.send\",\"alerts.create\",\"alerts.read\"]}"; + + Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); System.out.println(response.responseHeaders); + try { + ObjectMapper mapper = new ObjectMapper(); + JsonNode json = mapper.readTree(response.responseBody); + apiKeyId = json.path("api_key_id").asText(); + } catch (IOException ex) { + throw ex; + } } catch (IOException ex) { throw ex; + } finally { + request.requestBody = ""; } + // GET Single + request.method = Method.GET; + request.endpoint = "api_keys/" + apiKeyId; + try { + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + + // PATCH + request.method = Method.PATCH; + request.requestBody = "{\"name\": \"A New Hope\"}"; + try { + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } finally { + request.requestBody = ""; + } + + // PUT + request.method = Method.PUT; + request.requestBody = + "{\"name\": \"A New Hope\",\"scopes\": [\"user.profile.read\",\"user.profile.update\"]}"; + try { + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } finally { + request.requestBody = ""; + } + + // DELETE + request.method = Method.DELETE; + try { + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } } } \ No newline at end of file diff --git a/examples/Mail/Example.java b/examples/Mail/Example.java new file mode 100644 index 00000000..51a4c5a3 --- /dev/null +++ b/examples/Mail/Example.java @@ -0,0 +1,198 @@ +import com.sendgrid.*; + +import java.io.*; +import java.util.*; + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.addHeader("X-Test", "test"); + + Mail mail = new Mail(); + + Email fromEmail = new Email(); + fromEmail.setName("Elmer Thomas"); + fromEmail.setEmail("dx@sendgrid.com"); + mail.setFrom(fromEmail); + + mail.setSubject("Hello World from the SendGrid Java Library"); + + Personalization personalization = new Personalization(); + Email to = new Email(); + to.setName("Elmer Thomas"); + to.setEmail("elmer.thomas@sendgrid.com"); + personalization.addTo(to); + to.setName("Elmer Thomas Alias"); + to.setEmail("elmer.thomas@gmail.com"); + personalization.addTo(to); + Email cc = new Email(); + cc.setName("Matt Bernier"); + cc.setEmail("matt.bernier@sendgrid.com"); + personalization.addCc(cc); + cc.setName("Eric Shallock"); + cc.setEmail("eric.shallock@sendgrid.com"); + personalization.addCc(cc); + Email bcc = new Email(); + bcc.setName("DX Matt Bernier"); + bcc.setEmail("dx+matt@sendgrid.com"); + personalization.addBcc(bcc); + bcc.setName("DX Eric Shallock"); + bcc.setEmail("dx+eric@sendgrid.com"); + personalization.addBcc(bcc); + personalization.setSubject("Hello World from the Personalized SendGrid Java Library"); + personalization.addHeader("X-Test", "test"); + personalization.addHeader("X-Mock", "true"); + personalization.addSubstitution("%name%", "Tim"); + personalization.addSubstitution("%city%", "Riverside"); + personalization.addCustomArg("user_id", "343"); + personalization.addCustomArg("type", "marketing"); + personalization.addCategory("marketing"); + personalization.addCategory("business"); + personalization.addCategory("california"); + personalization.setSendAt(1443636843); + mail.addPersonalization(personalization); + + Personalization personalization2 = new Personalization(); + Email to2 = new Email(); + to2.setName("Elmer Thomas"); + to2.setEmail("elmer.thomas@sendgrid.com"); + personalization2.addTo(to2); + to2.setName("Elmer Thomas Alias"); + to2.setEmail("elmer.thomas@gmail.com"); + personalization2.addTo(to2); + Email cc2 = new Email(); + cc2.setName("Matt Bernier"); + cc2.setEmail("matt.bernier@sendgrid.com"); + personalization2.addCc(cc2); + cc2.setName("Eric Shallock"); + cc2.setEmail("eric.shallock@sendgrid.com"); + personalization2.addCc(cc2); + Email bcc2 = new Email(); + bcc2.setName("DX Matt Bernier"); + bcc2.setEmail("dx+matt@sendgrid.com"); + personalization2.addBcc(bcc2); + bcc2.setName("DX Eric Shallock"); + bcc2.setEmail("dx+eric@sendgrid.com"); + personalization2.addBcc(bcc2); + personalization2.setSubject("Hello World from the Personalized SendGrid Java Library"); + personalization2.addHeader("X-Test", "test"); + personalization2.addHeader("X-Mock", "true"); + personalization2.addSubstitution("%name%", "Tim"); + personalization2.addSubstitution("%city%", "Riverside"); + personalization2.addCustomArg("user_id", "343"); + personalization2.addCustomArg("type", "marketing"); + personalization2.addCategory("marketing"); + personalization2.addCategory("business"); + personalization2.addCategory("california"); + personalization2.setSendAt(1443636843); + mail.addPersonalization(personalization2); + + Content content = new Content(); + content.setType("text/plain"); + content.setValue("some text here"); + mail.addContent(content); + content.setType("text/html"); + content.setValue("some text here"); + mail.addContent(content); + + Attachments attachments = new Attachments(); + attachments.setContent("ZZZZZxxxxyyyzz"); + attachments.setType("application/pdf"); + attachments.setFilename("balance_001.pdf"); + attachments.setDisposition("attachment"); + attachments.setContentId("Balance Sheet"); + mail.addAttachments(attachments); + + Attachments attachments2 = new Attachments(); + attachments2.setContent("ZZZZZxxxxyyyzz2"); + attachments2.setType("image/png"); + attachments2.setFilename("banner.png"); + attachments2.setDisposition("inline"); + attachments2.setContentId("Banner"); + mail.addAttachments(attachments2); + + mail.setTemplateId("sendgrid_template_id"); + + mail.addSection("%section1%", "Substitution Text for Section 1"); + mail.addSection("%section2%", "Substitution Text for Section 2"); + + mail.addHeader("X-Test1", "1"); + mail.addHeader("X-Test2", "2"); + + mail.addCategory("May"); + mail.addCategory("2016"); + + mail.addCustomArg("campaign", "welcome"); + mail.addCustomArg("weekday", "morning"); + + mail.setSendAt(1443636842); + + ASM asm = new ASM(); + asm.setGroupID(99); + asm.setGroupsToDisplay(new int[] {4,5,6,7,8}); + mail.setASM(asm); + + mail.setBatchId("sendgrid_batch_id"); + + mail.setIpPoolId(23); + + MailSettings mailSettings = new MailSettings(); + BccSettings bccSettings = new BccSettings(); + bccSettings.setEnable(true); + Email bccSettingsEmail = new Email(); + bccSettingsEmail.setEmail("dx@sendgrid.com"); + bccSettings.setEmail(bccSettingsEmail); + mailSettings.setBccSettings(bccSettings); + mail.setMailSettings(mailSettings); + Setting sandBoxMode = new Setting(); + sandBoxMode.setEnable(true); + mailSettings.setSandboxMode(sandBoxMode); + Setting bypassListManagement = new Setting(); + bypassListManagement.setEnable(true); + mailSettings.setBypassListManagement(bypassListManagement); + FooterSetting footerSetting = new FooterSetting(); + footerSetting.setEnable(true); + footerSetting.setText("Footer Text"); + footerSetting.setHtml("Footer Text"); + mailSettings.setFooterSetting(footerSetting); + SpamCheckSetting spamCheckSetting = new SpamCheckSetting(); + spamCheckSetting.setEnable(true); + spamCheckSetting.setSpamThreshold(1); + spamCheckSetting.setPostToUrl("https://spamcatcher.sendgrid.com"); + mailSettings.setSpamCheckSetting(spamCheckSetting); + mail.setMailSettings(mailSettings); + + TrackingSettings trackingSettings = new TrackingSettings(); + ClickTrackingSetting clickTrackingSetting = new ClickTrackingSetting(); + clickTrackingSetting.setEnable(true); + clickTrackingSetting.setEnableText(true); + trackingSettings.setClickTrackingSetting(clickTrackingSetting); + OpenTrackingSetting openTrackingSetting = new OpenTrackingSetting(); + openTrackingSetting.setEnable(true); + openTrackingSetting.setSubstitutionTag("Optional tag to replace with the open image in the body of the message"); + trackingSettings.setOpenTrackingSetting(openTrackingSetting); + SubscriptionTrackingSetting subscriptionTrackingSetting = new SubscriptionTrackingSetting(); + subscriptionTrackingSetting.setEnable(true); + subscriptionTrackingSetting.setText("text to insert into the text/plain portion of the message"); + subscriptionTrackingSetting.setHtml("html to insert into the text/html portion of the message"); + subscriptionTrackingSetting.setSubstitutionTag("Optional tag to replace with the open image in the body of the message"); + trackingSettings.setSubscriptionTrackingSetting(subscriptionTrackingSetting); + GoogleAnalyticsSetting googleAnalyticsSetting = new GoogleAnalyticsSetting(); + googleAnalyticsSetting.setEnable(true); + googleAnalyticsSetting.setCampaignSource("some source"); + googleAnalyticsSetting.setCampaignTerm("some term"); + googleAnalyticsSetting.setCampaignContent("some content"); + googleAnalyticsSetting.setCampaignName("some name"); + googleAnalyticsSetting.setCampaignMedium("some medium"); + trackingSettings.setGoogleAnalyticsSetting(googleAnalyticsSetting); + mail.setTrackingSettings(trackingSettings); + + Email replyTo = new Email(); + replyTo.setName("Mr. Elmer Thomas"); + replyTo.setEmail("dx+reply@sendgrid.com"); + mail.setReplyTo(replyTo); + + System.out.println(mail.build()); + } +} \ No newline at end of file diff --git a/examples/jackson-annotations-2.7.0.jar b/examples/jackson-annotations-2.7.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..96fb17cf4f29d9366da993932a1b724c2dd39ee7 GIT binary patch literal 50894 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
6FSsTf*f&tseLL(JOtKoW&WBIz*J5 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
@rXZM>EKRlEvGn%FsBKY_wZ>&({ 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%0DJX~krLs`?JXV{Y?suOGWS&Ge#B;W7@d$Zehe!%z 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 a(HUr6AqBwi@L?zrBsdW$vFWrY91v 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�byw+?e0aP}g&u}`(KPZ@C4RTLwC3E_X$ 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 @AV1Qy*<>wsrT>0y!f4kF9|e~c>08J8+K-NA4~ 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

H3sHoUdY@exR$x(*{!^A}_;yj`_r7^p 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≠N?G zIN*VdnfauI)9B#X%)1JhSa#^*<1fIx^a{b;O_w&L+>civ(<-Z>@O)3(ZE&d0DWrI~ zgo_~wwjcPne^i8Lkr>X=+F&NQ)=Z^=4kJ$DYv4@kZ@)@E;wbT`$#UoOYQ}8F>Iz~$ zVeT3?OQr1v(slLalXP*&txp%!h39LRmz3B*CsEMy?h5f$mHw&l+HRv2OG8%3>INa) z^YaU9nKNK@BVHV3q|fzJw~pZRr9pu|_e;+Q=`+c%GOLj(jH4ev8>=Go(kG zdk^_}rPcEq#$6hl8J&(jIFbv&RGmVA?@35aveeJdBy)E|Dx7XLe6Z_t!PDi^G^I;e z2IA8Y92DT6jBwoW#<+Z38=B?kq8wNFN0*Ita{jD}Hf0GE49h2lovnd=r2+;)` z+!tZdYoDyCdy;PB{(x@$qGs>*kR3fd&vK{osOT&eUMDsjEnJ&;RLqg$59f^DpVG-js(h5S>ie*#qaSkyE9HL9tltO(GhXj##cEqf675(#~B*Q0+`HulT&ufbUU zgVQG9_>31~3-g+POjZ_Yw5&O6`ZDQzimM!C?C?O;q(ms6%axM_0Y`4N6hHGqqo>NKKlM$;DG>`>2%6)caP#U1W?zW z&pS^b-0_92DvaQ}%$9x(Ps>XM2k0el%;43V?>X?)^Rvj%MdMuhgEshBlWZ!};J&g& z$`oDSe4jllfR&cs=%Ax?k?JCw)pC=xt2VVB;z&bz9m9EEeo&NlwF?srIC=n!w`}?u zr_)(G1uuwwqQ17Z-vTH0&N;Jf!$~>9!7wNF5RyiJ-rncvWM0G%n2>ba_7g{|bTzYa z4C8i~61cd{M+!mCE4}k;Wu2H$1rMB{KA9`zb`0KGDCG=fB)7V`%TzZP&X6Qs(Iwnk)wWz8a#WmD4VD>^29<0vX0!OygTV4@bl*~_Q&0HFw#|} z@oeB9p$0=tyq>EUX1)NW$(C}>fH4yzPez2}*JccQ>=mE!Tg0XNIwXWh@a=CJM()YY z$k2sv!;tu|c-XgFhOvPE2+iKs%?KClP}DP$iYfhgLWY%}C0=NXV*+-U4KYH3V=)5zRMbF`G=usKEVK_#@>kCl=zE$Tt-a#EFgvBaG{x<-1D28X(6 zYf)52gea4=D7W$r?O|7lY zoMj>euMM?!%&fL?p{)n+;yQl5j@52BEJUOs5i3xg0G13_)K$*_-0mHkAT&xf`lS%H zbg5jFK17@arFLt6m4ghpE_lw9)dB%5JNG&;6Pn8K;bL;~@O0dQ3JLBWw85}QkT^$< zdD5N?9?u(IG$3Nu-R$y|u$Ff?BJ4-VyM*BtmhRA-;7mPUCitM%46du`Hb`*RwseB3 zl9~G_8a{z>^v>mzRn261}hDMS>=3ZmIP9ApEw5 zGjPZIWhKh3`Kd2qz1Gjj2=!FXkYSE$UU8dwtTH3EaCKYu-D*B>=tpqJn}Y4d+w?sWI<%T`pg_WB4lX%@n!Gy_LV0zgP3nUmW5^7((NqAKyYA zpblZ_AibA&`s|!ZObC{SE=d1^5L$O@9X8{3KZ$BaI1F~z`pWV74XdxF!)jgb94C4@ zt$7n_Dx=r`-$)0fRJKOOdX%B49+fQAy^Ka1R(oxdp@$QbyMSKvgPAH^Z;jnMGOB;j(}VZGDi z7l*)NCbDLp%o@2&g@zWuwaPU{g}cc1gS4%_u|&-H5REa z+}P&RJfGQ|+vXD^pLq~}!#_dXDtb24HLaa5Hi4vZOqDewMis%*in|%*<`~E1(mz72 z>cQ8ucvkyflh1fYyXe#gHa&K(0ixu1LFJ9E+p=jk_aZK7afy=R$`i-MBF zgTtpne1W7k--3(#N6Bh0G7=&J&R5-CHlJ|rhX>bq7mOP>rXU}GB6Q{Il!>S#I_(oe zac@>Y)|vgqVY)-ZqHk7-kU{^>Ce$_8sE3c+5cSsB=u>7)SUHKSp27!1fy%q2S?D)jK4iDaC|PmIquV8s8<>v~_{{+!vy&N+U<1hH zGgU)cmHS3Te|tw5sYocBe}_X0Qp%g@X%4u?sraXXA#QzP&(+E4d5pfQhoty^x@}qH z>~+zBe|JQWR4aVtYf{}ZorgwOl5KO9XY%Y1GoZT#pP#&Tw_IT6^JL^f8i8nTRs4 z)XXt#VDJiy!E>Q%P*#yZ=3V01r)zZp27H+c?cy8erVwBX%o=O-2> zpP$ahDt|?gbw^S(N4;F;Yp)P+nA&t@vh^_rVudZ}9t#$UNF<^Eto6Q>>#murMiZ2n8<@haksX# z_SPyE9V`N50wu;W)X4y3S^O?_DwZ^7t~Uo>m!Cv!x~B!EhmQ(B!w|}I z)GaAg91+i=gXiOCi4Xi#jm7j+`eua{`GRy#6K|z)^GqnwP+5aF2x`~oQ|vE@VME==wdbWw{%ACp`tv^}wg=Y(*vdiP@7)d#!?{T3td0^p; zoo+dLaXB#B@WXjfZwW>wKS79B zU;oW$3@LfKPp^VH!2TPC>l(w^!{ALzZkW5cBJq>5nrpJ+_|BU}zB|R$h!a^w`O$l~ zJYzBn!#&CDtO9nGmDRRomfG_AtZpf)-2AzyuIf5`$|s1g*3UXSX*F{Qjl<#9!F^r2nZ18+7$GtuPK|Na*1#$; zjO$U!m%{es>*PgR!Zp5eBG?YdC<}kTo=Rt+j!~>k+Sf~Ke`}_aD*9?qCC{GqdnX2c z<-Kk73DJQt9`QQ=N%3-Rwch^B+CX!6xy9#bp?Mb0&!5M6RwalBCAzAQ^EW!nWBxZ` z#4yIqnW_+Gq9ka&8jD^%Y3%4rm{$QOHz|18@ z0&?k!s*a0F@vm!m?dgTlf2wu=I6x#Go%aG zrg)Ez?(Zv!8rt@?{QU8NvoD`qUhY5n$6ezIAvSGJC}uiX0!GZg`9cg*pZuDTh@37P zeJoZ&d`t4xr;@ea$Mkpu!N)e}7h`{9bfgYUobMJmzt$;qrdJxWBTRqYd2yduj&J#I zhcz{bW&GP%$dG*ZLaUvP3q0{2cI5wPSa4Kla4`{2*k~fJfZVg)_KqXoDjsK}<>s`w zOp9}~P~T#jC6kkNFccIswYu1DCATas-wAS!#LbyyTq;v4Z!^f(UA6CID$o3t3!WU+ zhm7d2F!0? zd+Ul*c|A^!-y_03qkaRz;23Y~G*<4RbZp{^r;Mdf_Q*CkXb_K!ehCZhd~raMOv!7a zBu&b1UxpppmN&e|3`TRp8%OeM#_iSo+Y)o$$kV6C+}FiGGSZ?d8NJkKu2G`%#!m*# z#fpwIKZsQU>FsxG1Z_GFO7&+4hn)5bv>zReN}apqU8#RwB*Yu9jh#N<A0I+QeXzpA?>LjD=zYQ=?ZbbR_pJ_IPH*8q2^FKw4_?>qzjync zl4t)wGJKE|y!YW4;JfZKc z_X0062nozj?f0t_L(ePxE$wFy_IFsT>!B78g7olTq73A}5idz7s|~NLJJ-cW0%07v zVP1CL4!}PoG`%_C{Q)b=VV5Ak&b0+W@VVxKe5GC5kh@w(eOY( z=1M2>!9*~>PyU839M_JFj|t!$VtEHid-eC;$^uupFoQN>z&wQE#U9rdL(NDe`!Pm> zOawIb2AkYtU#I*i1p5(=w~h?IPuu+mq$UDj9TL`n`XfTg8_9PM<#Fgi?4UIgqI{TN zA=*nOx~kk{%vtqt9g|7b4Pf<4awdMehz;{HHKYf~z!|@9oH%;Vak8S*JL>+AV(hWF zLsKfd$&XHZvfq&pyXhu>ZKLMr1G`C&={w2nwson3$+uj?$MBGJlQhp$C6p-{U_4lo zi8@SQ*;`-u-Wzk_hq?0Np|Q(tLgbI0G0?6eSzq*S1Vn0iaIii%v_9pZUz82lLO@k` zx;Br{F)PMW-&Il%;MYafYm;A=Np@5vm#i+9idmMZ#bMkUk}@;QT#j+3_!XXFm6Wn3 z_Cuu!OWifP$|^p7pljILq)hDC>{!Pe{0=3d?vZZHnAwIfNM82OYi>|5)WVXAgx=_` z>CYc`-u5Zw@uY1qg5ZVF&P81J^WYeVXUs!)!kA-$mpyji$wVM5{P5IpS8g?VacM?-d zFK1w_Vc}Rj!E$LR^AHsb+^&J>&)GN{d_ci(VmJ3+6oS~48J~jYL@tA(tl;s)G&~KvDFcfewpIoD2ZC_g z4}}6J79Cp`fikKvwN%lnb8k7tF?CzMA8Jc?X*mfM%kBbYwEq@ofyI0U$@QgmcUV7U zZv;7Dp?@>-HGENKXG2O5N;%b#5w*!2H=d5koC!N+2^^RFV4Xw*)D_($S{(#W`ZRD2 zfoH|LHgZLd$7|}21sN5i2jOkykso2{7O0IpE{q=KS-`V6{Cdn7&958$>NQU|$2aL()cKVB7c%KDc*vwiDL?daZ}2FS zxe!b}9CogPdUUIfjF6aTUZ@sNq4U`7+_!>1k@$0CX~3g9SB7y+MQ z0b&n6V>Q0TBL0XH>SJYF6yqqC-v(NXJ9Oa+SNI=ikWPe&B5c4^{&8I+saFtQM`j|4 zS1n@C7<-0aMDy=v2N+@*@)!TM&1i#s#13Yj$!(G&qrp|4dY3dxDKsu`pXtHw-N=28~0k(G@RFJIADH z(e#etm}<=xwVMT@9e(57dp0kw8wi>Shc{?rc8xY`OKYgA&`HTWpoS0Ht_Q)uri!VB&R<{Jyn^#jl$I3OyophE+jve_=f)>Q^M zgQaC!N!VB`!%2RTd4R!=hTh;x>NzO64x1@b)buaAYOfx?LDnM2QdWzjf2PQLiK52lb5~HXnRCUVTAmuOQFI)%QwVjOek}x%Yh|#Es z6CBccUAABw<(o^*p$0zMPjw>KGrI^6vPSP>07 zz6QRhvi^E{)|H$N_o$ner#qEN)8&X=z`Clyic_spTk9#|XU07JmJ&1$eN5K|5&#%b z$*O&V_hIUZ$F4K_m@(*EfkEd|iO(mnBGs);7}**6PXOd?sMgK!ejb1IPAfXTLjlsI zqk`0!=^T~JZ(p{b&OGY#MDP03x^|szQ1t~aE@RVa7|A*iM!>yo1ILNux7<&&L&gzQ z9PyiqGl)Q_lC**n>OlN*nm*vhWS4XCy|ml7=Am;=Je24`YtBJy6H46xPF|Eeyo)A6 zgTJ#6yc}|vJUWuuypMlvYTaD*_z=>nt5QsBUMffLNpnN$k`Uv{n5(l120)c}0+Bb_ zu8H*2mBfo_i*Y<3cu5HDI>U7&fOIr#g)QSw>`Jy~Dz4;3;zimeGpvB!EU)0oBzuF> z;#emHa|zskGNc;3q~IF^wq89w zf%XE*T+ibh%pG5v8P7z`U-?%|AJ6)!Te~J(-;SP%h_44nqwO1^e=)kWN1>-mzx)DB zZwMkCCNQ3LJNr8aY_51m+H>NH{0a&K`$~Hu;~4pv1-W_9`Cn_yq3?Ks*GubMMcTu{ zF(aDu+0eHNY^TtWr@$*7uT7UgMn)?*IW%5%m6XZ1rO=0=ln0v>w~+c1N*;W(LL9fB zYC)C&$EOz76O1E4GTo~6d$`w1^XE#F=PdKKRl0J<3a>?aop6c?F~J1?A0`DZ7cxO9 ze1tH~b_r_}j;Y!MHo|Gj}ctx(u@o#@y+o2aAM?o^r-Igz%16<~ZNaJ~=^Vk;;o z_;AK~BQT$n5q3#=M1PAcI46qyVJ?-+utT={h&7iWLYAapn#&k{x?XhDe~$9#SQiNU z?hg&{V?*r|C%G5+sB!*aZot0Aa`>8XA4H1f^4onv`|&~W(GAflt@~vtO5x*&%CDVENqcZFbKP8IKGsTRZvjd z+A}|maU!j|g(I(A{IOiRK_u(ube$DAT@)k$(M zN2fBdob4I-k?e|)?1qc2*=6(;*ia?eK%uDm<@b=9D4FdJ;3@l?r@`EGf&Km~<4jsb zQ2<(}@u}u?Ep_QZsq@F@nWQg~BnZT!j##(lm|gT8<>=*Lldc)`F#z-o`W)n17Sz30 zuyB{OupM>2DDx z+#j29KR&v`K>$g?&6Psb%N+XwVdH54+PzV5x3bIL7rYgY(y36Uk4xk6_MwAy=SPDi z+e5xWz&UfmIWxjJ6T&$Q!a0M(IhTZi3@$cd?!AZwdzFItm4T#3f>1{C&d0gv7K6xro7k_@FNt6=37TjbILmWe6#{RW5%6T_Demjzz|_3Eu14QWIo{& z{=#Jb8~ zaN{K2`@zX^z4kAMiAdufG^TLBki09rE}X1Qn)63^y)QgA*LpCY#>}glk{N<}GNRD- z*W?n%^PhCQk3`&pu_NBNdji1UbfaB^AFBRB?}yO))uk}oU*$th=YqIJe(_)Z5HlTT zA7N0?&jgc_x@y|VgF=ntnkSpc+QKkPwniar`#0Df0TzyrU>XKX_b7RWVIx|d*PGBZ z4_?9sFC^Y)M>*ji*j4KflXlqb66%<}%@!pSx~e~D7nk)=KaJf|sxL%jKfLZ{_* z0&UVrMa-N*PA#=pBD|lu_okSc<544hZW4Mwvi&4?)zj=cjTYuW*j3ICjUq$Qe&M$I zPSqA_3PX$l_fBS7;JFeW!fq!@9iTkYEO2I7D02W4J@+8YCo?b*KDJjzLosRWD)>a* z@1+gJ8F~Qmqsj+GcGtH_19K@IgQZWDtK!&K{7THoqgqVQH0HTBsuta&gxnPQEVP{2 zC-2-N6`hm1a(t(L^|E3|`-kmcvPnO6kHl=-g&=MuZ`js)C2g-{=+%uSAa}sphYTwv z`Zoh~gg}so%)I@HS8v!A?-+1^aCq?5d`NK1cPvtjVd%@SEb@Y&{udHi6-tqq7Z^G} zl_In}@a)wphIB6wV5%^k>-gZAG=J{ltw3{EH}7M4F#WEZ4f|N;y#-k%9_6F`wsn`H zmRWKiV6bt8Th4BUYUVOoW#Y1{ohR9H3@sbv*mg$tOoTQ}$9D`D^C^Jyf@43r4eyp? z+LLV_Do7(FVpj{>+}gvUYCwM^KPz2;Y6Y9&SX}rc$|`uu9*@EJD42ItXi507WmaOv z5dY)L8HgjmENc89eitGRJo2?Ws9OWZfO}w8n{#gZfGemgN6>jNPHW-=iaL>$)N|)Y z*M_v7+>462(k$R~$x0-)TP5J zZO}73Ws(o|M3FK;z!9lod7Jw7A&ndB5;Zn^s*Egg9oD|%VAE)NLk;RV>xHHBPyKne zwqgtW=ILLnBWa{ks)P5Voe$6S;i{DwxGd|a-BLCkc-L&E)~?ie44%`5gZwk=$X>!A z=_|m!A2ZPV>Lq^&BR{O)yPY1tbmkF3#DS3u5`k(dK!Gn4fri%*_Ojru;*hw0UE)UcxDzq-_Uw0!_&VRZEuXYnNK6 z9S&yXp05SMD#t6*G&{}MkiY`lvl2XCI(dVbx*Vs))zwe~PS7Y}r0HWwb85UeE^w6f zM-SEZ7WtqH=yWu*3k@57(&>xlFDFoXrSJa1%_PtRmT3--n7b`sKhTy3y zmnP-DJ@b=nVQn^@ZqsFR1a9Z-V><7J8tiFo7Gww6uy0~kj<`@JrF^>TRFrW|ca!F{ z1B&Yz0=$Tf5Vd2gHy^jVsf_4O5&n-l%7{ZtxwpgLn-Eu#?4#b2J&3?9LY3+rM2ibS z7R{cyCimtVGzc*&TlGEcs6vgCy@&OsgW@5T@H$dZ`wlkE&hVN6qa1{1REQ6n&;Wvg z8}SBZvh|8Y$o24%1U5u~GWW}%V|v4-=?B>iC)TIVuD1BA*}5IV6*iSw5Yqj!c+{8A z@D~`~WUNY2ulazHm1#XY*CdKrM3UIRM*VuIA&#VOlj^jJrCh(2+#3He3c>ocX#!x~ z85;TydV4_Bo607-Byi=xnGu#mE{GN^AJIkP?t}+leV`Aj2xqTqI zg(6PWdp3BU2LU)PDwqhl&5KYFA42EPdY%sX^s%QF1QKzP+hFh&O=)igATvnLV(lOR zXwnM7{uCW77GSvJF*dhC8iJSAhq|a|Y^jAMj{NJoaJp3H+g|K@UZ)Ft5x}b2mPxSk znGli833`Y*`7NX3Sj(p0BoG0H_vt|noTDWF+Z<82MRAs4=le7IU(+*XPmP6W<&-dV zPJMI%J0<#in^pI~PgdfT#_jl3hyi+%OOD%D_lP9z20hwk6rSDKAF5a4+zk&YIny{) zn?`-buq%=37jye^FBo-J>bkayA7`VFeA@u)(~4pS=Oq}zr}IF}ehpmbi6pQ9xhw|> zy_GCZE2c;aAF;VrEvr60B4U$Ar#^iE%OTWa*n$0clZuL3E{Iq0WChLFq=tN=2aRCIU{aW4*huUg-P0HrFK@K>xzYyb--i?1I$m`#jwVcYnP0+A1 z<&JpJVlpwH47=y?W-fuCfX$9Zp|_-}PQVvQ=p(4NP_h{6BWZ5JRW4oZOE^$6tY{6n z)`ErwOSz#}!Hwea7o5?GI8rZkb+J;`r0GtpoA{=n#j&$eDnNR%N+oNib=NrS=|-(Y zdOKtsBn3^SsU4eZ%!#ox_KMyhVJzAC^orlo#W&RxhdWUqa@5WY{0Wci_O>W;os^;I zvk`awDJW}^+=Qc}D#%~SAS?TV8|g%u9D-YQF0}rtyEVEyTgd92RyN7D;hpmfY>zRd z*J`h|Vh_pnb6RWw$Y;pJ(G^;YwiGgWkq)BYQLK;+QacHo^wOsy4-G@(C&3EE3 zq!E;MUu}66X$T|?fJPnGUhy5-`v(1p`7Z@+_;advPwzVD?5W7`THN@3G1s#ol@$t& zOqVA%Z)$qOFKD-S=5}U@xev@4qW#l)utSf=y8u~M2;m-3iFL|avj;BhAoVE&&=|-f z4vd3l2|@nK8is_#28Y>C2~B+cHWM;98KO3bC^wM{nN=xZw^x@>#P^(?)-eOO!dd5y zG;tc8~aAf1i<760G&5O%tBN%J3bVIlZmVEJD(qpoke|A@! zW1z5X$unE$##)T_QS3{Z(uua2StwVq<8ukL-I>pa-6{qDkbBH0!O+d+;s!b_6_X<@ zAaY#bZpk2E7f=F>l?vFgI3i^ztG?rU3VCT=(!wvEcxP7K`8G0_S{W)_DpP)C%Rbhn zk}z&vDNz0CNK0OUppTTG6r@Fke8}KR=Tbv*$vQ?*%E>r)XJ-I%EBh~*|18s_{2b>A zTh7hq!nsH(w?JTIQowzt5f(*~vvil^i!ZhQvy+y`oBDY@VTs#~A%GW8P*yqEBb!i) zzNQFtG_D#X#E0yQp-|wZV6U`*RH){Qe2W2D_4c`ZuGiwwVp7v@?+D}fEmc6P7@Y9A z&dHFmTeUy%DQ&l(%{^S$)~ePU;CNz&JbK2pbwSvOnWf2$)Q37fm84l#OYqce2};m{ z#4HBuZjO9P>21}DDmp3s;d!}(f5P`!HC1~VYDq6oY=N)p4dCKZQJIFZQHh;oH#kLZQEAo_PhP+ zy{_)t-LHDpURA4h)m}f=*xxtiTyxAZ?||76^To>;nWpXQ9NG9{{h6|3fl_-42&)Z& zQv#wQXlqoL8cxzq2L--9jU1ya0Ksr)aJ!RB-Ovz`)HS;u5jbt-1!$e+oxS39JSHKR zd#XrR-V7Cbxe>70nY6E|p5{K?%!3tS2!Q<=b!HC__aZxI=Y$gf{MjBPPYp~pjAm9U zD{A`Lu7mK=V3+5}3}-bJFp*bItAlkAP6k}6MGa0#s|Fo!UycDQy}SL|yv|g*syJJm z45I@SDF*-Rj))JbG)W`p)8yveh8@eXllzZwwOh}8Ahvk(c3q!amB)X~e;m^Ih%*K3 zpkHPJvR6dTP2YqcW@^&aaH?_Km5^B;$(WR^kXc+PGOWZyG-09@)_f!zJ^+nmZ$Pxz zS|JqJdLis<&9GE!v~++TiieRGtOn>)Zt=P2vSeQY@i(OCIXUwbU(u`_f=Mf()W3ad z5KvGkmA?#b!xo8z_R%T_g2W1r#cnzx$;HrL%Ed3BlHPB~jAj{j+Cj-YF}Mi?(+|8D zK1tuk5ab($L%Tt=!)TIyiR^m|MBik9*5cJvflwWQ@z88UeD< z+tJU-z^k^OQLLcrAd9NXd*L`bm#=gPh~(?LA-VthHogD`vHE+Uw8wDwwhbx%O-T6} zsxzn5Bv0N2w4wv_BMjx(1>u3CD&s4peL|E3qaa$&3;sgQQk<#Yd0?69^EuLbmKKa9 ze2S5}U|EjmWe9T-PJJ;%qpJ^x760c9fmSB$~+|B*4|9ZgJ4oQ=%?8&OQEugjsTVSeMe!h??gajafhQxypY z(?&ys38SQk7AbBJDyD|-1cjw%IiH}7s9u^|ddUC%kP^b5cUz1wxAfa0vBaldLhtRH zwcE$cR6~^>D=rN^fo1!3%DZ*jjT5x@^K(EB2!2Nw5e<`8m~RVpT%;Zr>=vDVtPQzn zvTjA2E+`_Nke-A*#T^k_)FcW_A<6-(V?{3PFhd<#Xsiep5HeP`x8N4;Z$DnJj`zxOHGMllMGpBu5zY@*V7Y) zQsrCfaGMNd`ln8VlUCM9q6-?CP7&Zag_YV^tct{jQP<Qi|8-d4Y?-5WNkoY2n zB`$ng|DJt5r!FD(IQpv;hP6gi7Wx&ve@QcO8uqtE+8&IV^}-Rq8UO2q1jGE_g|p>h-w zZL3Gc|Fy}2Du$2^lmLqtbCh@#(zcR4FTYKv7bg-o=%%Y20jM}pb(o1YKU`}0NFzp6 zxYacBT4Lg;nlRL1Th%HDt(W91SVvVxikP*J9)=z1--sDYuwe6>xdoN_vo8%3XzxRb z(&%LVF`+35YSG4HC86?Q!9HbD(UiEH8u}(3rOfH(%l6?5qjd$Sp;?c>gLT$ro{0!T z^D1*KkWJ4S2w7DJP;JCHDD|=0Qn}+?Q?^BOE2l$m4e5jwS_vrSN|SH!AZS`Lmk(hW zpw;A*>}+>7}q)?*ia!mouZR@F+3qSn_E%YBJDGjN_A=o|eN}eb9z)^zzvb zKlQzrSWSv^@`qi&_f0Q^Qk%DhX!;DiF86Dr9LR-{qon|v0kJ#yD{Tz$`*ZGtq(gcG zQ{lu+N^qMbBwFo3Ds;P@dGBU@;9VMeux-k5H^8e28AyWk!Iy6 zzB@lDz6eq8A7s8ij(lOBTreJY=JwSv74a7=scTaB2kpvf)(~~E=44)~0J9vo_i#5L znI8kw3w(`niZAN{lwUY=J5F)M5OE-v>qm9G54?9_aew-3m1Y2)P zlM_pQ>KrgKcfvYja}pxuxD|F%<^R>@B_J44^hW4-|B~T}ajnS@jLi>?EsVv%+>?m9 zIk#^M?Bof?@*N+#Wi>GklSfW-m_R%xghyHw8^slEjJ&f(Kh(hOv!YLEG$-o1mzTtE zE}(-jk<)@Z<&ezsfkX%6TFIp}s#1T2kzrml!F`7i*oI(|!LY=N52nAsGWbWt1+J$Dg zF90f{Nbi3k*DBAc@#5@2r@k-q!lopG4g2QuWQq5Y(e}4#EUl}k->N1u5V4#Th zu^Hx+bjy(nPlC`cB|EUG9>k#^vd^h{AjtqWVek4jOL7mUu6W{3n(myT>z@_kVra8R z(8u8o9Go06=?XgY1O5+!5+0`J=L81=%0>FG2#V?d8$taiFKNSgqb@G;A77Cs(xTjf z2pymaFxn!6g#Gy=fQ$?Y2SpD2YoTq`x?iXP$BmuGyIIqwd1-0M66{i|xVc3|OGrzz znc?#M{`|gik*}x6+RDmmyZMo3o73%TYRcBMp%d!i{pGXG>3C}6oPYoeLm>C&~PyBM+SMHTP*X715uN_27hF%*DaKH0)cl-k~%R8pg|0YVZrqM{^8=RZ|f31x+ zFQpo4&6IPlI?&>5;e^9b5B#|L9#MCYh3i3 z+4eE!IC&}$QnVLluYXyA0h_j|O!aw>plJp0o^cPM9M$HuUuhoY$bw6(tTk85zVw2b$i|oC- z7gc3p(rU!g71@sI_nrA6e1m4_m9k&uCJT9pwlFzv|T%+h+btf39x z^=+ToRNrjLHD5q@8vuQDjL&2#pJPHrG%czD3IjAlr=@(|acz6LTI=Nd*JX&w7^&~M zIUb%xIEblcaa5SKa8cola-JN(%IA`N!X~;|BPg-#d!Zfca(Z#QS|7#T+d?ZYVc(1d z`amXUlkB>iQ?{|7!o)vf_wR~t)CwKLX2vJ@gsC?&>+!gA==O$VPu^y~LtdV@%FkI4 zO&F&viVFYxmjt_?k=Y^mXqsi#B{++W9ku?%CH+*mI#Q-{COY*mn@E?>0^*R&AT-|HyiV71WdqGWFa`L+IKft}#dW@F z8wE;^ux7BfCCi(-SQ^k8uR24cHX4UCwW;OqrB=gX{xpgBs^oy^IebWsT5h*?96RU9 zf@u>2_A$`60a}F5%1ul=i3V+;w)CFe-hej2u@CZz`iI2esRzy>qpX|c7Ah?FxU{F9 zwnZ}gry=)FSiFU>suf|;=4&@ggIe}HRz7E~VTvNq&ZrsSRHH9KbwT31+Fky7wN_8p zUf>S@E4HXZRU{17KCYLaFo`nPbicUIKUF*4j5HwlV`3H!_i3CqS3LqOl!eT2$ujyb z5=u110fh@Xs9ZB!5JUMq3xtJ1TxVPgaH`xPjdhOh42gHqup9oA!B1 z2@3x@PKg#HQa&DJifXV=016@BKsq9vV&)r;p`}|XBdQgAV>0EnHgDf&8ZYEHv+HlS z(Mz9{gC!A+V|n`A*_QQB1<9SMX3%JEMZC8-Rq%k@!I0^H6CTy~rF;xX^?bRn!`tmL zpMThrJ?}dHp7{ux;#ZMLBuEeO`O((jV_r!4o)o4lO?pxhV|M!KWn&G|sk$c`Nljf; zQRD>@Y)BmJ0R}eXOZp(MuTr%@HQ8?T561{1W*SeI8kgX$LgS76HZH37Be{C2A~ibF zs`s-y(h4KnAz|jdV_`66^`n+JKfr~e$A7t8b(lw`+WR6P6ijqUi57bJ*|@SnY41SxV~M~fXWX6z2W zZHe}uUryFxrvm4WiC-^pAY-$t>AjYag$-_r;(f~k)(P}E51QhofOKibPuw`(Co`oP zuH;JbD+xf`Xe@nS6ZH!B9O-Haq;KY2$&nCiaDTj@NZ2Bwjh2jZZ>Zfa+Rt`ihQADO4)N+n`Y5(@ zLz;jp6pV92UUu7^5eCOwW+NL`;Xv~u>{r5BQZ}pt4RIM;Hu*3*)KbUk*EX|C`WEcH z-(@V-Y@oG6=a@w^0s!m%7FT+%ww0+NGTH--wk3-l?OBr@p;;UK<`siHxr+nCRC@Z~ zgSPb}h+ab`;5=Y*PM41KHH`MZbq9yA>FL>o5#S&1ZX%I6c+iq6ha>y89{&=D#1Ap4Co?Eq8!% zS%qN{u!-qKVIAb<@081`cd!syRO z23aMeNA_Wo0M6i)B!Q7*Jm z7aX=_JlcqJCG*MkQ-0EW%I3$VA%bZTRHB3a3UVhQWA12<;3LCQmzY~RvnSm7!5-pu zxyGfVhQI*E*2==hPBSmFk*A}ntEHowoRF4FEo|(}POVJrwKdoI3YJbf=%93kf51Xb z)KcEPr(p@}iO^GBz1bbLiIc!&rI*Pj8rCY-rJ~;g_GWt@Sv`&Ijg`%X*|_?y$0u94 zixiU27o4F^nu#1>W9f9)(K0(#%l?hd;Nz>N*YAEV?*Gz9`Wju9#;|O+S2=nPV9~f} zAQH0bYj_eVqOyoS%pNY{SVR^6_(>t-L6t$)*@7IqTJIWn2^(IdBj2f6l3?y;S-xKp zOnwPEfnT*GPkO>)66MInj1*x>;JKcKNehr$`WCvAB?IF%(mIDhQkHHfuW(deZ* zIBOqhcAgf}7)HmLTWz22yy(&C4Ma)B5>WLdA&# z@iftj#74|*{0z2tr{Q^rg~gw;nDMFmTHtMD+&bJOsQKI1NN4F77q^qZ{$1NsHI1%7 zrT6pQwWJ!c^jD7Z=EBnK;s(ih$S@l;T5$bAYxz0(ql%Z~xVY}2N>kJ2$=clf%-rV2 zYGY+%b7#Am8DKre^lNcsN8FmgZd`_VvF>b)>NA8&VO*C65N-@P`QC5<-UvtTyGhR0UD^iS_&2&dmiCQ#5Xi64i{ z7dsa@R=u;I^||6u%$ygyNVclvRQ4-$MUNdzi72TkY6v~2UTKnZgW4};%HtEzULDx@ zkzRa1-A?iO8QVL16$XZ)Ro3qPwjLNa9mBst!N1Dc=9LQP{NrzCW*J6X3ZlJ8ZG)Y51lm7*>1=%V9oCVrCparyB4Yc42F>w^_Qz5q>n{wyL-le2_ z?O%B3344{i{Jx`e_h##kpwlTB_}u>KUJ4Run<3*4`E4|S6T6kY2< zL6}?n21R+JVkrmMHIjG7jga$qb1M!BqcHdf#dwwzP|)E>i5*-nmOuK8iJJQ-VV|+u z7FBZnbxEw5+0rX1j^_rLI`uCqbuFpxhdgArJT!1w5MKf(FlEdzcBF33)UFim26 z{_gJn162G!5Qlp1C!zZ{f(e0E1jKld8eWim(wN#_X%B^cVr4&b8)N}^2d6g*czh)T zBwRcd14e%q>@zs9?gd6eVpCC5#BF@~7tp)H8PlHTCf0~W;!Tt2@srt%+A-qDfJMX3 z1QXs7$9&Qb_=FtwKo{-l76x1tm#9%j5?sp3&K1dM?p=g#9{~*oqRYb*-iu^W9Ldo? z6Qgm~I38Cxy2DSlq_cYBIl6;6x|2D&qaQrDS!c|RWqrsShAawyJ|@Ycn8As{sW$bn zgBE3AlO=a@)ByK+&1AHqvRuW2Eva7~mW6;ulM$z@=Q%IKAfPBY&+!gsa_XZQ(c zloBpcMI8v}^E~Cn8VR^oE-A_`Hx?E7Rb)jKfl3PlBv!fk?ZpzJ{FRtKjo38fEG&|0 zfgZ(H;h?S0D4P&r>-&S35aH_xNUa1R_ZHp^B+=wz2Hid@{L#qlM`_Js+ zQ;^C$;D^nHj5eqxase_e^H6Dmu9;Fxn$oniM9o#C!BrF|q?tIhZ0zdRwtpy!OptPd zrm5IcXOeR*V*8@RXsf(epOT8q(x%aPqxq{Ud$f|mwv^=SJ4>EOC!|Yns-j71hvJv_ zMk_fCEA*TTHPdAuds!4^()RCf$V6Ol9uJ=*(<`RMj`Zh_ixR)0qn+zTI@DtXlYZj| zO21LLXVgf0{&~B*$T}pspW*^*bbA*ykiEnOq2h#cGK=o-B8^gmKT|W``5s`aH`9=B z+!?wy8W^3(R|u0p!P~ zXMBep+LQ8m<|CG_2xr^uPKVh2We;~GN*ZV_LgyzQ`QwgOk~m;aZuV0@eQQN~`@N7$ zmS$ApjEdg0T>N*L^KWV(M(OHcu2J8#|FyV#jSt3G0m6 z)m*pa%~Y_r!yw-wQe!`G-?ISSM6fqtAp+;*Pcw~`&tv+NW{tcNNZy~{GBnh6W?r~x z01ni#OdbbjGc0|zL(m`WpoGi@^o(Ki^66>5%Q+W53pf#r0 z{~BcOmNMh=0des`lD!Cy^}{CqnSA9F)`0A{BZ~KQ7?)Ch4?_i&+Hw24I(SV+!9XMH zN+bJ^?2b}fV24I@S19;e;)vtL0mrsISWA}DPrUCig=no$F{^ zHm!1wsrM-2HIymMPkP`(3HylU#x1qHkt?$N9+1Js@0iY2D=(C8arS|tt8zkf$P6?g zAvADUprD>;JA`3<+M6Gz9`LQeT0?l59=KgpzjV+&n2Pyvt|-hH{xxMX^9>_gNmLU^ zX{$t^<0W2&R7^Kz4@>M*zmRfEc<_pUJ0_9KJUz})*w-81@daP}0-dzaZ)4fGfA<7d zX@gB%{8F+84Wt+BsEa}Z{XmIs7!m9t+3_gXA2Pv)qRSY>yO?9+K%d2)U zzev6za&tfWTD^R}ZmqFy-o=)AEB7WlC#E0xHFX$Qf;UuBgeN7&xPFPc?R-Co6by_x zm9wH{{+tPrG?6Z@_f|>MD)ADB7nI0$-*LV{a6HaD?fQkG#$?GVdV*bJq)B8EyR;_T zY2nMNlxwwCi!6AunSI50nAMo!V0XxirPFR@T7cSc6TFnp47-_sPxcIhgCIkpi<#+z z1^tOugTS`bNosqZ+z6INo?6>W=MwElHYB1q0o*Gg+$*q|UnonxBafdLZC0WBiL5ay z&p6CQqqkLt5{5x)Q~f**0-<5j}2X-H7 zXJZz$t9%2;q>_H74Cv=}>0oRupG`n7f|ZW?N)8+h0U`Po1v)+{G6EIv3+EPGv(1jYMz9i8*EtPv{lU75#uNAHVE-$3~CFRD%5I&^Ij>_ zO8XK-))^04aTGl^B)Y~(3<+Avr-KaggPEwehC^?Z&fK@3PB<3pOEkCLhOnnFBlG{@ zDbD;{7XSTYJ*&iZu8FR7ie zW2r*-FwfG)Tg5A*QT5TXOMJ2}QpHxKtZQN_bUw_s6^X7X3|%p7H(Qdtc{q5X##wRG zw#dGk*rgtnO7*Dtw20n?tXVf_(9QzdNVSc^CVc`ft;Xy{KLayl<|Nuj;l%Tz7W_ zIE?JID@LD0ZJ&!`Bu7+FD}IPnyx{I;xqg$&2^|?aKM$QdY2kjvz? z(jCd5j#7Pv>?*v_Rja0b`Fir$wG#5RyQKrQBVGsGqgc5+g}q8RE&~X-!}dC`C&XAa zA^xBfUj%LP>q+++sQEHa?gNi4kmQ`!KJDpj`F#(Fs;3RGbDrxUxE!y%J}1-`_p4yG z>CU|Qd)pPjBTf01++*FbkA3p-r+xP^sD0+KuY2W46or;J1CDw0JGM26uIsHYbBogD zpNc~iz4iLQ9LJ6J0qk5iN&=zZ$*}et8qi?1{akphdKLR*na&qHa7skE{P0GpF`ExS zWk_*3a}}CloQ~8Oh&KFJf3xRIJChnu6t{0Aeb`1MEQIXtoJyjo4xS}>C~W%b7YrLv z8Iq?Gt;iFNc3oqCVo9hgi-7kAn5@&B;lTC6ot8>x{R)O%}>U#=`0ln>cKJ8V!gb(_Doy>O$RIw;o8`Jh1M!g1++* z>K@QS5=hT9NHRuT;vRX~5q(@rOCF>ey9$5|0HJKS&#=7PbJc`NgJyv2tgSwNJUfvmt?#!t^1BxErb&B}^ z1WLYvS~5;nd0BXs^nSR8&tF)Qa3r-3|N&6?Mve( zyjN+%7zwWi&z+V-p&wv!{~53}DqQBvIjs2&te5;NWnbf7FkW?^Ij1%O2VR>6I1z@x z_eqiY0;QpSCtQ&?#9=*Z5A!V9aGz3`pk>A+X(nZbxcV}aKRl!3cAPHCtRPA}DG<6? zZtPTs(hWA^llwp&wFa+$K$34LvY#avFP{zN)spWcV7UylEo4z{8Cj9BR4(A_I97<3 z4&9QjMO{6C!=cabQed`S<t5F>CUsH1cb7u@0s0<(co+`qX^liNxsqZ&CL@;6EpW{y z>-_c}Ao?Jipl%FLbHexXEuw3gTg}m-z$F+DO(5!KzB^FCvN`ZkjG#Q-b%gOIQ2Tsz z|HvjxR&$b>D!d>Y=WUT^uhX8;D~KkN6u%WquvI>qA4__3A({88nGU)3C$O1-+T;;- zb(c!Q-ZR!LGyJ{;2Q(Am-}{%WT3tiNO+F$bkSsRz`}|sYsNZmw`$~dh!zBX0lWv<- z6n($eI(~a3y&sHSgbYt&Mq4I*R7sHXkE=g6Tis>rE+{pUb~ESF#>>?k{;nb$#@1&! z9g&MK%&-Qs=UjY0`S!&O!PMd2L0+}}@r^Gd47Vj6-}q&+Hp!^t1?thn-fw-0-Y{3q zsON>EY-Ja$c`180e%IPU7%pi_%lWQ-#Ln^b))5HMajG+zXHjSW(u#N##2~>HU6NA<4}rCNdJ5h zI31Zm!jVn=L#q3qI$RYEI~*0%FI#J~uBb*f3zQC}zx9b7IK@QyHcJUh z8fUaKNyy|=tm%XGN?utdkiTLHNp*LMk%fE&EVL*J41xN(o<}Q(;7WlRhw@6nvXGVO?g*%CatP>4n zLj$-7T5!zT{$dG4@o)WII9x}^1XlB=n=2RP47xlm`a7 zTxy0jnw&U&Ri0933hx#O+@EPnXJNi~F7XTrJFz-M1YjxUE;~JNN+Y^8|2&W67&jcO zfi7Ca@V2&%%RC#&zw4>lg_X@vB!#i4DQ1rwK|i-lmuC|>vn*n|v?*NHX1oKzhmK*x z{UcDPr#E&=HF=<}l@J_dL3^$wx|N5+n=ZYyz#-JJc%d)f0dRor#n!=q+c3IYt?&@X zSG3qDT7b8rVFs^Y0~?2ChHgkILB)`&iDL!>Cz+?We=kF3qN_Uqf3gI=D5W1iCrp}e zZZFE2E>W{^Bb+bZxihBXkj@duNfxet>@z^XentL7BuaLb zF}aeg4at>VW22cGa|TkE1i2v6u>QG3D{p1qAy0k-k6X{uFo~)K(pI{ML?mB z*-MMq=g8k9)h*3Ys1LxQmaRWT9##9`uaK%P-NSdJ*1XM#7~sL(C7Ny{ho(mE(li-) zc8EHtqScWMX2n{4Y5M?Xs9*olT&8+<2ov)FyFXk~KxrNl&>p>K2Jy3Q{ zMkqbzk!~>g=+`XD{6WM^yH>ZhLI%Y65=F^`{!$+{OD)yxI#&#c8rpKmfw#a&)R0iMh4Rsezmk%I=)n^`V*eJb4 zM}1{MeXy=<;Wj!SRaCKtW=^(5?$o8~m@lVR22RTiAVs>jHPl!!h&pA&Krbc6pc13c zh!B}K9w#g-bJg!{H0U(cDr%~l_M{Qea|VzuDU5Kx$-l?ZaZhO=JrOi!Yx&~`3+?j= zspsLdmJy_unawXGk1s@PK$O=Im(y!h3WdmuAl`XtBu;=1vJ zTd&wzugF$#EJ_~kmPsF=V_$kJF8q#lEr_`cy0E{z*nC&!vO;|Y4Z6kZ7Ryyy(BnFB zMn82nlz+PNc>SXs{5sSrdTE3dxh^u|+m(Flb6JL!3r8tV+&V6Kcxb1?pf>{7*(a5n zn}6jnba<^pe|=@q*Q?5ws*Ce8A)+PEeR=nhhrYtJ?`!7|9Cyaw(25zA9)9gXsTFsK zYSKlF%qhHAF^Ic9#{=?ko&W`mMV{meUPl!hSau!ycWQ?315eJ=ig-JQXx}fl=nu@1 zplEh#sd#aRAwH4rxL&tjLgPyu*C*=hp(*+g;W_H=5|@W%f$0U{2HAgcC13x$u1c$^ zKb`qUS2Y6vUy;)P3tiR!K}xa)HYWd#kdoDPoN&~zd{t>YOgv1u8;mH(7vN-!#1yO0 zLBJA9TyP;0)?~vC=ZjdMG`CjHM`_eFiyh|CDIWrT?FYc-br}KtiXmf+ws}u8jMBAx zSRn*JEcOG-f9*jB;9&9oIZbKQs)t&{Y!PSahJuGyYgo zWw;n4_&Lv-HlO%9d%9mp5kfICWhov_rmu1*~mcTVjuS`8|6jzqan+@kldB?vJh6}W6Y^9Q`CYfar|X*$<=9?0L5N(RjGyKQvp$@Uu$eW1rUsC0)N#{CC5anJ+hQS@|PG)1ev zO_pdh>rd~GBu`ewYhUO|s#OPcE6RAKXJCt1VF#pOx)Q6$590YJ>}Wkk8WeZMmhJkv z_QI&HL5XhSX^aktp@T-EpwhU1`A{rwUzqWk>j^-~!H4$G-Gu=q;d6{PP2qMsndCWr zjpWRumY8pG92~`jsMh6kIKWn;f1Sv4Mp~t%cca2FZVJL{AsM^Z$M{uUBAfyUE-S)Q zZo{XvL_YffdTV>dG$+{zSHLU(>M`N!eC;$}+hrw!|P+*6ELn z63g<%(?(BKc5sUvR^S&I_-%%0l@1+b(2^_xxzTcK>Bg|muH#^6W(Bh;Hc``t)?}Dc z2KWC4?l*zqd5PD)ciLfm655bp^~QD3<+cUzAGh99BkgALZTS22X&%2#Wjxx(KWAN| zmrvJgB?aToJ4QuVAFT}WPRR2)X>X2XBgKev6;=bhw5U5Hr-M)l1Yxd*HnSefrrqIi z;#zS)a}$n&8vs2G*W!eKYaY0WPba|ls6Oe0S*{5)rg{R?W@@A^srrGhj-Ar(jZTKb znjAaV2-H^(wU8R+oY4EsIHn2jfNLE){JmhkQ@-;Z-u!2J$Rf(9WW3>XpMh1&1t>dd zK2e12@=1y#$FMbZ{T)DuE7Xgf+ij0|T8IX37auHvx*+yEpTQblL<0CkYzYWc_mR8G zo!@uBW-uSu+1&{`R77f)k3Bxc4pNL9G8e5cnclIOhj6Yv|PnejoVoXHcT$AhwOD^0ko0kNO zF7Hwt`*!$`>~3%6AH0|fu56#4h$O|wqT+I9G9+P5+qDwO9(sqgz+rWd@dD+pMoPz~ zindg0ygQ}Fw>lSpr-cNsVcgFKRtZn&X1L8`D#!i?8}-0Q?0#2+zih+o$}R2LCBBq` z_!#x{=q8VGqn_Z^vd(;r#~p2HPI4EU>TY^Z_TI+Er%PvS5_x9-8XEnFT^ZbK_ixBc zJc?#+qUz$1`|;c`TVqc$<6H-EXEFuq+s|B>@~ zi6HzS_O!rXU;CNva)Z(Eu`Hi6_3LAL2X|^d(APCTluAiVgf|m}&Q30<7wKf%1M{Qsh;e04Idn;IH<<7l!-t#Ggo2*t`)9Cx zwUJqcnaofez%n&s-trpT)s8>tOQQ3;pxZC>;>hwcqpMvy5ys@1a)AKANA#vCi2<=5 zYY;Xh^Po@{6HBG>VWVNMg%QgeHGr3--XL%G4f7xAY6?S=ODDunx{CZiMh2$;r*u{3 z|9!gp6B+z;jVd|+^pKjEd5}t(7#bJ?41PRH|MQ#wOkJ*6bYY6%bKEHDBZOXk;;b+Kl!BKs2De_8xCSpF#BY`Mcjw^}K zvqUMmWlC6$kXQ=%UgQx zk#<3o;mC6i@=!JQdTUI{S!DSc=VBjP{b$;%njCb!o)u76<$4sxPJTl!gMHJusfXxz zy_?^I_)A2S*P6aiaak~1o$54q65bVBdV#vlwJcp$bK>(SrmJZXc@X5eL5C-qZY2^e zu638DU!V&g;~%)l5Dl?KFYsedt5uGd{Z^FwV+jegjE^lvbN6-(D`}o%RHW+` zv4yGgmI5RM7SJ;yGR{gtz?KGhI=jnGXalT~NF6Z)&Y&Zw=oQX5$0zjG9idnqvEaM{ z6Dw8^bvj>I^bTpceb80Lnxc#mzA4VugTGXX#!(r8`A6gDEMXaWEe1c%8l;bbel0P7 zOXwcg=h#5AF*Xq3t(g^_(0FoS&SJnKm8TCb2D-LzgU@yGExHqh(1b6Mplaz zkMA&oMJkMh?ubKyU?PyjlmQS3>#o(6r=khfYktKTUQUKM-5^3>B)7Zkvvvna*Rz^>HklfV@ zJn=%;DxpZIC6~JjDZAq1E$|{j<{lYxiwUN*f?!Lz;M+)PF+OP=Xu1SWI!17pY?FP3 zf|};oWsIIr<|gn%C(EdxlXNUg-YKnAQvulB^rnt!Ls^j?{a^f-A{=j-N^b6{)ll=j zzwfg{2_G_VycmV@R~{2^{4!7?Pj+*seW~JjNqXtk@WuAhbUna%$uIeQZE&1JV2|77 zKpHT2#4!iuwYtWbOuQ=P#Ce^=rcrKRDDvrAH1G$)tx0!d8+bY7ZoN@X%%TSz*2cVl zK!$*HGi;mn1O@_P`vLy{9(3*h3`mxn-#|;L77l_ zPv@83%oi)#6zucqaS^puekq_DP#QLO$e0;sx{}9}KHdVZbfD-zfcPc5lxQ|lg94!1 zV-ua^Y=!uGxA=iB42r{8sXb_q>IdVv<0Lx(ArDKgi9}9SfIh}!DYCQAHnIscJCPt| zZ@inbv1sW#qBI9Q3#=udPs$0V);-aVsb=WldVjWlwya&*rd%w^V@V{ky(Q?1wntDr zFSiXYgPgt5^SeB=<~yM)cd3e*PR2J~%xCT6dgV*K?8#pE3MN#X4m%JB>O}D6;qwdE zS5S(x@HTd0LP}%x?h6_UquC_Yxx<*Gxft$pv}UcxL=c9(ipywAOETlQNu%`qSN>%K zj!fyce0Mq0ev;xlOlv=47i&ThJxZ)7@^0W&T$3$Ahz4#u{aVzbIEqXufu{hf2r2$w zsFWbdQ?TldX*i>k2&*P{^G(!Esr?`kgK~+r1vha20klRr3zyyx&?6xK70|N(%RtK; zI2jpO|6eU{DJf7U#IL#KHO*?(>IjOyKu>$Y8)YP85#}yeveyH z_Zx_p!ogKdBya5qsPqx`ZD~^>-R&GbpbNv|AleFebUa!p)Td~@>muN ze;CPg1~Sd04{8T5v~8k#CtkyXYR7&~W*b8^9vh`%$Ge8vzS(JqKsgqIG-0gD+ThxC zIyY|zNeTW~PdqRH&wnw}zlA!1E}0U4NB(>zL8bl(+{!m&C#0zJN=>#q3il2^1x)tK z3dkR7d#_@;Of3FGwdP4p->$%`E(X>w-Wh6(hkqQz>uMC@Ze0#B*4lWdj?XqASt=;6`ug~!socLnaaJ}}vlnZ~lbH^hJ73Da8KqWptr>3@l*>i;^P z|5*+ApTjGmpTO$B1ytS1+qTGpsKdQfFpwgZ)v9z~l}pg(o8}Lq*vMpkX)_^Vr_BS* zGu7j?>3C5*A)+XHeK>{Tvqc!>TW|8ijpHr#NCQGNUQAA|Pg(cxQ(0pd(|VoTz#BuF z*x+{-gYx2grpT?B$mcChF5yHe<91A#CaqMMM-?ronccF0GPADTnSb7k&25cC$(OyM zks(_xydlLIj-5iMU*y*-4LZvaRSv%{{-8#u`-9GL$g&JTO~j`X zd}NvOTNKnip|RwSMtmZDGKJB@^7NZ;bA>DQJ^wnY7r^p9XPuJ2*yEdg=8{@!7nt>E zNQsLU{$x(@1jZmyV2F3&BzAcg|KB)!#~@vzu1oOVy5(EOE!)OZwr$(CZQHhO+qP}n z=G5EW5i`@#@%2ncWJKnl{FCS8K6~xG*IK2@HJG7q`h<_#QgretJ8f%$V0EaYYqd7UxC^db7W{-iD#L`(ic3a~L>gDGhp}$s7cPxe%xA zFm?D0b|et|Dq=lw{hq6njFTYh8dRx*`Io|N5;y^S3-jSW>+rSAnddM^_)y#7aui`8 z?=_gbRb9G67esN_ChBpIh!}&}znV%A>-CH4dsU=ued(n1LHf~$N$KDU`-(@0H)U`N z!|7H6b=Al{Y3A;TvxI+rv6wW19BKTa88Dlzz#^DXcoqj!7ySYS2DXw*3k&k{zT zoa~OP70QLshY|aNUQP&kM;%hDlJ^&4lUoRr63a`6G9V4KTnGZH?1LA}&t9{QWTO@O zH≺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

X)^1 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𝔵jY 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℞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

  • y=Ly8i($vSfzly)Zg347$ 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%0DyJ|%zQ(AFA>K-QX)Y@{ zM!V%1`MfXRjR56D`T`vt;Egiqe#%4LrnYV350;?QF7^H@1@%_Jgjm;L#;wv{%z`lXkt)VObV1;GuWC==_} z2jdI#^YC1P5!`ARwRIIq6l4F&AThZZfPfeeCGVj#5Ym6sK>~)$?SL(;ONp_L6bR<4 z85A)d3hTXQ48+?Nq?7k{lw^)AU_cKrGxjkqvU9nSA#EVCG3A-~Hld0W{>t6oM)E-T z)JO9bRFPlKx5?{hqx1*ebq+4MV{?!fZf2YzGZ8`2kmpWkBBV7_G0`{%U{_DVX79;l zIzn&>MY0ybjM5R`N@o-cOplU%S7|P@zz65G4 zK5&LCu&x0lpdWl8O#nT-sKh@jl$d56qfzNk6U95#@M3PU{GCdS3wC7->4~`UaXIHA z;Sx>2L_SX9e7(uyjVC2y^SgVc&?wVZ@jr{~n}Xj`y-)%X7X_o@-7!~Fh90g0&U6jKO;^GS>; zuMT(w){C(xQM*i4LOTYdwDwhH>F)S9j~If z*0i5sEtz~eHh`v!nJNdR77kG5G7txSu++kwOR!wC$R;6zIU&4!n3#`nzR6A0J&|lG z3Rnhgr`Yk+dnft_4A$(kO-g53i|k%h|EHU{+q^%VX%95;O#=h7;8I-O)Cl0iNa)~6 z&FGe5fEMNq5$ovgg7HF7%ssA|x0>-Cg}N0(h!epHt^DEak% z!3$;f;gJpKC6+Z8$-#LZL_!PV40Ed=RJ%_ZI_zEdM;*|vIgp*VWChCl{$LSPf zuXPLrd+rq#d+rq=>clfq-jQ}EG`;x#^TTf%cHTU?l`*+f zN;w<1U}1G+m85jqc0lZ&+=p?YL7W(*2rU>sh9xF6+FnG*A{Sjsl0nvGG83sqinyFK zBK^2ra$vw?Pb!ccDOv))lI^amy(Fo$=;hXUCv=?!37mns%^S`Br(B{Ae+icmj~7gy zEsP0ACQ1wsP1i$#r#0=+5?bN#!pq+o;)u|`-`k_w(D zN}LF^lCe^oCo+i?vRd$6Ssi!RsZy}7{HI5^5^$pYy2{`2+SW7k_^y5}mOG%ClY{HB zvych55cgHvnqR9|FICF!6pZNYkcrt2AX&;;GgGJoG=7^JIAsC#Y>^#Jicu0K&(%!L zg_Wk8W~S3eQH;G^2tkdzyix1DG)Q6NcD6`@d+=~N@Ppy~Ht~Sum>s0(oV0xK(X$_G zgT#l+CyAG_ujErqZnuRrXR$Pc>9?6(Ht4F8>6?^h$%pbU3JPgt8_|l2FOdZb)Ss_h_+OJcWLFdV5@1sr|eG@YLG?o zR+GuV|GlkiUY?e5=W?f<#|?9>V8*y&!}C?kv+?pi8%(PwsHCI&vHY+EhZP$qiWhD* zrAe5v(r-oWv_EKc0Iz5ZC5d{Pr6~Pv%OM_S_2F(vmFr!VDccD=;$}fULw$#MjI0iR z8@>|wGziT1sUP|EB_GV|=V`@S^-gwGf8X~AFk0u#pV{}*Efz~zz-d7Xw{qt`o=BpL z5zC}w?lo^Vk0ho@7Ok5>VE(YaE>A&Inh-np5y@ou4NQ@(&LY8RnOkxvpTR7FYILYz{NDl2tnHD3>8SXqIXIQ;3Gw76oC>uB9w}s3f>DD^XF<+!T~y2HY&iy(P4w z$XV@A$l8al-=+^H!xqx&JP5`iLwds*@C`|RO~EySk*zePe232JZpP#hcsGz;f~vts z4BH#r?5yYNf0UyrgXrS3M9&9oS8A4F&1GhhP}xZrRrU9ZW%sY}qtb>_mIkZD{gAeE zN#k8Y)(;|62e%mB;MD620=G^9w|0Uhn5El|E&bx+&*BK>@1jPdKM5e+3CdZx-(`aSM5sp0;?AX3BSkHb*Ql%kTZgRq!c@B4z+`%VHX zQP;!phB|Ne%g&GO^hf6C^MR?;Edo9V4GZPr&vgP^z}BM$yihgo;|VTSPV>&-F(hf( zKZ;=QeIg(CjFC_xXycP48siHXKG!Jj9|dJ3ZmkbxdYYH28gOjK6JPL>T=1IAoZ+7l z@8yvDQ1eDNLWs$h?GX=7MCSQ zQI1g6QDBMhxmVdCGhzu5Ykz2>6qJP!j1}8Np9UFZ*HZ%zas2j0i>= z5XVmdW%H8N{ z_RNB+bP6nS{UTHfw4Qr*)fWLmO0$z8b^FTa@gT`6~Jpv*;l0hbSZ z0laCa1cUFSsrcQ|o(>yGN}q#`|D6ILYgD=@9{o4EjhY~&2!$O`7{IhG%1~l zi4aU#IgU@kUUGzzw!+;#R5RS)1TAyEMp;mct{awI*Vs{gqNaOGbJKWil`7H8hv-cW z@E^kCWQmilbQC!kc=gs)XzyYDD5IFwHEZPTvp-_yI=B*q%pvYZ%(@ZWr2I{zSjhZW zklaSf#KFBv`dCFUlld5d*U^|M`Tfbs&Y}pt&At{M@qhH4-)?=nwCjz{_sIo*W)OJ{l ziG*>c7s-BgIy!45t@s)&D+%8T_xD0gzV$r8@QF&f@hlJ75v_c+*Og1#F$W%EtAI+C3u|AONFlUq#sO2s{Rd@}Jt` zK=6e4E%hC+`$D4~>i4M%4%~8vqV8Zf1&-LxdMcXgW@1b6PTif!$s#G&a>l5wX zzbf@HPb@`osqZlN<9t2gReH}YyCT$*3O)RVeX0^jD6+4qM2O4S!rrkOMe@97YHLGN*R6Wr z-TxGmke)i(VgUps%1u@xugE#EMZHowQ>5xiih5}x-orltrjWEI{j`WC4yU%hfH~o$ z_HtRFBxiFSw{ojU_)Q_)&02}EnT8Ojnz2&3GxCJcE|T@hqI_ZR^b6iwq>I0=cOVSYB+#$4%b?n?l^mY<3B6iG%U1T; z^>j?8no>mE-jYC|hiTem2i{{!C-6_IEKn0Ky!6P!I!vK2UP&yT7`(N(JBW0($aqz& zo}If{o7qKLU)3DjXlkJG651Ac`}FiSy5X(VSWJ|D21>L^Lw6Aut7Hnitb|PUls(C@ zu)%?C3AUtE>4@H>#qIK70q7|6O356n5z$=x_K z5uGR2=J>RXrF-g8*mOFI_MCdEzN7RC3Ae#AYt-PyOL_z%xbIt8(k{RedZgA}b(B?! z_>>gUIWm-dZ{{+Cqt$oN1@8Q^)H1h9r%j=$L7Nk;>v~W`bO(xVaVdegAzwyq?I^o# zcf3=A{R<&VgLsu{iyIJ$ix(M@{|60dbKh+{$Y}I(sV!pJSasb!-hMyH%>jJ3mJ2jl zJbN2M`eKVQQ9&6ORlGWtMo$USj?i1?YNM9eIl6heCH^@3Ice3kApk1bf}uw*4y!03 zGMjM){hg7sl!j`qRHih0iExU5I<3%tC@WzD14Ho?i>OUYi4c_trpQqp+z2j@k0@48 zta#2qOXiK;7)m#ssn=+_&-J|f_KA}X^BV(XtlC>Io(6|EZX$PZQ_c;P8!JeV+NbZI zoxz73@`cQAY~!Pcj=_<-58eyASq_r^?N)c)Y(&YA>txmE$>R18G2M)+bk8E|31Xxh?$8y=y}YAeJsQ&2pYsyt}jLnw>{#QTD$cs=^eHsMC<#cIHT`8^b@h7MEFl9 zL7%J~=BowQXs4n*qpX5Gx2!yaax0ku2IOorxm#^68aXBwULcgHunhP7vpECGL~ip} z-*jTYZ2{gCIYWv7+WBSz zvcY@cj7UrAx*leXrow{V8eA9)g$$1qlmbgj`Cm@sP^Tell7ZsgBXLr}Ep@nOD^uG- zOh!)@CZmgQW>a@1>~Vqsrojkfa=f7exDvGh9f|250(UM-#f?iYjdzNg4B*r3^ z9FtMXT2*`RZW0XdO+N+0BK@#RQ2Xe>f)qYsrpjEQ$L{K*=JLu_1LhDuMSCL-+7%9C z(%^@r6h0K%y?(jnFYGzSSJ71QAL=5*v_wt5E$Oe4CneIhH&lXZOUgb}9mWFdA~9dar?m z6ccXAxJDOqydziFl0}e`wn2}4B@+b(8n`i_p^zVbw)o{3b;K{U`(0~j6?_H<)Rhpf?7MRtO^ zd0;%^Xqz@^FGF`nKd8By&>0bq$5v%%LOErCL!U(`eBVzvh~;bkyf!;Hijh)i1CE^t z)6tT!DLj)a{#(Rd3YZkJp=~IM^|cy)cpjOgY$3;(U=|}!$2pe0pJqQHo~IchM)_(d z!vsU>t5u6}4RUI}?F}-8Sriuli&g-QeW0QRf2aH)%1SIHme}7DM;;CB_<-Si1oB}` zYkQLQbjAenKiJgJRMDjKDz9omd(rdt;jX>TfmQ-|z2d1rN{@8>g+cPBDSHd224^Ts z8&nq;zj8I>j+~}3#BeqkI85#4g6m0Lj?2jt30%w4U;RWtC#`-Fp{#nx0JvpV-APf&8uv*nXg8<4%s%c~_$$9Icno^eh4CD;$9Ym7LzLYt zs?xT0q~QH|($9}g_qe%Hl>iwy- zkkab2wlu(*CvsqP-9$kNt3Eg*K=7egyh5n?bfFnN4BLYkvLmJ`3clFYCxOFPdDd2yN;X-su1etumZEcz-#596tL866?yB?6Y1A9y z5jgM{EZmSJ7nsfwjd!r~v9gY`&y<|+puv}B&N{6_@7HuSyz*j7r{-=WM5@E}do|%- z#wr1voTTU~S=HH|@xi}XJ!3Z;T4(E37Wh@H>eP3e82TI5_Lns+2u)KJC{OVSLC@G_ z5H(19x@uNS5u?2F53sDyH3b`$TZ*sOOcbx$q_HUyIaHU)%lQp_36D@Ep`mtEwHPB~ zoN&ZT2Nt*OopR)r-(|a8*)Q@NNEt}a^5(V6L{s5@R zIGdyk4x7F{v!7pLc!A!L5V$FOLwU;G*#3jg)w{$F7=OGo+T{NkIv4tHqH`5}D`#VI z8%HO78z*ypCtHVq1L?ym6E+KcNZbo-%+MuB7&wPZ0(nIFi*nmUNM;j-a(eJ&0niyl ziFCvDgd6-^Ef;Zcy#A{JKuQ4M^#I|te+}XGrrDJIA}c`fQR+>vvf7_F8C`4cUpF?M zfBmte2Zl5xfhn2|uE(hw;ztZs5ZkM3z!Kjjiz%P8M+8O`M%*WnVSE4{NZm|F_QB(R zUVlIW?Ch(vn0E|}>)fSs)gX8!yWH_=IXo2&+15l31??x^wvuSYp?jE_yzShy37)T? zx&O;jjfCbQ(QtKFcL*60YA*eL`aSr@`@rzGu{7lSc%SxmsYh_htGgx!LLiDal&)&qx(tchWTc0Q8r#3W9A za*H<}y{d}4hcMG?5QPx24bI7cGgN&m8%8WHvwwQF8R%qhC8lwVf8hdas1j}xjJyzc zCS8-mYcsw2g*wfhcq|!tk13G=xtf~}r%E@U?-YL>GoII&RX~MuO2+F8w`T(n_8gK( zeHK$#bR7ouLiAK1&8wUdb@-JP(-%qTOw@)oDj+W|^J4FnQIJ7m*2PC~EvHgF5KhrG zWL*_yNvov|C51DhOz&j{-=~rEb1Y=(e_Wp}0x{nhnDz%|BXY?_(|V{c)KGe5m*?@M zEeD9t(0sC;oIL%>OtWYXH<4_P%tftDIu;_P8lrA*3)gpY9~N*rCr}cZ@|PgZ)GUf7 z1{?8X8K1>`;&PtWftk%o@kwHbrt8iAZ;# zSgIom9O4X%Y*Ekhppmc*Lt)06u#x*9f}GLBA>(KdUm)41JER(9G-d;#?9@_+?r9#{ z=)DjFn*$Jg(~Q(iw+=ItuvU`@lN7TIVMfhk_PuAS-;Aoqjm|c=3fQU0cU-rex=hDN zcL2AZHK`V_T=*XOZr#ccDB;@%bD9Jh#d{9vW+{;+(oB>>_vmv~4|fzcsNG9CI)lfN z+Zwd4Hym@C*N4zu@((m{QzUa%Pj@Iiat|~JQ>MXD)dlTpaCea=nSXc4ubjhG0SeY= zGHm89;H2f4IGuZf%FQf~WAtQIiQo(|X^a zX?G5chSZN@b}R2?M2WdbXLSZl^n|yegH}g}0$zXjYy~Db|Jd-bEA=vNTi9vr#|4kD zbY8&TfRAEeHYT>wC)(Q~9Ajt~*hn`y9!@ZK_c<%h&?(bQvy(P%2=IK{lMvxWwr_7! zpj&8pGnB$kH*yUjEE#3q)dQP3lAglAUG=U9Q(T^3+mlq;BVd=1P=l8=2j3kTA{W}Y=!Q7pb zx~^i&zO|2J6b`CyP7;(Qr;wP}PjgC}sQx%Qch^&L5qv z*JfU{RM5U^XiBC6mv=7u7f_Ia;p*#3kD<~@7gjfosU>BqxVhC<-O;>Ll3Q}6Xg znQPb>NNF}bLzYfX8Zf7kB)b+D^{`k8bTqE*7V$$n^1)ZB9Q0cRtC4KnsDw1ijJRYq zD1rUFQQ~-|kf78dSeeVN=E@d9OAo?Dp&a*{*-PBe!aN(QK7j}7`V%SG(W2Z+SNC5H z`%mlD_L9QBNSNj!J+UKeaehp8Ou3`kI!es8h75B5_T@n~Ndts4HWyx} zU+5UG32{f3t!r$^-V;Baw+u)_cciZvE{$VAE=hOiql{f_BnlV*atEEi7o)EhpTD1^ zh07LYQBNY`*iiylb3ceSdOpr(N*U4TaSsqPNpdCdW4{{(8lzA1#W1U}oG|^P%0{gl zmnBgxctO1PB2?6_rMksOzPTHFMJJmEX{f)@AT_u@B0F}>Tyw%wQqe?O{rT75yxbA8 zrBd@yL~sW~*JFCxp}!R@)4&%_^Tn-XgFAbS^+j(3r{*lpP%?0Dv~$seMf!%tjM19kSp0(gz_C7lm=FfD$)DwH)AXj; zshEFdwpl8gU7n6jV8iK(nN33VeACb_>K&R2xc*o5)I2eW_CPQQ^lUEl*|ATyD`r&blrmTvjIGKlV!F5L;qTf+1Tniuu;a04&qpXx6&Jp3D)4$b3psGgib z4&S-Im@guMwgQ6hryhYgg|_GqZDufYk80w_Dx}aJ2!gMYAI2r(PYsL6tKA*EEgqhg zY`WnZrRq|I43o%gP0*fwHoh}%?teM9|7O0T%x#V<&C_kuZqn&wVZ^eYFj;VAd1Ug7 zzEFa6o|f^;-d}=vp0x3kzDNXK`%S!70?}@X(_%bCoOnlHGrZVro8EAH)lNU7d+|<2 zM}j)}%>J#t7u?&^&+gT~A^ecGuh%^W1mPWz4Tm&)v*t0o+5f=K?zOzZ-~Ar^2;%Q8 z%mtV2uPhA$WWCqv{}3PkiPS`U;6m&B6ABMd;7X`XnQ<;mHgLu0ki(}ISdtq$7%>*g zc8d-V#oAom(#~Irc zY>jIA{6N?NqS+-%J-F#J5irqocfA>s6~FiRzP*4XlNL!$-la;j&1Fl4*j%DzhnYfX zz18#x5Wbr+JzaF%+(9+=(xY z{OoiHfrenZcy9@2iN&he{WhGSi_yyEo|ikJly+Q3L@4`DTApuqB0(pgt=Lz&A9)S? z2DQGYFD*a=qYqqs%RNFkEt2Ah_S9O=I#FQ?$#vP^V4M#!siIkA0QL!NMTWb$Bsl@3zA=)aS3S`DnbmECYxga6d2NBmnOL2;;_KTozi3M6-0x| z^qzAXk!#b`oA3v(F(n_#{W!#=&g^|Dq~;~@yVS**kxF>RY(N3AwQ|Pg!=6vF%J!^}*Q)vpf6yCX=+6OX7YQr~WXJ?f# zTO^Sd&~1VT9@skwysg~NR`0P#3?PgCuvFGdgzBGiRJG!}Q3q9?SRi|ngAJxDuv@wC z(FLADwuM?3>@{cuF9e-=np-sspXg7bJygcZ2TQ(u!jW!T{drQ6iio7wZdse;?q_%g zT9;fQceNPWFPc10o@5^nrI9i2-U2yl=+k--?%=oZDh#Gq)o;r!8COcmgC4fdZ?h(| zzjP(LB!w>MMle|EMSTm+^UalBC6Zh%a{8>_W$qrC=qrYU<-nAQ^MQ453WOdJw{0Do zfoHT53V!Fm72CAFWr}Fw%PdqqLB0wt?-^IjA6a{?fIvV6WKtlw8V0$3u)GRXxQ#5D zlbpR0*zSTV*Mn_p%c_8zMTDPc2AlE-T5$qWg9I=_%xVVq=5>NwuLj;y2YaR6*FYVj z=H@&#=@7=~PP7T;*6P!iZQU&gc|d+ZjEa-copqp%E zQMa`o&>Zj~98-Ltj~3whtEg15ko_{!OnRGxKC3&p+IeDQyouk3gvA-OyN;R6?~Q!* zyJG&xje={yXDS*wr)^l{M|mzYTjs5#qHLEX@`?dc_Vx>18JNeYdk*9Bu`hvFqypP< zmEnkq$SlAC2ae|VlD?cCRM=wRsFWOg>Q(+>+ltKdpc||hAq{A?$6}f{o#Jl*lNzQ{ zQMu;HHGlhO2}hS%?@?76E>twkd?j#dVHo(Ms8sO#H4?7KQ8=eu1oeBFqu4T;QcxL% ze7gC-1m=a6+i(1!mURA}P=m+#Q8mir*0#z`it|_$ZpO=2w+gNlYnfisktj)} zPI-hg_@*79>J3@OlV1vpg<-`bMQ4yVMJVQCWmo-O=|qrzWGMGkOUHApNoV&-X9dq- zaMF(vV~_CA$;kQ!2{P~1SvP4-sB=*d5G*wE{TTh;U2^xt6lD&$9CmNmnl_Bg>;R@b z!RqvW4bDjzCuq!bj0%Y+U}gPQY`>&8-7LYHkc6iqHE?My7^$*N%90S{VHS7@XkTR6 z!dum_wke)!eo6(58_iIOl5dt**gPBMj!LP07ssv z!FekoJQB!*dl+=QQhD$Q%RcmEH~fNk9Re6)=vK|}smgE!y`A5GHK&`C55)cbW^8t2 zXm*n*D;;=kwEVY|DB?&T`A2wp!c-bMJ#;XeZWJOTpZw0Ygy*p>5t*ZlNAm?EfA=hR z$SgE{E(UJ9T2PvnBR8jLBP^SZ%srLjFeNjmXect1_`2rPPWmm!N9Hl9gN1S*=r+dIYoQ?6(D(X#B&j0ni&D z(;^2VKHanmd=-f?W1H|cIE?}EVFY72#~VR^HNvdtVP9%Y8yfS`u_ z8qy{Xp8%b?t%_x6K98_x@n{4i%W^4Im^vvdssg;HIT)(xst%a=vPC}FR%yJG6#GPS z7DIlvEQT>j%JyTpa;z%XalF#FGRq4CWRDbzQA*iNS>0NhoFq{Nv_d1lj0l!=J%5T? z9PtB{1lWca&DBSAGweH$$4ozX3B>O_2+CAVoSNE@8I$6T3iOr?XwB^4o0i~&iK!cmNj?niAZxY+I)MpBIEWN@9lNz>}r+6;gYsBwfQ2Ba=?!2M(U}^ z>fujF6sgR^jNciB0pqE^7|cON2RC+eY(Ssg=p3KPW521pPkwo-kgS5~75YUR2YHJR zeEIp5>9v+)KZ!{N8t~0*x&0yl`dEu;+@)}Pu_!9GEK7J^FN$ii;zIEGjBlvV)C#e? zm>`1+9J91fa%DW&0&s8T-@ZgY_zd#NAh<@(RMZ|XC$OW2cPZTlE#1C8S^WK$9-v-j zhWYp?rgM*F|3v7CTPM#%6#>#sF(`xgrG;-JAC^qINxau2-i0$>C$6tK(FeXr z-r_YBUHn^+;&g?2K7)g_ESHJzm?Q4XU1Z*tZ2sHLL^3z^pPi6JJ0Pd73<*Ar$q$;R zDK*%6!7xQTGh%Pn!f&ajEl!pID>84-c%Q$;eAD6|ILnK6lmlqwmeEtF%;E!+V(|}= zkasVGlJrxO^k?_FmB@QJ8k2@k6|{s8T-@=8N68LDl*qr6aG2AICFimKR*atb=~9Az z98JnMGWlDQa>Epj1U?K!!Ms>goci)Kny0XfnfoP)h?$R@WjrSqe?%ttEtg~HP*f;% z`LGr(!m2{LYu%69O|>pvDM<2_SLEPS4G8%oq(ADO?qCsRCCd*uh?xZjA*+kIiA%h= zzQGdbOHS27R0&1|g{I6BX}Y<^@5 zuGg|mj8ru>U7rQT{b-eZYbD-i=6orJmLx(E@M2Qhw|_GT4cF8~w|eiQ9BUI;Mo0#H zrvmgU`N#VELz&|#t>l+PA8iD$QB+yNLOHW1x7FlXtR%DK8&dsi8Rgp#TUv{UBYp2I zBMcL=5)H?(>7)dym)~E9K#88({~m5QNz?e$>34}dG0+k2-&)C70l=So5X3| za4`|wRu$jyi`e~({jG0)xS9u6X=PFcYH|gZSkeUZ;*-Kkyu1u zNC>+AL#m)tzYCm-#Xbi05KuYAybuv~0)})=@NYwu!hM~>y5}0Ui(bz^sXiVp4{Ld$ zQ9LCP87?~X*5 zM9PHUbd3Mj9AcMJPiJ$RbJg`q;%S^$Z87#!v00q1cUglJiFHpaiShC4>S+MEmBNvU zmhmc7W9I9L_SE+J`+(Wg5P5(J$V9z6MNYO;Bwdofj)YOZG_O=0gV9{RSoK;4y;9jM zvYsd1*h3Rjuy)6^CCq$~h>IO`+)BnABA{!6I^0WRQCcQq8tp!sOE*vbH7!HlPIRbb z6gJ2o$&wn;+{l;}!9_7+zqtqdgmj>7p}e5ro$LOT$Bb3z0*%kR)|d;n-AkPo!N; zn#3Qep2ZVkMI3>394W3uO0;HNYk!jT67o~etH%DQk%p9~=*!D5axJcx*!N!=Er@11 z(m>>&nB$*Fq<`0F{YQ?M<-f@B{u7lZ@e|JU?=)|7^1mX}LUzc5i!J4U4|f9Skjbed z(UOIs3I&pf<@di#ox0>{j?=7ZV?3t5Fy2IBNPk%D*)sfbb%9h8v;Ne}m~@)Xxu4`T zok{<^J)dCxwL))N@H5bX(qe4SqO%(mLSTKgo9MF!Oa!?CbCTk$L7WC_G7eD%N@&!P z2ge#?uhH0CCnMvfg+$iyaLA#iq?~ts=rEBAAtr@u%W3R}wp0emzuU1=s%mIj0i0=$ zU`PTUq1K?uUnWE^Gi9Q6peLSfA19S$paS2VI2doBsE%-2sXCl>-E1!3HJRj4vRIN& z-YeJ)bHd>RZ&Ecjj)eUNUT?;_I}O;3njUwOcMu0DX5*h+=7P?rtsIAC;#dH)@$8A{ zlT66rnWJU!b@bLDqvTxNScPu1i(9if|K*=D2M_{vx831@zNqDOFow4fUAcEj;#jZ} z*=gzj&~;AX+d>e?S5ITpl#wXu3HQliZf`W~F1mN#nkv+@4@V{j8ouZ$C*sy3nJ;puN^J={18 zFZ68a?3wxF#8{-iCx^j!LT|?#4eCZlw06OSfnM z2%$#pc6ES%H9G>0%uK`TzkSkU$7T8TYJ-0xVF_}_tqIIQ?aWW^U0gk+D$V#RZ-bHr z29NtPn*njWg_l$_wInpSZ62m~ZiI<^+K(xND%0cqoMKC5K->C&k^uO@<{V(Y4@x;a zgHV}N$)t*6+TZSdfH(yDC7u^)C~9;us2_8>`did4$&uBUyZJ9d_XZm-Hu`7SkiZjX z)Qs82w9UdYioHi0Ivw9O9&5MQ_F>o>?#NQwn=Wlk{5pT_{wAwGVw1w1EEbC$1GybU zsX07bU}N(Z>FDgZf^NK*@ayHq`+@A@nCw!^yq_a;AJi~0TPD2T10u&0A_<{@?nN`@ z@{qfhUtXCHjx-~vees{k<-2saclCA-=I}J(0XT*xC{Z2oD7~Z>s+uqJeKr(fb*bEK zUAkmf`_umNoqxtS0edqNls{vf;Qz}G`X5Wg{|k1|e~nxO%uU5@oQzG49sd17W~-jM z{sfkNOQ*;rz|0dXr3B{5Nnu*$;n7s9Y0PINkTg>xpDE}hm@^u4D4LKI{|$NXc?XZx zeT1aR3lN>YJt3XBja9hLOeZl+o8|L(OL^bE{^?fR@gCdx{&?c_^YKC-{8Wn~2x|Z% z7Wq^_GR+scrAuj7i{u}Hz|G!|?#E1=pxRb)YaGwK?@~v!#}9F#x*Z!PW2U{Elcev8 zQhhmDy6Jsr7pi!@P)GxDOD58%*~_KNy^Rf90cw&la=1_5l=7hBCeEYm98yuYNLN2x ztZPV{qjHyL0eNXLEVbAmz)G4r{__%tlBGZKL7_;=01bjHT^|FnnsRe|o{kKMF(=vN z>Zmezpk>^Shsju#mrz7liJHza0Tn!>tv^aZS>iXiR?w5Bp;tnTX*pqG5so~Q(UC$y zABl`qoirb|SV%6a*r20^jJN*h5EaM>Q{CD1fPm5Tp|ODkFWyW@ei53TS%%P))ZZXu z|1KC=eF&3jM)??^D5_-aPuRGW;*pH46z3R}BFodVn3!;;!FmXWl=A^VKzI&&f$C%i zq7#5{N%YBjg_Rm3hd8iRMvGWKkfwd$&e2xI?62jnDC#nfd%BnebK-6RlNFM>8AYAOGw+NRC}GW_M>57xXYFM4Y*#XR(~(9Z+Pa7in_#{Ivh0un zr9*I(ZP8+69cnke-U9%}yk>0>V>k9q8=Ah)7hs6PhH2zYCVa z?!yXBQ%JWZVXb6NckK|0Mm#eMs;N!OMx*l zUXjx0$c1FF6kLd$-@fl}Y^gy&5(qd$IKMw#eFE9LM29vIw);B~wg=x4aQblIam8NX zaK%?6xe+?t8)I2V=&1C8Mu>~(DewdB!AawagKj6tz;O)~21v190gi;dD0Uei#K`PI z0AIBDD$p}eW#-6{+WQH5;Ozd&KmrU;x5&;Zrh7eJV2D(S7@Y{OF_FJ==XFmhu~%R= zjx>-i+_xtp4xW;Kd4R31SovFFPe(1`WPNp#``Pzq@Vh3Ksifi0oV2>sCJ>CiEJcjc?yd2DT^pxLVRcVym0^#}l+=IYp59iNI9UUD&B_H0}}uX$(b z0-tr_-7J>0q?(Ar=kdNN%z6R}*xsQ6)yz}*5j9gcfv$#svW#yBht8V%YKGwpTOlz^ zECmq$vjpk(cY9E= zlH_JNjr4|!?Ogq&VS(#V2)($+15`fXLmUn48SSUIBNBgIzuL})Zv(mIAkf9Xk}6<& z#V|P03<}6%J=x{H*xkCk_mSgef zHLCXhf$9ab_w}8_Ygv`Oo9ydP>!)1k%=;c`oa3$N<^;u-(7XAxJs|cYkCZ!G5rrsD z;unw8@_z1p^RD@x^Npg-?P=Fh(V??d`z9V~dMSjnN~IiW3BBOCjZ2H-&sv|EXPNd5 zc*A>~D;nHZuC%7lESEANXSugAHB4rYFtr<}Rw|_z?aXbq29HymNzB5rUICwQF5p~y zhaSkM9P5RH(GmX&|7+}d0~%1Y>0EoHg8Cv$2Tkyau@Qt!F>@?t;<0&AgRv0Jh~($Y z8fd^KkSI{-X=nS%t#;2I0v18m{t{Ikvp7`$sA}~MZh*yk!Os+v{e*`yLgP8>vBV=N zv(4X(WLEgAd7%xE^Mnl`&iW8iNyse@_>KOZBL>R){a-!yzZ_srmVQFho?-q^B=;Zx zI+*^eNY30w-{Jol*JrC}Dk6!Zad)GdsEgPm--1MljOxrP6Qu#s>g&^^(TKnaN3&54 zGPF(pz0f1#9j;J1BzM34Eghg@AU~F<{3y*&&gleX7A6(j{Th1VMf%mktAfik85aeoi_7{=6!}EX z^!jvD`jmRhE)BHf1~puE5-&v1)gh1tje5(W_OAJz4h=I6-02~;{~P}VODO7bsg&zv z8pZ98YFLp@Vn4)k?D;R<-js$hkC#w18XzD-@t^c`^2{7Rw7-&LO_AGGeL3>6SJ3E? z;~C+zvwW4LBIa{g>F_5>JQqB9G`TL%AvG(Zf|AVx5jIp)dmOxkAwr$(C-M!kjZLGF!o2zZxwr$(G{q1v4 zvd>BG$xiP4^=4+yR5oH=Chezu4X0I{~z-;y+I}9X!Ca%~06RIU4 zyT?3MB+)N~16s_C>?9q~NncP9st%JJ&A~k#u(6q&1M=la?h< zvvMLN?o4=ZPFPiLAq zStZLNX&o~sYX|$7#x!Iw3Iz+Y){IMf%^yqKI^SMbaN!?6Krl7go*|ol-)^HL=_l~O z`4p*=h~&Pm&<3h6F7xWLiMOz?s=7dw#x~HR!nu{Efjzk0o^1LiGd9wkS#fRReQ9|7 z+@EinRL4^XGxn7dyIt4LK3e_3`-K6%TZ4_U!7{?pcZ>_p0o#JRr^#m<_!3#7D^SSP zP4qxm1NcNZ(TISs_4jZT;j!3ezqBv0-B1_>vYw*nBW?qMR|&EH6a#TGZ81l_WX89* z*Xce3-8HTF!4^CyLzjq}qCfnO+@b}yz#Zu{L&DYH5-Og(=wzPPE{GRpW?Y*on(A1w zfkUEjEo(p#Utmr@NxG+Q+Uw9;}N4FC6xL*>;$;8TD{6` zX(ZQ=_0CrkPpPzk?$Jz5=ae`24kVn-UtUIXSM z81x;_`dU=eXU1A_9E4TM(~jcBGn_GNXgu%!qWs({ek+Ld16 z4eZ<8d=PTLbUX#58cpW-h%nu=^?UoLnS6=fq^-XM6EEfhmP>uR^3F(KBurvZ)wk8N zCsmxaEeF$7z5dWiEaxMlE#)(GIqfSJm3V?b2A{nV z4;{iS5!Ol2B(s)@K&#oY^q47e9O}iD!*z$%_WFn%1eL#WO8TFxLADNchB&LGgaUqd@|whq3~ciLZjQV;C1M+ zxynO|V5*|>&MeJktg77$>t#nxk4J(2CI^7OtF=eQIGj)Trs8)_&5g=#L)|s(ol`~l1;pf~e9*|t&2+^4soCq)m z+YlSD{|OBCWbg`Rp^QVn3b3M_an}u#Ra|x#GAkXD@0SSPkZJ((!Uc9S;b#%6w@(K#i!{pi zGY<9<*kPCiJSlKRTm4m?pR?tijWWp|;R^#FrGXxR9{*RV4_Dqt_y!?rLJWg=Txq&q zd5tDyKv5wRIjaQEmWZT`Lqdh) zF;_-$NK8>Pey-t)Lr&^Akc=V``cgD|O%-WRR5E=yW(}3OI^aZ3aXuaZ1e` z8vD>|QBB68B3)ThQt=|K-#CmyLVANMrT9V!0=FT{Vk0D?+0MRCJMY^Rm=nHpXtW>Q zJPruhT{0S;WD!35dWQRVMpMJPPqFJ&nx93Cv@&+lWFym2){;h(LJQ8 zRcd*WM?>>ogm#`&7c^lneTPv{o`q#WNKz2_7^BQcSQz-^8)tTX3~9heFxD4zu;dOs zge?|rOs7rg_0vr#u;m5s9~z{L_sO{g_}4G4pZWCvZ&s4+KSV+yTN@{RbDMu>K`K*T z)sWPXhpz+S5yiD<=GqoDtYPw4!Yxs1A&^0ou9yX}yiok;y)Hv+ zF?Tgzq7OXd=ZQ_lr{Xh-IOH7u91xC@#E%oJiTmKc#vPEw=ScVvye1t`j}DLb#2*z2=%AdgdYvwk4q$^};k2GB8byiymE^5$ z$K{w5kRow$DG%LJ<*Fx2+n5d80p(3mj)r0c%af-9N>EiM`sE=7iHixrgb5ZgYZ9Mx zM1)9ZN(do?atQr(H5pb?qv@Qtq_Ys|N0S5nSa(yTgK8KVn3ZQ?L-Pcnqw*uKdi$`_ zgQ;TVn9TxTVkIpU#x6ngw+r>~kAgz@aL`Eve|m&GeHMdguoWSTAiAyovVw%+A{w~T zAPCGD`qsye{7W}QNOjb}rY?XoFQOVLjZ`I#WaROE+RSuGGS914?2Y}9UO_%?i4>Qb zdYZ&SKvepyE5X`<>WTbVJ*@KWG19P}WbXPn(-zc_dRX*rXeNRTHhWi1&sqTidmGS^ zh$j64NaY{!dvKU1uQVO%s*e&BZ1ZqujkF!Rb0pXRLR8DXj$o4sowE-y5?A6UIvqNo zS3r%UMRU}!*iOKvDtKqBc=yWIij08`tMQ7&oRM7D%!AduX`Cd=thb_maME&M_X>qd z9U;f3pP17>V+B?Cfpa605}()Di(9O0f(*hzG^2-Jnj#^5wl-W3%e_aWrW5#YWWZ=& zo7kaT@|pv^$95e_b(rFTpZP&P)8qU@PjA~Aw*Hk$&|gLxVG@XOrjW8}jcZ^;1JR?# zj&Ph(xJH9oK@dpCwFgL&GRVO$Pm?9b8z&g4dB_#5eo6|sbW;-`39cpg=oE`q@09cD zvdlV9+0nerg)3$u6-6mjS~kk zhxYY(;gWipq-lsE$wG_%5x0n3FSou2(jT3~&c~ud$rCCZyL0}uOU5ej7?FByp zIKv5~AR9MUAnpoIAkPd|AUn4hBY#~Ev4BJD0sN?bJVJZ{aRD*6M7l8kD6l}_D87*Z zDF*^D%$-2$pH=(|e^c>%c25>CWH^|{A;e~EwB7|d^8l8$^boxt50s2%0Nkq^Uj`AZ zUyBjFx-qt_JM-{vH*mQOUSKVD>()0L10|ehVp$<-ek3bC6u^2IRs$ud1uRznlfT|J zQ41YvP_6^qSbWw&cLqOkn)aE%xN`d+nxLu|imO_$L`S3Kd>ciFu|heKx*PYR05&1A z-cZPbi+32+O+Q{Ruur0TQ7(# z^~PKJ#Rs%w7Lsoy5KpfUiNr1IE9~SZ3B;_fFC_Jb7|Ca*>ew0tTw_-(?M8s~BNoTY z834DYFNR@PNcu&;z2+}X4>uL}U?3dRE>UF7M04M8>J5?fivpOIeExjHz&E20@u_xv3_v14QI!?WT0L31M z0PPrr%rWVS*|%Ehua(yC!K>>t#jpb@PQ5`Q)#}N-8njG+)$Pjv1*dsSck)s*`!~>* z@z$wi5B7BS+QCgt?WnHo05O7Q$SwIdPS*tbG;^j=Bv=GHs8<=v7bcJo5q7`Bu~C@7 zR38>8hp}u6-{0vcNY5sQ^)JNrm{iLZg^jwO!P9D%DpaxxCckxZiAEx!mn zYxK2roqI~@cAt7oU2v?Ow`MzCa0Xq5mfkqL@^rgD{zU``hYb14$|nFe)(#B*_*O%{(;?rMW`ZB0-dK*41Lo zxy`zE3J{T-u4~JM+X|mvpqa6g$by{AANj!d`igZGLK9QmWXp2<_;s^e=BIKt^Zmje zK-0hIkp}lc2AK#pR~1a{e}%^t3d5TY$rIeK0O8fz37DFO=1uh?zt@k0Lwl_m2$9m) z8oJMnX`xFh<4xWoAdcS|FnPs1K(#1=np zd>x21O0DZ+)|H%)c)brUCWVZrkfE|5$g=?9V8B04axY8Fb4C-I7pG)O8jB@2BR#^fN+nuNY3;i*Z1QHoG3qn^*#R6x0B7qVQ)s5bO> zx*`KXUn)USnMyn^G4|F2yS=H$@5fL&FH3oOl5(WWnQ0~oBL`6>lf=ci_#Q+9zdkXSzE;VZ!iowmT&!FpL* zh*j5BAt^|h{u2~bC{dh`D#jwhav1{sWj0JaDj!*Xc`(ya_+)vO|2Jb_Ly`q!=}VeAM5!VrcX=94gCsvut%viDAgO#5Y&B{`Z=`|?qows& z8Yf3WcF4$TxUwQG(q!w2MlVJ@MS6VMskWu@Z<`=hydO=Yh<{04f=}(>6s1BJ{?)Bl zUyt1h&tSA{w5X#)k22i?+)bwE`~dY;P@PgilvPYyXH<52)V)4}3}xPpVCy!tAuTCV zz1<0`{hp*`hJxBio4q9Iv4gwxxB5|ewRfhtFt$4aLjx1>RV_bKbeJ0=1p?kqVJNexuu&|^ErA0dFXAo3@rQ6B z?ROb?*!I?FFIR0uj<;$_x-#CuBe$AT&oT7-bz>g}t7f!ngD|CL7)pO{W2h4i9Tq4_ z9aKX_c9TeL*2z!Cf~>J@)C0+IG3fm2mVNM(ho_E`u7#Ne{%Q{9sZ2ul^ZY!a4v5sF zxH42cZH%R>yQh2(f=uNaJ2{HXB(1r{=3_Eyn!SRWw0lv8O{vMd-=c$?GjvOPu=mCw z3zkmf{zcXJPdN3~9oLD-mY-_2UBlWK(^~p7yW>I{*I$l4sgNTRdL0;Mm$@r;uZN;- zh+5rVgInF5b^$KDC-sfUAy#5Dt6E$AZjy*XsOvcaHe&_;9pLdj-P*M~tYK~8 zzD2;cpKz12P+zEd3@Ohf2$t; z_Wzc$iu#7&3v2rElWSCju5vH~_&zogx{&#?Sbsuo5}xtE zTDK7h-660<2-j|>>!k~555E3GLQVV+8R35~68@($g0QW#ftB&U7mxFQ;g5=I3r(Q6-&r;s7K}1cl(fQc-`SN^2 z_Ct@aY*@M0^?`xFceVJ1*T&j~>^oXINL~46-JXC@ zQJ4-5#^l~fNHbDggg%~B*Fb(um)1s#Vk9+HrXesFsw{cR0w^2yH1UXNfBG z-XMZIHKL-n1KTYkx*QIDo(VI-VY(tiKszQ?r<~lFf8e&)&MeiY-^zO6n*P4%g=8M= zmiB_lR07f1({CdkmC)>uV`&)eAWBW{-q@GWo4uh0mq(~cVlGTmoM{Yc=q*b#*Oi!$ zc1>yMnigs3lsQ(1vN7La92?t!OO~h7`d5c2Jz}&G_9#)1j6$=Gp+(g|X4yPSLP%E; z3K_aOaE35!bGZ#mvE^)!A`h>Z;*_r`Q>{F?+_KoO&JQvyU#n`=cx*7cP%gpBMqyMl zfIADZP33OEn3HZn#RXYIf>lb^yq?kfMPKfmg{V5R!iAI-($cSA#43o?fT@Wdnp;cX z;e-{SEtHZrf}Y>AR+u|F-H+s}gK*D16TUW*06HTT{lAL@dZFruVqZe6 z`;}S`%$YEpW)(D+RjabLq$$rU25hy6(TV#YGX;}3J|&!F=4Pc6A!kYJ?!?8)$G}Be zTy5Fwt+b0gVbmVdy!(c0$U28<@RqlyZhh6ho7 zC74e+KjLGl*+fn>Ql)%Y7sS+I@sf zlONYQ9Q!8LlmfA9Y5kcGJF49jS=pW^zBr~FYEQ$D%=iJ&;xi|23)INbfLFW;en zr**RLk^7jmGZ1V;z+po;hc;kDP7gjM_)m!9Q=fWDT4b9v6RRvWdl0 zI1+1_`}Ecf~1A;4}Vzj*@rL~Osc14o_H-{rOhrcECeZ&3PG^FbsN-6+>;#bN3N z2QXE<7ojRso>&Avsf_TEF>_QwduH`OAY2x*Zzc1~k@8TKvZeLjr#bP_zoGH%P=L zy_BH;s)nm(!pbCA>I3R5A%(KhYZ0v@8Bwx=+PiKH&Da0Czm8h&8M^+w23aaRzog{d zYn$Wqk;8N+#@F`^gr5(0Xx85eT7N>)jYf9575%6dzTcf%^ouw{JRQ#WRzEG6J^981 z+ja+*t!v!W_O7vc&kgJO#VQT%nWPk&Wn9xjU&&BU!UJOtX0vq=UV_*&`Gmp5#Jqx` z2y1QPXeiu-rj!aq!(28Eqp_w?gVXmJl}J{n86#17XhU9AWqtNy|;RF#4%Vu+N>h0i;AD+Jy6@o;Y!|psBQ!Qn48+H3Tx- z1``jp1tQ}E?|wJaNJ4O)x*^D76AR~J)V{f?%J|aXD@2G^vw3TTVw(dKnN7P5nP9v8 zV_K2R%lH9|MRcYpnjgfUkO)vcJH~OKuSDf>mP^tslqMRMKOX8n(9xq3X(_fTlN4Za z2tN#Lxz@WvUK;dv;4pG7AFfu+W2FREHbg?g4w14eOL9T4#bxfy*Z>~nq?9K8?hr9i%ynH=91=SwMN~Ez zc9=GJIvdt{Xhg|V*JD?^28#Un>oaCv15@hxoFz_mivy^_Xhoxp7=sgWUre>)BDKiB zu)$us`N{2zgeuu6f9)(+w9fi8+GPfU1Q1mvqKYV8oYbAo0=`qMp;uwEcC#9xQnyr+ zm|F<16ZH*xuGbxO{%_JzVls2n{5nnGNeFL3XH1XB^mpit>jSDFSQLv9kkcF-IKkf= z;g< zyl>Dl2CDD3$FYREgosCxyNpA}W9VEwL%eTMgbTbA{ViU=?h|A&coIJM>~~axyDqn4 zsh&p~vaK;~xodPO3X5-KYT{C8zMK70*xy%R0=q+FJMnPcv>QzkRQ9_pfVjeB<1;M0 z9>3VUoJs?It}A|d)Dga^$8U*HWnYtv`QrR48S7EN`{33oJ$U>40dXghXNiB+T6)4`|rUHXkw*?0hb2n5#Ab&7PzCv!1pOb#{Ld8V*A($7asL7;c~N0$E;vCDD3p$7 zTobaij1sZ+VSeJNQMzo}RN`nM^1+ke8<5xDWRT@36y**`GOhO8fyNh-uRmP)`-C)E z{oHKv0fFfh@B91H`K7GR~xq4!y&DxJRBvT5H`NIa8bZRGO;#_@PXRxFw&^_yZyv zKO9h78CM9#UfRbNg+{Q%pS;T442{|*`hr!Yu}Fb<84xLzNQ%Lw*DbW6ERN2x8sDs? zRm6Z3PI}&PJ3s2`6#kOGiP&?PN~qqt!bP0=+B4F@(nsAd%HvB81rG-nh;c?93_3as z!srcjpq`){w(03SR^*H2q6)Yg8Bc)*YAl{=S%K0G=PC|b6)WMpqZkHhou=rBR{)0^ zD$P`FSu?TG#5}VKv zC&5L~dlgcm5G8?opH1t6#vs$a0M^_rHb*>jYrYPbxQV%Xp{fN%q4I`2>NlLHXVN=FHM>M=YAj3{HQplW<4z)8@4zVU&yO)>e?b;4lO!51 zZ#p?)#uKIv&2?%pL$eGQU~`lrO>DhQbC+>`bI(s5e0NzyaAzt}KJJi}gDnl_11z0F z))Z{C_&}5-sW7QnW7xdW=)LUJktH>xA~kZ#kIFN}i5j=pX5_392_!K@Kr>#+wZq1k zE+91st4rDEjmQ$biZ(h@@xs=_c_fJx*_!a}wW7#jEROxCZ@VB8!#91i%) z^iU~c^wS|#&NagPabaN!E!{5xg-Rfr9~`aCi%Xb)-2?8wGBN!

    pk+zS>ah!}bwv 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

    mxO~OD?YJmY~A#(B;f3eW5 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

    1y>;@vvRD^p^_Dl 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%0AGqmKG!5g1hGNPs;}FnyK4T1pNJ=*Fjg=y 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�GwIwW|U_$uyOlR^$VTBqw6SrDeG7aSHwz8mN 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

    My first email through SendGrid"); -``` - -### Attachments - -#### addAttachment - -```java -email.addAttachment("text.txt", "contents"); -// or -email.addAttachment("image.png", new File("./image.png")); -// or -email.addAttachment("text.txt", new InputStream(new File("./file.txt"))); -``` - -### Content IDs - -#### addContentId - -```java -// First, add an attachment -email.addAttachment("image.png", new File("./image.png")); -// Map the name of the attachment to an ID -email.addContentId("image.png", "ID_IN_HTML") -// Map the ID in the HTML -email.setHtml("TEXT BEFORE IMAGEAFTER IMAGE") -``` - -### Proxy Server Setup - -```java -SendGrid sendgrid = new SendGrid('YOUR_SENDGRID_API_KEY'); -HttpHost proxy = new HttpHost("server", 3128); -CloseableHttpClient http = HttpClientBuilder.create().setProxy(proxy).setUserAgent("sendgrid/" + sendgrid.getVersion() + ";java").build(); -sendgrid.setClient(http); -``` +## Environment Variables -## [X-SMTPAPI](http://sendgrid.com/docs/API_Reference/SMTP_API/index.html) +First, get your free SendGrid account [here](https://sendgrid.com/free?source=sendgrid-java). -The mail object extends the SMTPAPI object which is found in [SMTPAPI-Java](https://github.com/sendgrid/smtpapi-java). - -```java -email.getSMTPAPI(); -``` - -### Recipients - -#### addSmtpApiTo - -```java -email.addSmtpApiTo("foo@example.com"); -// or -email.addSmtpApiTo(new String[]{"foo@other.com", "bar@other.com"}); -``` - -### [Substitutions](http://sendgrid.com/docs/API_Reference/SMTP_API/substitution_tags.html) - -#### addSubstitution - -```java -email.addSubstitution("key", "value"); - -JSONObject subs = header.getSubstitutions(); -``` - -#### setSubstitutions - -```java -email.setSubstitutions("key", new String[]{"value1", "value2"}); - -JSONObject subs = header.getSubstitutions(); -``` +Next, update your environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys). -### [Unique Arguments](http://sendgrid.com/docs/API_Reference/SMTP_API/unique_arguments.html) - -#### addUniqueAarg - -```java -email.addUniqueAarg("key", "value"); -// or -Map map = new HashMap(); -map.put("unique", "value"); -email.setUniqueArgs(map); -// or -JSONObject map = new JSONObject(); -map.put("unique", "value"); -email.setUniqueArgs(map); -// or -email.setUniqueArgs(map); - -JSONObject args = email.getUniqueArgs(); -``` - -### [Categories](http://sendgrid.com/docs/API_Reference/SMTP_API/categories.html) - -#### addCategory - -```java -email.addCategory("category"); - -String[] cats = email.getCategories(); -``` - -### [Sections](http://sendgrid.com/docs/API_Reference/SMTP_API/section_tags.html) - -#### addSection - -```java -email.addSection("key", "section"); - -JSONObject sections = email.getSections(); +```bash +echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env +echo "sendgrid.env" >> .gitignore +source ./sendgrid.env ``` -### [Filters / Apps](http://sendgrid.com/docs/API_Reference/SMTP_API/apps.html) - -You can enable and configure Apps. - -#### addFilter - -```java -email.addFilter("filter", "setting", "value"); -email.addFilter("filter", "setting", 1); - -JSONObject filters = email.getFilters(); -``` +# Quick Start -Example enabling bcc app: +## v3 Web API endpoints ```java -SendGrid sendgrid = new SendGrid('YOUR_SENDGRID_API_KEY'); -sendgrid.addTo("example@example.com"); -... -sendgrid.addFilter("bcc", "enabled", 1); -sendgrid.addFilter("bcc", "email", "example@example.com"); +import com.sendgrid.*; +import java.io.IOException; + +Request request = new Request(); +try { + Request request = new Request; + request.method = Method.GET; + request.endpoint = "api_keys"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); +} catch (IOException ex) { + throw ex; +} ``` -### [ASM - Advanced Supression Manager](https://sendgrid.com/docs/User_Guide/advanced_suppression_manager.html) +# Announcements -#### setASMGroupId +**BREAKING CHANGE as of XXXX.XX.XX** -```java -email.setASMGroupId(1); -``` +Version `3.0.0` is a breaking change for the entire library. -### [Schedule Sending](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) +Version 3.0.0 brings you full support for all Web API v3 endpoints. We +have the following resources to get you started quickly: -#### setSendAt +- [SendGrid + Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) +- [Usage + Documentation](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md) +- [Example + Code](https://github.com/sendgrid/sendgrid-java/blob/master/examples) -```java -email.setSendAt(1409348513); -``` +Thank you for your continued support! -### [Templates](https://sendgrid.com/docs/API_Reference/Web_API_v3/Template_Engine/index.html) +## Roadmap -#### setTemplateId +[Milestones](https://github.com/sendgrid/sendgrid-java/milestones) -```java -email.setTemplateId("abc123-def456"); -``` - -## Contributing +## How to Contribute -1. Fork it -2. Create your feature branch (`git checkout -b my-new-feature`) -3. Commit your changes (`git commit -am 'Added some feature'`) -4. Push to the branch (`git push origin my-new-feature`) -5. Create new Pull Request +We encourage contribution to our libraries, please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) guide for details. -## Running Tests +* [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature_request) +* [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit_a_bug_report) +* [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements_to_the_codebase) -The existing tests in the `src/test` directory can be run using gradle with the following command: - -```bash -$ ./gradlew test -i -``` +## Usage -## Generating the jar +- [SendGrid Docs](https://sendgrid.com/docs/API_Reference/index.html) +- [v3 Web API](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md) +- [Example Code](https://github.com/sendgrid/sendgrid-java/blob/master/examples) +- [v3 Web API Mail Send Helper]() -```bash -$ ./gradlew build -``` +## Unsupported Libraries -## Example App +- [Official and Unsupported SendGrid Libraries](https://sendgrid.com/docs/Integrate/libraries.html) -We have an example app using this library. This can be helpful to get a grasp on implementing it in your own app. +# About -[github.com/scottmotte/sendgrid-java-example](http://github.com/scottmotte/sendgrid-java-example) +![SendGrid Logo] +(https://assets3.sendgrid.com/mkt/assets/logos_brands/small/sglogo_2015_blue-9c87423c2ff2ff393ebce1ab3bd018a4.png) -## License +sendgrid-java is guided and supported by the SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). -Licensed under the MIT License. +sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. diff --git a/USAGE.md b/USAGE.md new file mode 100644 index 00000000..5922b054 --- /dev/null +++ b/USAGE.md @@ -0,0 +1,30 @@ +```java +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + +Request request = new Request(); +try { + Request request = new Request; + // Populate the request object, see [Example.java]() for an example. + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); +} catch (IOException ex) { + throw ex; +} finally { + request.queryParams = null; +} +``` \ No newline at end of file diff --git a/build.gradle b/build.gradle index 202fe50d..e64739f0 100644 --- a/build.gradle +++ b/build.gradle @@ -46,10 +46,6 @@ buildscript { dependencies { compile 'com.sendgrid:java-http-client:1.0.0' - compile 'com.sendgrid:smtpapi-java:1.2.0' - compile 'org.apache.httpcomponents:httpcore:4.3.2' - compile 'org.apache.httpcomponents:httpclient:4.3.4' - compile 'org.apache.httpcomponents:httpmime:4.3.4' compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' @@ -142,6 +138,10 @@ uploadArchives { } developers { + developer { + id 'thinkingserious' + name 'Elmer Thomas' + } developer { id 'scottmotte' name 'Scott Motte' diff --git a/examples/Example.java b/examples/Example.java index 360ba4e5..495b4da1 100644 --- a/examples/Example.java +++ b/examples/Example.java @@ -1,64 +1,70 @@ -// SendGridExample.java import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.*; -import java.io.*; -import java.util.*; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; public class Example { public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); - sg.addHeader("X-Test", "test"); + sg.addRequestHeader("X-Test", "test"); // GET Request request = new Request(); - try{ - request.method = Method.GET; - request.endpoint = "api_keys"; - Map queryParams = new HashMap(); - queryParams.put("limit", "100"); - queryParams.put("offset", "0"); - request.queryParams = queryParams; - - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + try { + request.method = Method.GET; + request.endpoint = "api_keys"; + Map queryParams = new HashMap(); + queryParams.put("limit", "100"); + queryParams.put("offset", "0"); + request.queryParams = queryParams; + + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); } catch (IOException ex) { - throw ex; + throw ex; } finally { - request.queryParams = null; + request.queryParams = null; } // POST String apiKeyId = ""; - try{ - request.method = Method.POST; - request.endpoint = "api_keys"; - request.requestBody = "{\"name\": \"My api Key\",\"scopes\": [\"mail.send\",\"alerts.create\",\"alerts.read\"]}"; - - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); - try { - ObjectMapper mapper = new ObjectMapper(); - JsonNode json = mapper.readTree(response.responseBody); - apiKeyId = json.path("api_key_id").asText(); - } catch (IOException ex) { - throw ex; - } - } catch (IOException ex) { + try { + request.method = Method.POST; + request.endpoint = "api_keys"; + request.requestBody = "{\"name\": \"My api Key\",\"scopes\": [\"mail.send\",\"alerts.create\",\"alerts.read\"]}"; + + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + try { + ObjectMapper mapper = new ObjectMapper(); + JsonNode json = mapper.readTree(response.responseBody); + apiKeyId = json.path("api_key_id").asText(); + } catch (IOException ex) { throw ex; + } + } catch (IOException ex) { + throw ex; } finally { - request.requestBody = ""; + request.requestBody = ""; } // GET Single request.method = Method.GET; request.endpoint = "api_keys/" + apiKeyId; + try { Response response = sg.api(request); System.out.println(response.statusCode); @@ -71,6 +77,7 @@ public static void main(String[] args) throws IOException { // PATCH request.method = Method.PATCH; request.requestBody = "{\"name\": \"A New Hope\"}"; + try { Response response = sg.api(request); System.out.println(response.statusCode); @@ -86,6 +93,7 @@ public static void main(String[] args) throws IOException { request.method = Method.PUT; request.requestBody = "{\"name\": \"A New Hope\",\"scopes\": [\"user.profile.read\",\"user.profile.update\"]}"; + try { Response response = sg.api(request); System.out.println(response.statusCode); @@ -99,6 +107,7 @@ public static void main(String[] args) throws IOException { // DELETE request.method = Method.DELETE; + try { Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/Mail/Example.java b/examples/Mail/Example.java index 51a4c5a3..d85df60b 100644 --- a/examples/Mail/Example.java +++ b/examples/Mail/Example.java @@ -1,14 +1,33 @@ -import com.sendgrid.*; +import com.sendgrid.ASM; +import com.sendgrid.Attachments; +import com.sendgrid.BccSettings; +import com.sendgrid.ClickTrackingSetting; +import com.sendgrid.Client; +import com.sendgrid.Content; +import com.sendgrid.Email; +import com.sendgrid.FooterSetting; +import com.sendgrid.GoogleAnalyticsSetting; +import com.sendgrid.Mail; +import com.sendgrid.MailSettings; +import com.sendgrid.Method; +import com.sendgrid.OpenTrackingSetting; +import com.sendgrid.Personalization; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; +import com.sendgrid.Setting; +import com.sendgrid.SpamCheckSetting; +import com.sendgrid.SubscriptionTrackingSetting; +import com.sendgrid.TrackingSettings; -import java.io.*; -import java.util.*; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; public class Example { - public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); - sg.addHeader("X-Test", "test"); - + + // Fully populated Mail object + public static Mail buildKitchenSink() throws IOException { Mail mail = new Mail(); Email fromEmail = new Email(); @@ -47,9 +66,6 @@ public static void main(String[] args) throws IOException { personalization.addSubstitution("%city%", "Riverside"); personalization.addCustomArg("user_id", "343"); personalization.addCustomArg("type", "marketing"); - personalization.addCategory("marketing"); - personalization.addCategory("business"); - personalization.addCategory("california"); personalization.setSendAt(1443636843); mail.addPersonalization(personalization); @@ -82,9 +98,6 @@ public static void main(String[] args) throws IOException { personalization2.addSubstitution("%city%", "Riverside"); personalization2.addCustomArg("user_id", "343"); personalization2.addCustomArg("type", "marketing"); - personalization2.addCategory("marketing"); - personalization2.addCategory("business"); - personalization2.addCategory("california"); personalization2.setSendAt(1443636843); mail.addPersonalization(personalization2); @@ -97,7 +110,7 @@ public static void main(String[] args) throws IOException { mail.addContent(content); Attachments attachments = new Attachments(); - attachments.setContent("ZZZZZxxxxyyyzz"); + attachments.setContent("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12"); attachments.setType("application/pdf"); attachments.setFilename("balance_001.pdf"); attachments.setDisposition("attachment"); @@ -105,7 +118,7 @@ public static void main(String[] args) throws IOException { mail.addAttachments(attachments); Attachments attachments2 = new Attachments(); - attachments2.setContent("ZZZZZxxxxyyyzz2"); + attachments2.setContent("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"); attachments2.setType("image/png"); attachments2.setFilename("banner.png"); attachments2.setDisposition("inline"); @@ -129,13 +142,13 @@ public static void main(String[] args) throws IOException { mail.setSendAt(1443636842); ASM asm = new ASM(); - asm.setGroupID(99); + asm.setGroupId(99); asm.setGroupsToDisplay(new int[] {4,5,6,7,8}); mail.setASM(asm); mail.setBatchId("sendgrid_batch_id"); - mail.setIpPoolId(23); + mail.setIpPoolId("23"); MailSettings mailSettings = new MailSettings(); BccSettings bccSettings = new BccSettings(); @@ -193,6 +206,81 @@ public static void main(String[] args) throws IOException { replyTo.setEmail("dx+reply@sendgrid.com"); mail.setReplyTo(replyTo); - System.out.println(mail.build()); + return mail; + } + + // Minimum required to send an email + public static Mail buildHelloEmail() throws IOException { + Mail mail = new Mail(); + + Email fromEmail = new Email(); + fromEmail.setEmail("dx@sendgrid.com"); + mail.setFrom(fromEmail); + + Personalization personalization = new Personalization(); + Email to = new Email(); + to.setEmail("elmer.thomas@sendgrid.com"); + personalization.addTo(to); + + mail.addPersonalization(personalization); + + mail.setSubject("Hello World from the SendGrid Java Library"); + + Content content = new Content(); + content.setType("text/plain"); + content.setValue("some text here"); + mail.addContent(content); + content.setType("text/html"); + content.setValue("some text here"); + mail.addContent(content); + + return mail; + } + + public static void baselineExample() throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + sg.setHost("3wyb2hp7emnqja6ys.stoplight-proxy.io/"); + sg.addRequestHeader("X-Mock", "true"); + + Request request = new Request(); + Mail helloWorld = buildHelloEmail(); + try { + request.method = Method.POST; + request.endpoint = "mail/send"; + request.requestBody = helloWorld.build(); + + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } + + public static void kitchenSinkExample() throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + sg.setHost("3wyb2hp7emnqja6ys.stoplight-proxy.io/"); + sg.addRequestHeader("X-Mock", "true"); + + Request request = new Request(); + Mail kitchenSink = buildKitchenSink(); + try { + request.method = Method.POST; + request.endpoint = "mail/send"; + request.requestBody = kitchenSink.build(); + + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + baselineExample(); + kitchenSinkExample(); } } \ No newline at end of file diff --git a/maven-help.png b/maven-help.png deleted file mode 100644 index fe475a0490da5b7043a3a56be4d54bffd67cb537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27711 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 wMJ{OKp8?=NF!PotR9hRKFY>SdXcom.sendgrid sendgrid-java SendGrid Java helper library - 2.1.1 + 3.0.0 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java - Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0.html - repo + The MIT License (MIT) + https://github.com/sendgrid/java-http-client/blob/master/LICENSE + repo @@ -32,8 +32,8 @@ maven-compiler-plugin 3.1 - 1.5 - 1.5 + 1.8 + 1.8 @@ -78,11 +78,10 @@ - johnclaus - John Claus - johnclaus@fastmail.fm - http://johnclaus.com - -7 + thinkingserious + Elmer Thomas + dx@sendgrid.com + https://sendgrid.com jar @@ -92,26 +91,6 @@ java-http-client 1.0.0 - - com.sendgrid - smtpapi-java - 1.1.1 - - - org.apache.httpcomponents - httpcore - 4.3.2 - - - org.apache.httpcomponents - httpclient - 4.3.4 - - - org.apache.httpcomponents - httpmime - 4.3.4 - com.fasterxml.jackson.core jackson-core diff --git a/publishing.md b/publishing.md deleted file mode 100644 index 04f66283..00000000 --- a/publishing.md +++ /dev/null @@ -1,52 +0,0 @@ -## Publishing to Maven - -This only works if you have the correct permissions - for admins only basically. - -Let's begin with the permissions. - -``` -cp gradle.properties.example ~/.gradle/gradle.properties -``` - -Edit that file and set your `sonatypeUsername` and sonatypePassword`. You also need to set the values for your keys. Here's how to list/create them. [1](http://central.sonatype.org/pages/working-with-pgp-signatures.html). - -``` -gpg --list-keys -gpg --gen-key -``` - -Set the signing.KeyId, signing.password, and the signing.secretKeyRingFile. - -The signing.KeyId is the 'pub' one. It's the part of your list of keys that looks something like this: `2048R/5D64A177`. So in this scenario it would be `5D64A177`. [1](http://www.gradle.org/docs/current/userguide/signing_plugin.html) [2](http://yennicktrevels.com/blog/2013/10/11/automated-gradle-project-deployment-to-sonatype-oss-repository/) - -The signing.password is the password you used when generating this key. It could be blank if you didn't use a password. - -The signing.secretKeyRingFile is the path to the secring.gpg. - -Now, upload that key to the keyserver. - -``` -gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 5D64A177 -``` - -Now, you can finally upload! Ah, Java! - -``` -./gradlew uploadArchives -``` - -Login to [Sonatype](https://oss.sonatype.org/index.html#stagingRepositories). - -Go to [staging repositories page](https://oss.sonatype.org/index.html#stagingRepositories). - -Click 'Close' with the archive selected. - -![](https://raw.githubusercontent.com/sendgrid/sendgrid-java/master/maven-help.png) - -Wait a few minutes, and refresh the staging repositories page. - -Check the box for the SendGrid repo again and this time click 'Release'. - -You're all done. - -[Further help](https://github.com/sendgrid/sendgrid-java/pull/15). diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 24660543..8ca199bc 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -5,67 +5,96 @@ import com.sendgrid.Request; import com.sendgrid.Response; -import java.io.*; -import java.util.*; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +/** + * Class SendGrid allows for quick and easy access to the SendGrid API. + */ public class SendGrid { - private static final String VERSION = "3.0.0"; - private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; - - private String apiKey; - private String host; - private String version; - private Client client; - private Map requestHeaders; + private static final String VERSION = "3.0.0"; + private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; + + private String apiKey; + private String host; + private String version; + private Client client; + private Map requestHeaders; - public SendGrid(String apiKey) { - this.apiKey = apiKey; - this.host = "api.sendgrid.com"; - this.version = "v3"; - this.client = new Client(); - this.requestHeaders = new HashMap(); - this.requestHeaders.put("Authorization", "Bearer " + apiKey); - this.requestHeaders.put("Content-Type", "application/json"); - this.requestHeaders.put("User-agent", USER_AGENT); - } + /** + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + */ + public SendGrid(String apiKey) { + this.apiKey = apiKey; + this.host = "api.sendgrid.com"; + this.version = "v3"; + this.client = new Client(); + this.requestHeaders = new HashMap(); + this.requestHeaders.put("Authorization", "Bearer " + apiKey); + this.requestHeaders.put("Content-Type", "application/json"); + this.requestHeaders.put("User-agent", USER_AGENT); + } - public String getVersion() { - return this.VERSION; - } - - public Map addHeader(String key, String value){ - this.requestHeaders.put(key, value); - return this.requestHeaders; - } - - public Map removeHeader(String key){ - this.requestHeaders.remove(key); - return this.requestHeaders; - } - - public void setHost(String host){ - this.host = host; - } - - public void setVersion(String version){ - this.version = version; + public String getLibraryVersion() { + return this.VERSION; + } + + public String getVersion() { + return this.version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Map getRequestHeaders() { + return this.requestHeaders; + } + + public Map addRequestHeader(String key, String value) { + this.requestHeaders.put(key, value); + return getRequestHeaders(); + } + + public Map removeRequestHeader(String key) { + this.requestHeaders.remove(key); + return getRequestHeaders(); + } + + public String getHost() { + return this.host; + } + + public void setHost(String host) { + this.host = host; + } + + /** + * Class makeCall makes the call to the SendGrid API, override this method for testing. + */ + public Response makeCall(Request request) throws IOException { + Response response = new Response(); + try { + response = client.api(request); + } catch (IOException ex) { + throw ex; } + return response; + } + + /** + * Class api sets up the request to the SendGrid API, this is main interface. + */ + public Response api(Request request) throws IOException { + Request req = new Request(); + req.method = request.method; + req.baseUri = this.host; + req.endpoint = "/" + version + "/" + request.endpoint; + req.requestBody = request.requestBody; + req.requestHeaders = this.requestHeaders; + req.queryParams = request.queryParams; - public Response api(Request request) throws IOException { - Request req = new Request(); - req.method = request.method; - req.baseUri = this.host; - req.endpoint = "/" + version + "/" + request.endpoint; - req.requestBody = request.requestBody; - req.requestHeaders = this.requestHeaders; - req.queryParams = request.queryParams; - - Response response = new Response(); - try { - response = client.api(req); - } catch (IOException ex) { - throw ex; - } - return response; - } + return makeCall(req); + } } diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index e69de29b..b82e17cd 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -0,0 +1,24 @@ +**This helper allows you to quickly and easily build a Mail object for sending email through SendGrid.** + +## Dependencies + +- [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) +- [Jackson](https://github.com/FasterXML/jackson) + +# Quick Start + +Run the example (make sure you have set your environment variable to include your SENDGRID_API_KEY). + +```bash +cd examples/mailto +javac -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-databind-2.7.3.jar:../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-databind-2.7.3.jar:../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.0.0-jar.jar:. Example +``` + +## Usage + +- See the example for a complete working example. +- [Documentation]() + +## Unsupported Libraries + +- [Official and Unsupported SendGrid Libraries](https://sendgrid.com/docs/Integrate/libraries.html) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index d6c13868..4f94d1f1 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -1,240 +1,264 @@ package com.sendgrid; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; -import java.io.*; -import java.util.*; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Class Mail builds an object that sends an email through SendGrid. + */ @JsonInclude(Include.NON_DEFAULT) public class Mail { - @JsonProperty("from") private Email from; - @JsonProperty("subject") private String subject; - @JsonProperty("personalization") private List personalization; - @JsonProperty("content") private List content; - @JsonProperty("attachments") private List attachments; - @JsonProperty("template_id") private String templateId; - @JsonProperty("sections") private Map sections; - @JsonProperty("headers") private Map headers; - @JsonProperty("categories") private List categories; - @JsonProperty("custom_args") private Map customArgs; - @JsonProperty("send_at") private long sendAt; - @JsonProperty("batch_id") private String batchId; - @JsonProperty("asm") private ASM asm; - @JsonProperty("ip_pool_id") private int ipPoolId; - @JsonProperty("mail_settings") private MailSettings mailSettings; - @JsonProperty("tracking_settings") private TrackingSettings trackingSettings; - @JsonProperty("reply_to") private Email replyTo; - - public void setFrom(Email from) { - this.from = from; - } - - @JsonProperty("from") - public Email getFrom(Email from) { - return from; - } - - public void setSubject(String subject) { - this.subject = subject; - } - - @JsonProperty("subject") - public String getSubject() { - return subject; - } + @JsonProperty("from") private Email from; + @JsonProperty("subject") private String subject; + @JsonProperty("personalization") private List personalization; + @JsonProperty("content") private List content; + @JsonProperty("attachments") private List attachments; + @JsonProperty("template_id") private String templateId; + @JsonProperty("sections") private Map sections; + @JsonProperty("headers") private Map headers; + @JsonProperty("categories") private List categories; + @JsonProperty("custom_args") private Map customArgs; + @JsonProperty("send_at") private long sendAt; + @JsonProperty("batch_id") private String batchId; + @JsonProperty("asm") private ASM asm; + @JsonProperty("ip_pool_name") private String ipPoolId; + @JsonProperty("mail_settings") private MailSettings mailSettings; + @JsonProperty("tracking_settings") private TrackingSettings trackingSettings; + @JsonProperty("reply_to") private Email replyTo; - public void setASM(ASM asm){ - this.asm = asm; - } - - @JsonProperty("asm") - public ASM getASM() { - return asm; - } - - @JsonProperty("personalization") - public List getPersonalization(){ - return personalization; - } - - public void addPersonalization(Personalization personalization){ - if(this.personalization == null){ - this.personalization = new ArrayList(); - this.personalization.add(personalization); - } else { - this.personalization.add(personalization); - } - } + @JsonProperty("from") + public Email getFrom(Email from) { + return from; + } + + public void setFrom(Email from) { + this.from = from; + } + + @JsonProperty("subject") + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + @JsonProperty("asm") + public ASM getASM() { + return asm; + } - @JsonProperty("content") - public List getContent(){ - return content; - } - - public void addContent(Content content){ - Content c = new Content(); - c.setType(content.getType()); - c.setValue(content.getValue()); - if(this.content == null){ - this.content = new ArrayList(); - this.content.add(c); - } else { - this.content.add(c); - } - } + public void setASM(ASM asm) { + this.asm = asm; + } + + @JsonProperty("personalization") + public List getPersonalization() { + return personalization; + } + + public void addPersonalization(Personalization personalization) { + if (this.personalization == null) { + this.personalization = new ArrayList(); + this.personalization.add(personalization); + } else { + this.personalization.add(personalization); + } + } - @JsonProperty("attachments") - public List getAttachments(){ - return attachments; - } - - public void addAttachments(Attachments attachments){ - Attachments a = new Attachments(); - a.setContent(attachments.getContent()); - a.setType(attachments.getType()); - a.setFilename(attachments.getFilename()); - a.setDisposition(attachments.getDisposition()); - a.setContentId(attachments.getContentId()); - if(this.attachments == null){ - this.attachments = new ArrayList(); - this.attachments.add(a); - } else { - this.attachments.add(a); - } - } - - public void setTemplateId(String templateId) { - this.templateId = templateId; - } - - @JsonProperty("template_id") - public String getTemplateId() { - return this.templateId; - } - - public void addSection(String key, String value) { - if(sections == null){ - sections = new HashMap(); - sections.put(key, value); - } else { - sections.put(key, value); - } - } - - @JsonProperty("sections") - public Map getSections() { - return sections; - } - - public void addHeader(String key, String value) { - if(headers == null){ - headers = new HashMap(); - headers.put(key, value); - } else { - headers.put(key, value); - } - } - - @JsonProperty("headers") - public Map getHeaders() { - return headers; - } - - public void addCategory(String category) { - if(categories == null){ - categories = new ArrayList(); - categories.add(category); - } else { - categories.add(category); - } - } - - @JsonProperty("categories") - public List getCategories() { - return categories; - } - - public void addCustomArg(String key, String value) { - if(customArgs == null){ - customArgs = new HashMap(); - customArgs.put(key, value); - } else { - customArgs.put(key, value); - } - } - - @JsonProperty("custom_args") - public Map getCustomArgs() { - return customArgs; - } - - public void setSendAt(long sendAt) { - this.sendAt = sendAt; - } - - @JsonProperty("send_at") - public long sendAt() { - return sendAt; - } - - public void setBatchId(String batchId) { - this.batchId = batchId; - } - - @JsonProperty("batch_id") - public String getBatchId() { - return batchId; - } - - public void setIpPoolId(int ipPoolId) { - this.ipPoolId = ipPoolId; - } - - @JsonProperty("ip_pool_id") - public int getIpPoolId() { - return ipPoolId; - } - - public void setMailSettings(MailSettings mailSettings) { - this.mailSettings = mailSettings; - } - - @JsonProperty("mail_settings") - public MailSettings getMailSettings() { - return mailSettings; - } + @JsonProperty("content") + public List getContent() { + return content; + } + + public void addContent(Content content) { + Content newContent = new Content(); + newContent.setType(content.getType()); + newContent.setValue(content.getValue()); + if (this.content == null) { + this.content = new ArrayList(); + this.content.add(newContent); + } else { + this.content.add(newContent); + } + } - public void setTrackingSettings(TrackingSettings trackingSettings) { - this.trackingSettings = trackingSettings; - } - - @JsonProperty("tracking_settings") - public TrackingSettings getTrackingSettings() { - return trackingSettings; - } - - public void setReplyTo(Email replyTo) { - this.replyTo = replyTo; - } - - @JsonProperty("reply_to") - public Email getReplyto() { - return replyTo; - } - - public String build() throws IOException { - try { - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(this); - } catch (IOException ex) { - throw ex; - } - } + @JsonProperty("attachments") + public List getAttachments() { + return attachments; + } + + public void addAttachments(Attachments attachments) { + Attachments newAttachment = new Attachments(); + newAttachment.setContent(attachments.getContent()); + newAttachment.setType(attachments.getType()); + newAttachment.setFilename(attachments.getFilename()); + newAttachment.setDisposition(attachments.getDisposition()); + newAttachment.setContentId(attachments.getContentId()); + if (this.attachments == null) { + this.attachments = new ArrayList(); + this.attachments.add(newAttachment); + } else { + this.attachments.add(newAttachment); + } + } + + @JsonProperty("template_id") + public String getTemplateId() { + return this.templateId; + } + + public void setTemplateId(String templateId) { + this.templateId = templateId; + } + + @JsonProperty("sections") + public Map getSections() { + return sections; + } + + public void addSection(String key, String value) { + if (sections == null) { + sections = new HashMap(); + sections.put(key, value); + } else { + sections.put(key, value); + } + } + + @JsonProperty("headers") + public Map getHeaders() { + return headers; + } + + + public void addHeader(String key, String value) { + if (headers == null) { + headers = new HashMap(); + headers.put(key, value); + } else { + headers.put(key, value); + } + } + + @JsonProperty("categories") + public List getCategories() { + return categories; + } + + public void addCategory(String category) { + if (categories == null) { + categories = new ArrayList(); + categories.add(category); + } else { + categories.add(category); + } + } + + @JsonProperty("custom_args") + public Map getCustomArgs() { + return customArgs; + } + + public void addCustomArg(String key, String value) { + if (customArgs == null) { + customArgs = new HashMap(); + customArgs.put(key, value); + } else { + customArgs.put(key, value); + } + } + + @JsonProperty("send_at") + public long sendAt() { + return sendAt; + } + + public void setSendAt(long sendAt) { + this.sendAt = sendAt; + } + + @JsonProperty("batch_id") + public String getBatchId() { + return batchId; + } + + public void setBatchId(String batchId) { + this.batchId = batchId; + } + + @JsonProperty("ip_pool_name") + public String getIpPoolId() { + return ipPoolId; + } + + public void setIpPoolId(String ipPoolId) { + this.ipPoolId = ipPoolId; + } + + @JsonProperty("mail_settings") + public MailSettings getMailSettings() { + return mailSettings; + } + + public void setMailSettings(MailSettings mailSettings) { + this.mailSettings = mailSettings; + } + + @JsonProperty("tracking_settings") + public TrackingSettings getTrackingSettings() { + return trackingSettings; + } + + public void setTrackingSettings(TrackingSettings trackingSettings) { + this.trackingSettings = trackingSettings; + } + + @JsonProperty("reply_to") + public Email getReplyto() { + return replyTo; + } + + public void setReplyTo(Email replyTo) { + this.replyTo = replyTo; + } + + /** + * Create a string represenation of the Mail object JSON. + */ + public String build() throws IOException { + try { + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(this); + } catch (IOException ex) { + throw ex; + } + } + + /** + * Create a string represenation of the Mail object JSON and pretty print it. + */ + public String buildPretty() throws IOException { + try { + ObjectMapper mapper = new ObjectMapper(); + return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(this); + } catch (IOException ex) { + throw ex; + } + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java index 4a70f7fd..1a65a65d 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java @@ -1,18 +1,31 @@ package com.sendgrid; -import java.util.Arrays; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.Arrays; @JsonInclude(Include.NON_DEFAULT) public class ASM { - public int group_id; - public int[] groups_to_display; - - public void setGroupID(int group_id) { - this.group_id = group_id; - } - - public void setGroupsToDisplay(int[] GroupsToDisplay) { - this.groups_to_display = Arrays.copyOf(GroupsToDisplay, GroupsToDisplay.length); - } + @JsonProperty("group_id") private int groupId; + @JsonProperty("groups_to_display") private int[] groupsToDisplay; + + @JsonProperty("group_id") + public int getGroupId() { + return groupId; + } + + public void setGroupId(int groupId) { + this.groupId = groupId; + } + + @JsonProperty("groups_to_display") + public int[] getGroupsToDisplay() { + return groupsToDisplay; + } + + public void setGroupsToDisplay(int[] groupsToDisplay) { + this.groupsToDisplay = Arrays.copyOf(groupsToDisplay, groupsToDisplay.length); + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 40a63115..46c779f4 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -1,58 +1,59 @@ package com.sendgrid; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; @JsonInclude(Include.NON_DEFAULT) public class Attachments { - @JsonProperty("content") private String content; - @JsonProperty("type") private String type; - @JsonProperty("filename") private String filename; - @JsonProperty("disposition") private String disposition; - @JsonProperty("content_id") private String contentId; - - public void setContent(String content) { - this.content = content; - } - - @JsonProperty("content") - public String getContent() { - return content; - } - - public void setType(String type) { - this.type = type; - } - - @JsonProperty("type") - public String getType() { - return type; - } - - public void setFilename(String filename) { - this.filename = filename; - } - - @JsonProperty("filename") - public String getFilename() { - return filename; - } - - public void setDisposition(String disposition) { - this.disposition = disposition; - } - - @JsonProperty("disposition") - public String getDisposition() { - return disposition; - } - - public void setContentId(String contentId) { - this.contentId = contentId; - } - - @JsonProperty("content_id") - public String getContentId() { - return contentId; - } -} \ No newline at end of file + @JsonProperty("content") private String content; + @JsonProperty("type") private String type; + @JsonProperty("filename") private String filename; + @JsonProperty("disposition") private String disposition; + @JsonProperty("content_id") private String contentId; + + @JsonProperty("content") + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + @JsonProperty("type") + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + @JsonProperty("filename") + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + @JsonProperty("disposition") + public String getDisposition() { + return disposition; + } + + public void setDisposition(String disposition) { + this.disposition = disposition; + } + + @JsonProperty("content_id") + public String getContentId() { + return contentId; + } + + public void setContentId(String contentId) { + this.contentId = contentId; + } +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index 06571238..8534a39b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -6,24 +6,24 @@ @JsonInclude(Include.NON_DEFAULT) public class BccSettings { - @JsonProperty("enable") private boolean enable; - @JsonProperty("email") private Email email; - - public void setEnable(boolean enable) { - this.enable = enable; - } - - @JsonProperty("enable") - public boolean getEnable() { - return enable; - } - - public void setEmail(Email email) { - this.email = email; - } - - @JsonProperty("email") - public Email getEmail() { - return this.email; - } + @JsonProperty("enable") private boolean enable; + @JsonProperty("email") private Email email; + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("email") + public Email getEmail() { + return this.email; + } + + public void setEmail(Email email) { + this.email = email; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index e14094b7..839c8fbf 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -6,24 +6,24 @@ @JsonInclude(Include.NON_DEFAULT) public class ClickTrackingSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("enable_text") private boolean enableText; - - public void setEnable(boolean enable) { - this.enable = enable; - } - - @JsonProperty("enable") - public boolean getEnable() { - return enable; - } - - public void setEnableText(boolean enableText) { - this.enableText = enableText; - } - - @JsonProperty("enable_text") - public boolean getEnableText() { - return enableText; - } + @JsonProperty("enable") private boolean enable; + @JsonProperty("enable_text") private boolean enableText; + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("enable_text") + public boolean getEnableText() { + return enableText; + } + + public void setEnableText(boolean enableText) { + this.enableText = enableText; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index 2bf319f3..c99374bc 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -6,24 +6,24 @@ @JsonInclude(Include.NON_DEFAULT) public class Content { - @JsonProperty("type") private String type; - @JsonProperty("value") private String value; + @JsonProperty("type") private String type; + @JsonProperty("value") private String value; - public void setType(String type) { - this.type = type; - } + @JsonProperty("type") + public String getType() { + return type; + } - @JsonProperty("type") - public String getType() { - return type; - } + public void setType(String type) { + this.type = type; + } - public void setValue(String value) { - this.value = value; - } + @JsonProperty("value") + public String getValue() { + return value; + } - @JsonProperty("value") - public String getValue() { - return value; - } + public void setValue(String value) { + this.value = value; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java index bd5564f8..3c191908 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -1,29 +1,29 @@ package com.sendgrid; -import java.util.*; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; @JsonInclude(Include.NON_DEFAULT) public class Email { - @JsonProperty("name") private String name; - @JsonProperty("email") private String email; - - public void setName(String name) { - this.name = name; - } - - @JsonProperty("name") - public String getName() { - return name; - } - - public void setEmail(String email) { - this.email = email; - } - - @JsonProperty("email") - public String getEmail() { - return email; - } + @JsonProperty("name") private String name; + @JsonProperty("email") private String email; + + @JsonProperty("name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @JsonProperty("email") + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index a0c8888c..8e542c7f 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -1,38 +1,39 @@ package com.sendgrid; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; @JsonInclude(Include.NON_DEFAULT) public class FooterSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("text") private String text; - @JsonProperty("html") private String html; - - public void setEnable(boolean enable) { - this.enable = enable; - } - - @JsonProperty("enable") - public boolean getEnable() { - return enable; - } - - public void setText(String text) { - this.text = text; - } - - @JsonProperty("text") - public String getText() { - return text; - } + @JsonProperty("enable") private boolean enable; + @JsonProperty("text") private String text; + @JsonProperty("html") private String html; + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("text") + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + @JsonProperty("html") + public String getHtml() { + return html; + } - public void setHtml(String html) { - this.html = html; - } - - @JsonProperty("html") - public String getHtml() { - return html; - } + public void setHtml(String html) { + this.html = html; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index aca53953..ce30edbc 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -6,65 +6,64 @@ @JsonInclude(Include.NON_DEFAULT) public class GoogleAnalyticsSetting { + @JsonProperty("enable") private boolean enable; + @JsonProperty("utm_source") private String campaignSource; + @JsonProperty("utm_term") private String campaignTerm; + @JsonProperty("utm_content") private String campaignContent; + @JsonProperty("utm_campaign") private String campaignName; + @JsonProperty("utm_medium") private String campaignMedium; + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("utm_source") + public String getCampaignSource() { + return campaignSource; + } - @JsonProperty("enable") private boolean enable; - @JsonProperty("utm_source") private String campaignSource; - @JsonProperty("utm_term") private String campaignTerm; - @JsonProperty("utm_content") private String campaignContent; - @JsonProperty("utm_name") private String campaignName; - @JsonProperty("utm_medium") private String campaignMedium; - - public void setEnable(boolean enable) { - this.enable = enable; - } - - @JsonProperty("enable") - public boolean getEnable() { - return enable; - } + public void setCampaignSource(String campaignSource) { + this.campaignSource = campaignSource; + } + + @JsonProperty("utm_term") + public String getCampaignTerm() { + return campaignTerm; + } - public void setCampaignSource(String campaignSource) { - this.campaignSource = campaignSource; - } - - @JsonProperty("utm_source") - public String getCampaignSource() { - return campaignSource; - } - - public void setCampaignTerm(String campaignTerm) { - this.campaignTerm = campaignTerm; - } - - @JsonProperty("utm_term") - public String getCampaignTerm() { - return campaignTerm; - } - - public void setCampaignContent(String campaignContent) { - this.campaignContent = campaignContent; - } - - @JsonProperty("utm_content") - public String getCampaignContent() { - return campaignContent; - } - - public void setCampaignName(String campaignName) { - this.campaignName = campaignName; - } - - @JsonProperty("utm_name") - public String getCampaignName() { - return campaignName; - } - - public void setCampaignMedium(String campaignMedium) { - this.campaignMedium = campaignMedium; - } - - @JsonProperty("utm_medium") - public String getCampaignMedium() { - return campaignMedium; - } + public void setCampaignTerm(String campaignTerm) { + this.campaignTerm = campaignTerm; + } + + @JsonProperty("utm_content") + public String getCampaignContent() { + return campaignContent; + } + + public void setCampaignContent(String campaignContent) { + this.campaignContent = campaignContent; + } + + @JsonProperty("utm_campaign") + public String getCampaignName() { + return campaignName; + } + + public void setCampaignName(String campaignName) { + this.campaignName = campaignName; + } + + @JsonProperty("utm_medium") + public String getCampaignMedium() { + return campaignMedium; + } + + public void setCampaignMedium(String campaignMedium) { + this.campaignMedium = campaignMedium; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index fd468f5b..63580458 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -6,54 +6,54 @@ @JsonInclude(Include.NON_DEFAULT) public class MailSettings { - @JsonProperty("bcc") private BccSettings bccSettings; - @JsonProperty("bypass_list_management") private Setting bypassListManagement; - @JsonProperty("footer") private FooterSetting footerSetting; - @JsonProperty("sandbox_mode") private Setting sandBoxMode; - @JsonProperty("spam_check") private SpamCheckSetting spamCheckSetting; - - public void setBccSettings(BccSettings bccSettings) { - this.bccSettings = bccSettings; - } - - @JsonProperty("bcc") - public BccSettings getBccSettings() { - return bccSettings; - } + @JsonProperty("bcc") private BccSettings bccSettings; + @JsonProperty("bypass_list_management") private Setting bypassListManagement; + @JsonProperty("footer") private FooterSetting footerSetting; + @JsonProperty("sandbox_mode") private Setting sandBoxMode; + @JsonProperty("spam_check") private SpamCheckSetting spamCheckSetting; - public void setBypassListManagement(Setting bypassListManagement) { - this.bypassListManagement = bypassListManagement; - } - - @JsonProperty("bypass_list_management") - public Setting getBypassListManagement() { - return bypassListManagement; - } - - public void setFooterSetting(FooterSetting footerSetting) { - this.footerSetting = footerSetting; - } - - @JsonProperty("footer") - public FooterSetting getFooterSetting() { - return footerSetting; - } - - public void setSandboxMode(Setting sandBoxMode) { - this.sandBoxMode = sandBoxMode; - } - - @JsonProperty("sandbox_mode") - public Setting getSandBoxMode() { - return sandBoxMode; - } - - public void setSpamCheckSetting(SpamCheckSetting spamCheckSetting) { - this.spamCheckSetting = spamCheckSetting; - } - - @JsonProperty("spam_check") - public SpamCheckSetting getSpamCheck() { - return spamCheckSetting; - } + @JsonProperty("bcc") + public BccSettings getBccSettings() { + return bccSettings; + } + + public void setBccSettings(BccSettings bccSettings) { + this.bccSettings = bccSettings; + } + + @JsonProperty("bypass_list_management") + public Setting getBypassListManagement() { + return bypassListManagement; + } + + public void setBypassListManagement(Setting bypassListManagement) { + this.bypassListManagement = bypassListManagement; + } + + @JsonProperty("footer") + public FooterSetting getFooterSetting() { + return footerSetting; + } + + public void setFooterSetting(FooterSetting footerSetting) { + this.footerSetting = footerSetting; + } + + @JsonProperty("sandbox_mode") + public Setting getSandBoxMode() { + return sandBoxMode; + } + + public void setSandboxMode(Setting sandBoxMode) { + this.sandBoxMode = sandBoxMode; + } + + @JsonProperty("spam_check") + public SpamCheckSetting getSpamCheck() { + return spamCheckSetting; + } + + public void setSpamCheckSetting(SpamCheckSetting spamCheckSetting) { + this.spamCheckSetting = spamCheckSetting; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index d6d2ad18..aeb7ede1 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -6,24 +6,24 @@ @JsonInclude(Include.NON_DEFAULT) public class OpenTrackingSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("substitution_tag") private String substitutionTag; - - public void setEnable(boolean enable) { - this.enable = enable; - } - - @JsonProperty("enable") - public boolean getEnable() { - return enable; - } - - public void setSubstitutionTag(String substitutionTag) { - this.substitutionTag = substitutionTag; - } - - @JsonProperty("substitution_tag") - public String getSubstitutionTag() { - return substitutionTag; - } + @JsonProperty("enable") private boolean enable; + @JsonProperty("substitution_tag") private String substitutionTag; + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("substitution_tag") + public String getSubstitutionTag() { + return substitutionTag; + } + + public void setSubstitutionTag(String substitutionTag) { + this.substitutionTag = substitutionTag; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index c1d579f6..4d17f6d4 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -1,143 +1,133 @@ package com.sendgrid; -import java.util.*; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @JsonInclude(Include.NON_DEFAULT) public class Personalization { - @JsonProperty("to") private List to; - @JsonProperty("cc") private List cc; - @JsonProperty("bcc") private List bcc; - @JsonProperty("subject") private String subject; - @JsonProperty("headers") private Map headers; - @JsonProperty("substitutions") private Map substitutions; - @JsonProperty("custom_args") private Map customArgs; - @JsonProperty("categories") private List categories; - @JsonProperty("send_at") private long sendAt; - - public void addTo(Email email) { - Email e = new Email(); - e.setName(email.getName()); - e.setEmail(email.getEmail()); - if(to == null){ - to = new ArrayList(); - to.add(e); - } else { - to.add(e); - } - } - - @JsonProperty("to") - public List getTo() { - return to; - } - - public void addCc(Email email) { - Email e = new Email(); - e.setName(email.getName()); - e.setEmail(email.getEmail()); - if(cc == null){ - cc = new ArrayList(); - cc.add(e); - } else { - cc.add(e); - } - } - - @JsonProperty("cc") - public List getCc() { - return cc; - } + @JsonProperty("to") private List to; + @JsonProperty("cc") private List cc; + @JsonProperty("bcc") private List bcc; + @JsonProperty("subject") private String subject; + @JsonProperty("headers") private Map headers; + @JsonProperty("substitutions") private Map substitutions; + @JsonProperty("custom_args") private Map customArgs; + @JsonProperty("send_at") private long sendAt; - public void addBcc(Email email) { - Email e = new Email(); - e.setName(email.getName()); - e.setEmail(email.getEmail()); - if(bcc == null){ - bcc = new ArrayList(); - bcc.add(e); - } else { - bcc.add(e); - } - } - - @JsonProperty("bcc") - public List getBcc() { - return bcc; - } - - public void setSubject(String subject) { - this.subject = subject; - } - - @JsonProperty("subject") - public String getSubject() { - return subject; - } - - public void addHeader(String key, String value) { - if(headers == null){ - headers = new HashMap(); - headers.put(key, value); - } else { - headers.put(key, value); - } - } - - @JsonProperty("headers") - public Map getHeaders() { - return headers; - } - - public void addSubstitution(String key, String value) { - if(substitutions == null){ - substitutions = new HashMap(); - substitutions.put(key, value); - } else { - substitutions.put(key, value); - } - } - - @JsonProperty("substitutions") - public Map getSubstitutions() { - return substitutions; - } + @JsonProperty("to") + public List getTo() { + return to; + } + + public void addTo(Email email) { + Email newEmail = new Email(); + newEmail.setName(email.getName()); + newEmail.setEmail(email.getEmail()); + if (to == null) { + to = new ArrayList(); + to.add(newEmail); + } else { + to.add(newEmail); + } + } - public void addCustomArg(String key, String value) { - if(customArgs == null){ - customArgs = new HashMap(); - customArgs.put(key, value); - } else { - customArgs.put(key, value); - } - } - - @JsonProperty("custom_args") - public Map getCustomArgs() { - return customArgs; - } - - public void addCategory(String category) { - if(categories == null){ - categories = new ArrayList(); - categories.add(category); - } else { - categories.add(category); - } - } - - @JsonProperty("categories") - public List getCategories() { - return categories; - } - - public void setSendAt(long sendAt) { - this.sendAt = sendAt; - } - - @JsonProperty("send_at") - public long sendAt() { - return sendAt; - } + @JsonProperty("cc") + public List getCc() { + return cc; + } + + public void addCc(Email email) { + Email newEmail = new Email(); + newEmail.setName(email.getName()); + newEmail.setEmail(email.getEmail()); + if (cc == null) { + cc = new ArrayList(); + cc.add(newEmail); + } else { + cc.add(newEmail); + } + } + + @JsonProperty("bcc") + public List getBcc() { + return bcc; + } + + public void addBcc(Email email) { + Email newEmail = new Email(); + newEmail.setName(email.getName()); + newEmail.setEmail(email.getEmail()); + if (bcc == null) { + bcc = new ArrayList(); + bcc.add(newEmail); + } else { + bcc.add(newEmail); + } + } + + @JsonProperty("subject") + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + @JsonProperty("headers") + public Map getHeaders() { + return headers; + } + + public void addHeader(String key, String value) { + if (headers == null) { + headers = new HashMap(); + headers.put(key, value); + } else { + headers.put(key, value); + } + } + + @JsonProperty("substitutions") + public Map getSubstitutions() { + return substitutions; + } + + public void addSubstitution(String key, String value) { + if (substitutions == null) { + substitutions = new HashMap(); + substitutions.put(key, value); + } else { + substitutions.put(key, value); + } + } + + @JsonProperty("custom_args") + public Map getCustomArgs() { + return customArgs; + } + + public void addCustomArg(String key, String value) { + if (customArgs == null) { + customArgs = new HashMap(); + customArgs.put(key, value); + } else { + customArgs.put(key, value); + } + } + + @JsonProperty("send_at") + public long sendAt() { + return sendAt; + } + + public void setSendAt(long sendAt) { + this.sendAt = sendAt; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 7ab141ee..5818a145 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -6,14 +6,14 @@ @JsonInclude(Include.NON_DEFAULT) public class Setting { - @JsonProperty("enable") private boolean enable; - - public void setEnable(boolean enable) { - this.enable = enable; - } - - @JsonProperty("enable") - public boolean getEnable() { - return enable; - } + @JsonProperty("enable") private boolean enable; + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index 7e1275a7..85d1dc10 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -1,38 +1,39 @@ package com.sendgrid; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; @JsonInclude(Include.NON_DEFAULT) public class SpamCheckSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("threshold") private int spamThreshold; - @JsonProperty("post_to_url") private String postToUrl; - - public void setEnable(boolean enable) { - this.enable = enable; - } - - @JsonProperty("enable") - public boolean getEnable() { - return enable; - } - - public void setSpamThreshold(int spamThreshold) { - this.spamThreshold = spamThreshold; - } - - @JsonProperty("threshold") - public int getSpamThreshold() { - return spamThreshold; - } - - public void setPostToUrl(String postToUrl) { - this.postToUrl = postToUrl; - } - - @JsonProperty("post_to_url") - public String getPostToUrl() { - return postToUrl; - } + @JsonProperty("enable") private boolean enable; + @JsonProperty("threshold") private int spamThreshold; + @JsonProperty("post_to_url") private String postToUrl; + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("threshold") + public int getSpamThreshold() { + return spamThreshold; + } + + public void setSpamThreshold(int spamThreshold) { + this.spamThreshold = spamThreshold; + } + + @JsonProperty("post_to_url") + public String getPostToUrl() { + return postToUrl; + } + + public void setPostToUrl(String postToUrl) { + this.postToUrl = postToUrl; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index 6885699f..ad1121c2 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -6,45 +6,44 @@ @JsonInclude(Include.NON_DEFAULT) public class SubscriptionTrackingSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("text") private String text; - @JsonProperty("html") private String html; - @JsonProperty("substitution_tag") private String substitutionTag; - - public void setEnable(boolean enable) { - this.enable = enable; - } - - @JsonProperty("enable") - public boolean getEnable() { - return enable; - } - - public void setText(String text) { - this.text = text; - } - - @JsonProperty("text") - public String getText() { - return text; - } + @JsonProperty("enable") private boolean enable; + @JsonProperty("text") private String text; + @JsonProperty("html") private String html; + @JsonProperty("substitution_tag") private String substitutionTag; + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("text") + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + @JsonProperty("html") + public String getHtml() { + return html; + } - public void setHtml(String html) { - this.html = html; - } - - @JsonProperty("html") - public String getHtml() { - return html; - } + public void setHtml(String html) { + this.html = html; + } + + @JsonProperty("substitution_tag") + public String getSubstitutionTag() { + return substitutionTag; + } - public void setSubstitutionTag(String substitutionTag) { - this.substitutionTag = substitutionTag; - } - - @JsonProperty("substitution_tag") - public String getSubstitutionTag() { - return substitutionTag; - } - + public void setSubstitutionTag(String substitutionTag) { + this.substitutionTag = substitutionTag; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java index 631eb4ce..4da565d5 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java @@ -6,44 +6,44 @@ @JsonInclude(Include.NON_DEFAULT) public class TrackingSettings { - @JsonProperty("click_tracking") private ClickTrackingSetting clickTrackingSetting; - @JsonProperty("open_tracking") private OpenTrackingSetting openTrackingSetting; - @JsonProperty("subscription_tracking") private SubscriptionTrackingSetting subscriptionTrackingSetting; - @JsonProperty("ganalytics") private GoogleAnalyticsSetting googleAnalyticsSetting; - - public void setClickTrackingSetting(ClickTrackingSetting clickTrackingSetting) { - this.clickTrackingSetting = clickTrackingSetting; - } - - @JsonProperty("click_tracking") - public ClickTrackingSetting getClickTrackingSetting() { - return clickTrackingSetting; - } - - public void setOpenTrackingSetting(OpenTrackingSetting openTrackingSetting) { - this.openTrackingSetting = openTrackingSetting; - } - - @JsonProperty("open_tracking") - public OpenTrackingSetting getOpenTrackingSetting() { - return openTrackingSetting; - } - - public void setSubscriptionTrackingSetting(SubscriptionTrackingSetting subscriptionTrackingSetting) { - this.subscriptionTrackingSetting = subscriptionTrackingSetting; - } - - @JsonProperty("subscription_tracking") - public SubscriptionTrackingSetting getSubscriptionTrackingSetting() { - return subscriptionTrackingSetting; - } - - public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSetting) { - this.googleAnalyticsSetting = googleAnalyticsSetting; - } - - @JsonProperty("ganalytics") - public GoogleAnalyticsSetting getGoogleAnalyticsSetting() { - return googleAnalyticsSetting; - } + @JsonProperty("click_tracking") private ClickTrackingSetting clickTrackingSetting; + @JsonProperty("open_tracking") private OpenTrackingSetting openTrackingSetting; + @JsonProperty("subscription_tracking") private SubscriptionTrackingSetting subscriptionTrackingSetting; + @JsonProperty("ganalytics") private GoogleAnalyticsSetting googleAnalyticsSetting; + + @JsonProperty("click_tracking") + public ClickTrackingSetting getClickTrackingSetting() { + return clickTrackingSetting; + } + + public void setClickTrackingSetting(ClickTrackingSetting clickTrackingSetting) { + this.clickTrackingSetting = clickTrackingSetting; + } + + @JsonProperty("open_tracking") + public OpenTrackingSetting getOpenTrackingSetting() { + return openTrackingSetting; + } + + public void setOpenTrackingSetting(OpenTrackingSetting openTrackingSetting) { + this.openTrackingSetting = openTrackingSetting; + } + + @JsonProperty("subscription_tracking") + public SubscriptionTrackingSetting getSubscriptionTrackingSetting() { + return subscriptionTrackingSetting; + } + + public void setSubscriptionTrackingSetting(SubscriptionTrackingSetting subscriptionTrackingSetting) { + this.subscriptionTrackingSetting = subscriptionTrackingSetting; + } + + @JsonProperty("ganalytics") + public GoogleAnalyticsSetting getGoogleAnalyticsSetting() { + return googleAnalyticsSetting; + } + + public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSetting) { + this.googleAnalyticsSetting = googleAnalyticsSetting; + } } \ No newline at end of file diff --git a/src/test/java/com/sendgrid/MailTest.java b/src/test/java/com/sendgrid/MailTest.java deleted file mode 100644 index e69de29b..00000000 diff --git a/src/test/java/com/sendgrid/MockSendGrid.java b/src/test/java/com/sendgrid/MockSendGrid.java new file mode 100644 index 00000000..93187033 --- /dev/null +++ b/src/test/java/com/sendgrid/MockSendGrid.java @@ -0,0 +1,26 @@ +package com.sendgrid; + +import java.io.IOException; +import java.util.HashMap; + +public class MockSendGrid extends SendGrid { + Request request; + + public MockSendGrid(String apiKey) { + super(apiKey); + } + + public Response makeCall(Request request) throws IOException { + this.request = request; + Response response = new Response(); + response.statusCode = 200; + response.responseBody = "{\"message\":\"success\"}"; + response.responseHeaders = new HashMap(); + response.responseHeaders.put("Test", "Header"); + return response; + } + + public Request getRequest() { + return this.request; + } +} \ No newline at end of file diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index abf3b55f..5b83c12b 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -1,5 +1,9 @@ package com.sendgrid; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; @@ -7,42 +11,134 @@ import java.util.HashMap; import java.util.Map; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - public class SendGridTest { - private final String SENDGRID_API_KEY = ""; + private final String SENDGRID_API_KEY = ""; + + public Map buildDefaultHeaders() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + Map requestHeaders = new HashMap(); + requestHeaders.put("Authorization", "Bearer " + SENDGRID_API_KEY); + requestHeaders.put("Content-Type", "application/json"); + String USER_AGENT = "sendgrid/" + sg.getLibraryVersion() + ";java"; + requestHeaders.put("User-agent", USER_AGENT); + return requestHeaders; + } + + @Test + public void testInitialization() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + Assert.assertEquals(sg.getHost(), "api.sendgrid.com"); + Assert.assertEquals(sg.getVersion(), "v3"); + Map requestHeaders = buildDefaultHeaders(); + Assert.assertEquals(sg.getRequestHeaders(), requestHeaders); + } + + @Test + public void testLibraryVersion() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + Assert.assertEquals(sg.getLibraryVersion(), "3.0.0"); + } + + @Test + public void testVersion() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setVersion("v4"); + Assert.assertEquals(sg.getVersion(), "v4"); + } + + @Test + public void testRequestHeaders() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + Map requestHeaders = buildDefaultHeaders(); - @Test - public void testVersion() { - SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getVersion(), "3.0.0"); - } + sg.addRequestHeader("Test", "one"); + requestHeaders.put("Test", "one"); + Assert.assertEquals(sg.getRequestHeaders(), requestHeaders); + + sg.removeRequestHeader("Test"); + requestHeaders.remove("Test"); + Assert.assertEquals(sg.getRequestHeaders(), requestHeaders); + } + + @Test + public void testHost() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setHost("api.new.com"); + Assert.assertEquals(sg.getHost(), "api.new.com"); + } + + @Test + public void testApiGet() throws IOException { + MockSendGrid sg = new MockSendGrid(SENDGRID_API_KEY); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "api_keys"; + Map queryParams = new HashMap(); + queryParams.put("limit", "100"); + queryParams.put("offset", "0"); + request.queryParams = queryParams; + sg.api(request); + Request testRequest = sg.getRequest(); + Assert.assertEquals(request.queryParams, testRequest.queryParams); + Assert.assertEquals(request.method, testRequest.method); + Assert.assertEquals("/v3/" + request.endpoint, testRequest.endpoint); + Map requestHeaders = buildDefaultHeaders(); + Assert.assertEquals(requestHeaders, testRequest.requestHeaders); + } + + @Test + public void testApiPostPutPatch() throws IOException { + MockSendGrid sg = new MockSendGrid(SENDGRID_API_KEY); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "api_keys"; + request.requestBody = "{\"test\":\"request_body\"}"; + sg.api(request); + Request testRequest = sg.getRequest(); + Assert.assertEquals(request.method, testRequest.method); + Assert.assertEquals("/v3/" + request.endpoint, testRequest.endpoint); + Assert.assertEquals(request.requestBody, testRequest.requestBody); + Map requestHeaders = buildDefaultHeaders(); + Assert.assertEquals(requestHeaders, testRequest.requestHeaders); + } + + @Test + public void testApiDelete() throws IOException { + MockSendGrid sg = new MockSendGrid(SENDGRID_API_KEY); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "api_keys"; + sg.api(request); + Request testRequest = sg.getRequest(); + Assert.assertEquals(request.method, testRequest.method); + Assert.assertEquals("/v3/" + request.endpoint, testRequest.endpoint); + Map requestHeaders = buildDefaultHeaders(); + Assert.assertEquals(requestHeaders, testRequest.requestHeaders); + } - @Test - public void testBuildGradleVersion() { - try { - SendGrid sg = new SendGrid(SENDGRID_API_KEY); - BufferedReader br = new BufferedReader(new FileReader("./build.gradle")); - String line = br.readLine(); - String regex = "version\\s*=\\s*'" + sg.getVersion() + "'"; + @Test + public void testBuildGradleVersion() throws IOException { + try { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + BufferedReader br = new BufferedReader(new FileReader("./build.gradle")); + String line = br.readLine(); + String regex = "version\\s*=\\s*'" + sg.getLibraryVersion() + "'"; - while (line != null) { - if (line.matches(regex)) { - br.close(); - return; - } - line = br.readLine(); - } - br.close(); - Assert.assertTrue("build.gradle version does not match", false); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + while (line != null) { + if (line.matches(regex)) { + br.close(); + return; } - + line = br.readLine(); + } + br.close(); + Assert.assertTrue("build.gradle version does not match", false); + } catch (FileNotFoundException ex) { + throw ex; + } catch (IOException ex) { + throw ex; } + + } } diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java new file mode 100644 index 00000000..10daed39 --- /dev/null +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -0,0 +1,221 @@ +package com.sendgrid; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; + +public class MailTest { + + @Test + public void testHelloWorld() throws IOException { + Mail mail = new Mail(); + + Email fromEmail = new Email(); + fromEmail.setEmail("dx@sendgrid.com"); + mail.setFrom(fromEmail); + + Personalization personalization = new Personalization(); + Email to = new Email(); + to.setEmail("elmer.thomas@sendgrid.com"); + personalization.addTo(to); + + mail.addPersonalization(personalization); + + mail.setSubject("Hello World from the SendGrid Java Library"); + + Content content = new Content(); + content.setType("text/plain"); + content.setValue("some text here"); + mail.addContent(content); + content.setType("text/html"); + content.setValue("some text here"); + mail.addContent(content); + + Assert.assertEquals(mail.build(), "{\"from\":{\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalization\":[{\"to\":[{\"email\":\"elmer.thomas@sendgrid.com\"}]}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}]}"); + } + + @Test + public void testKitchenSink() throws IOException { + Mail mail = new Mail(); + + Email fromEmail = new Email(); + fromEmail.setName("Elmer Thomas"); + fromEmail.setEmail("dx@sendgrid.com"); + mail.setFrom(fromEmail); + + mail.setSubject("Hello World from the SendGrid Java Library"); + + Personalization personalization = new Personalization(); + Email to = new Email(); + to.setName("Elmer Thomas"); + to.setEmail("elmer.thomas@sendgrid.com"); + personalization.addTo(to); + to.setName("Elmer Thomas Alias"); + to.setEmail("elmer.thomas@gmail.com"); + personalization.addTo(to); + Email cc = new Email(); + cc.setName("Matt Bernier"); + cc.setEmail("matt.bernier@sendgrid.com"); + personalization.addCc(cc); + cc.setName("Eric Shallock"); + cc.setEmail("eric.shallock@sendgrid.com"); + personalization.addCc(cc); + Email bcc = new Email(); + bcc.setName("DX Matt Bernier"); + bcc.setEmail("dx+matt@sendgrid.com"); + personalization.addBcc(bcc); + bcc.setName("DX Eric Shallock"); + bcc.setEmail("dx+eric@sendgrid.com"); + personalization.addBcc(bcc); + personalization.setSubject("Hello World from the Personalized SendGrid Java Library"); + personalization.addHeader("X-Test", "test"); + personalization.addHeader("X-Mock", "true"); + personalization.addSubstitution("%name%", "Tim"); + personalization.addSubstitution("%city%", "Riverside"); + personalization.addCustomArg("user_id", "343"); + personalization.addCustomArg("type", "marketing"); + personalization.setSendAt(1443636843); + mail.addPersonalization(personalization); + + Personalization personalization2 = new Personalization(); + Email to2 = new Email(); + to2.setName("Elmer Thomas"); + to2.setEmail("elmer.thomas@sendgrid.com"); + personalization2.addTo(to2); + to2.setName("Elmer Thomas Alias"); + to2.setEmail("elmer.thomas@gmail.com"); + personalization2.addTo(to2); + Email cc2 = new Email(); + cc2.setName("Matt Bernier"); + cc2.setEmail("matt.bernier@sendgrid.com"); + personalization2.addCc(cc2); + cc2.setName("Eric Shallock"); + cc2.setEmail("eric.shallock@sendgrid.com"); + personalization2.addCc(cc2); + Email bcc2 = new Email(); + bcc2.setName("DX Matt Bernier"); + bcc2.setEmail("dx+matt@sendgrid.com"); + personalization2.addBcc(bcc2); + bcc2.setName("DX Eric Shallock"); + bcc2.setEmail("dx+eric@sendgrid.com"); + personalization2.addBcc(bcc2); + personalization2.setSubject("Hello World from the Personalized SendGrid Java Library"); + personalization2.addHeader("X-Test", "test"); + personalization2.addHeader("X-Mock", "true"); + personalization2.addSubstitution("%name%", "Tim"); + personalization2.addSubstitution("%city%", "Riverside"); + personalization2.addCustomArg("user_id", "343"); + personalization2.addCustomArg("type", "marketing"); + personalization2.setSendAt(1443636843); + mail.addPersonalization(personalization2); + + Content content = new Content(); + content.setType("text/plain"); + content.setValue("some text here"); + mail.addContent(content); + content.setType("text/html"); + content.setValue("some text here"); + mail.addContent(content); + + Attachments attachments = new Attachments(); + attachments.setContent("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12"); + attachments.setType("application/pdf"); + attachments.setFilename("balance_001.pdf"); + attachments.setDisposition("attachment"); + attachments.setContentId("Balance Sheet"); + mail.addAttachments(attachments); + + Attachments attachments2 = new Attachments(); + attachments2.setContent("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"); + attachments2.setType("image/png"); + attachments2.setFilename("banner.png"); + attachments2.setDisposition("inline"); + attachments2.setContentId("Banner"); + mail.addAttachments(attachments2); + + mail.setTemplateId("sendgrid_template_id"); + + mail.addSection("%section1%", "Substitution Text for Section 1"); + mail.addSection("%section2%", "Substitution Text for Section 2"); + + mail.addHeader("X-Test1", "1"); + mail.addHeader("X-Test2", "2"); + + mail.addCategory("May"); + mail.addCategory("2016"); + + mail.addCustomArg("campaign", "welcome"); + mail.addCustomArg("weekday", "morning"); + + mail.setSendAt(1443636842); + + ASM asm = new ASM(); + asm.setGroupId(99); + asm.setGroupsToDisplay(new int[] {4,5,6,7,8}); + mail.setASM(asm); + + mail.setBatchId("sendgrid_batch_id"); + + mail.setIpPoolId("23"); + + MailSettings mailSettings = new MailSettings(); + BccSettings bccSettings = new BccSettings(); + bccSettings.setEnable(true); + Email bccSettingsEmail = new Email(); + bccSettingsEmail.setEmail("dx@sendgrid.com"); + bccSettings.setEmail(bccSettingsEmail); + mailSettings.setBccSettings(bccSettings); + mail.setMailSettings(mailSettings); + Setting sandBoxMode = new Setting(); + sandBoxMode.setEnable(true); + mailSettings.setSandboxMode(sandBoxMode); + Setting bypassListManagement = new Setting(); + bypassListManagement.setEnable(true); + mailSettings.setBypassListManagement(bypassListManagement); + FooterSetting footerSetting = new FooterSetting(); + footerSetting.setEnable(true); + footerSetting.setText("Footer Text"); + footerSetting.setHtml("Footer Text"); + mailSettings.setFooterSetting(footerSetting); + SpamCheckSetting spamCheckSetting = new SpamCheckSetting(); + spamCheckSetting.setEnable(true); + spamCheckSetting.setSpamThreshold(1); + spamCheckSetting.setPostToUrl("https://spamcatcher.sendgrid.com"); + mailSettings.setSpamCheckSetting(spamCheckSetting); + mail.setMailSettings(mailSettings); + + TrackingSettings trackingSettings = new TrackingSettings(); + ClickTrackingSetting clickTrackingSetting = new ClickTrackingSetting(); + clickTrackingSetting.setEnable(true); + clickTrackingSetting.setEnableText(true); + trackingSettings.setClickTrackingSetting(clickTrackingSetting); + OpenTrackingSetting openTrackingSetting = new OpenTrackingSetting(); + openTrackingSetting.setEnable(true); + openTrackingSetting.setSubstitutionTag("Optional tag to replace with the open image in the body of the message"); + trackingSettings.setOpenTrackingSetting(openTrackingSetting); + SubscriptionTrackingSetting subscriptionTrackingSetting = new SubscriptionTrackingSetting(); + subscriptionTrackingSetting.setEnable(true); + subscriptionTrackingSetting.setText("text to insert into the text/plain portion of the message"); + subscriptionTrackingSetting.setHtml("html to insert into the text/html portion of the message"); + subscriptionTrackingSetting.setSubstitutionTag("Optional tag to replace with the open image in the body of the message"); + trackingSettings.setSubscriptionTrackingSetting(subscriptionTrackingSetting); + GoogleAnalyticsSetting googleAnalyticsSetting = new GoogleAnalyticsSetting(); + googleAnalyticsSetting.setEnable(true); + googleAnalyticsSetting.setCampaignSource("some source"); + googleAnalyticsSetting.setCampaignTerm("some term"); + googleAnalyticsSetting.setCampaignContent("some content"); + googleAnalyticsSetting.setCampaignName("some name"); + googleAnalyticsSetting.setCampaignMedium("some medium"); + trackingSettings.setGoogleAnalyticsSetting(googleAnalyticsSetting); + mail.setTrackingSettings(trackingSettings); + + Email replyTo = new Email(); + replyTo.setName("Mr. Elmer Thomas"); + replyTo.setEmail("dx+reply@sendgrid.com"); + mail.setReplyTo(replyTo); + + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalization\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"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\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"sendgrid_template_id\",\"sections\":{\"%section2%\":\"Substitution Text for Section 2\",\"%section1%\":\"Substitution Text for Section 1\"},\"headers\":{\"X-Test2\":\"2\",\"X-Test1\":\"1\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"weekday\":\"morning\",\"campaign\":\"welcome\"},\"send_at\":1443636842,\"batch_id\":\"sendgrid_batch_id\",\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":{\"email\":\"dx@sendgrid.com\"}},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); + } +} \ No newline at end of file diff --git a/src/test/resources/image.png b/src/test/resources/image.png deleted file mode 100644 index d53325e42338090c1b8a055c4846c435266ebccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16731 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 Date: Thu, 5 May 2016 08:47:32 -0700 Subject: [PATCH 008/439] Update API Keys URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e1729593..3d028b58 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ import com.sendgrid.*; ## Usage -To begin using this library, initialize the SendGrid object with your SendGrid API Key. To configure API keys, visit https://sendgrid.com/beta/settings/api_keys. +To begin using this library, initialize the SendGrid object with your SendGrid API Key. To configure API keys, visit https://sendgrid.com/docs/API_Reference/Web_API_v3/API_Keys/index.html. ```java import com.sendgrid.SendGrid; From 59fc079db4374d1ae4e890d982053613dd823761 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 10 May 2016 01:06:28 -0700 Subject: [PATCH 009/439] Ready for beta --- CONTRIBUTING.md | 16 +-- README.md | 42 ++++++- examples/Mail/Example.java | 109 +++++++---------- src/main/java/com/sendgrid/helpers/README.md | 11 +- .../java/com/sendgrid/helpers/mail/Mail.java | 114 ++++++++++-------- .../helpers/mail/objects/BccSettings.java | 14 +-- .../helpers/mail/objects/Content.java | 13 +- .../sendgrid/helpers/mail/objects/Email.java | 25 +++- .../helpers/mail/objects/Personalization.java | 74 ++++++------ .../java/com/sendgrid/helpers/MailTest.java | 19 ++- 10 files changed, 243 insertions(+), 194 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f4735495..52112dba 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -Hello! Thank you for choosing to help contribute to the sendgrid-python library. There are many ways you can contribute and help is always welcome. +Hello! Thank you for choosing to help contribute to the sendgrid-java library. There are many ways you can contribute and help is always welcome. We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. @@ -94,7 +94,6 @@ You will need to setup the following environment to use the SendGrid example: echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env echo "sendgrid.env" >> .gitignore source ./sendgrid.env -node examples/example.js ``` @@ -109,6 +108,11 @@ cd examples javac -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example ``` +To build the project: +```bash +./gradlew build +``` + **/tests** Tests for HTTP client. @@ -124,9 +128,9 @@ All PRs require passing tests before the PR will be reviewed. All test files are in the `[tests](https://github.com/sendgrid/sendgrid-java/tree/master/tests)` directory. -For the purposes of contributing to this repo, please update the [`test_v3_endpoints.py`](https://github.com/sendgrid/sendgrid-java/blob/master/test/test_v3_endpoints.py) file with unit tests as you modify the code. +For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/blob/master/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. -```java +```bash ./gradlew test -i ``` @@ -135,9 +139,7 @@ For the purposes of contributing to this repo, please update the [`test_v3_endpo Generally, we follow the style guidelines as suggested by the official language. However, we ask that you conform to the styles that already exist in the library. If you wish to deviate, please explain your reasoning. -* []() - -Please run your code through +Please run your code through [FindBugs](http://findbugs.sourceforge.net/) and [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](http://checkstyle.sourceforge.net/reports/google-java-style.html). ### Directory Structure diff --git a/README.md b/README.md index 389a8030..0fab57d3 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,14 @@ **This library allows you to quickly and easily use the SendGrid Web API via Java.** +**NOTE: The `/mail/send/beta` endpoint is currently in beta! + +Since this is not a general release, we do not recommend POSTing production level traffic through this endpoint or integrating your production servers with this endpoint. + +When this endpoint is ready for general release, your code will require an update in order to use the official URI. + +By using this endpoint, you accept that you may encounter bugs and that the endpoint may be taken down for maintenance at any time. We cannot guarantee the continued availability of this beta endpoint. We hope that you like this new endpoint and we appreciate any [feedback](dx+mail-beta@sendgrid.com) that you can send our way.** + # Installation Choose your installation method - Maven w/ Gradle (recommended), Maven or Jar file. @@ -46,10 +54,10 @@ import com.sendgrid.*; ``` ## Dependencies -) + - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) -## Environment Variables +## Environment Variables First, get your free SendGrid account [here](https://sendgrid.com/free?source=sendgrid-java). @@ -63,12 +71,40 @@ source ./sendgrid.env # Quick Start -## v3 Web API endpoints +## Hello Email + +```java +import com.sendgrid.*; +import java.io.IOException; + +Email from = new Email("dx@sendgrid.com"); +String subject = "Hello World from the SendGrid Java Library"; +Email to = new Email("elmer.thomas@sendgrid.com"); +Content content = new Content("text/plain", "some text here"); +Mail mail = new Mail(from, subject, to, content); + +SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); +Request request = new Request(); +try { + request.method = Method.POST; + request.endpoint = "mail/send/beta"; + request.requestBody = mail.build(); + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); +} catch (IOException ex) { + throw ex; +} +``` + +## General v3 Web API Usage ```java import com.sendgrid.*; import java.io.IOException; +SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); try { Request request = new Request; diff --git a/examples/Mail/Example.java b/examples/Mail/Example.java index d85df60b..489e5e9b 100644 --- a/examples/Mail/Example.java +++ b/examples/Mail/Example.java @@ -25,18 +25,18 @@ import java.util.Map; public class Example { - + // Fully populated Mail object public static Mail buildKitchenSink() throws IOException { Mail mail = new Mail(); - + Email fromEmail = new Email(); fromEmail.setName("Elmer Thomas"); fromEmail.setEmail("dx@sendgrid.com"); mail.setFrom(fromEmail); - + mail.setSubject("Hello World from the SendGrid Java Library"); - + Personalization personalization = new Personalization(); Email to = new Email(); to.setName("Elmer Thomas"); @@ -68,7 +68,7 @@ public static Mail buildKitchenSink() throws IOException { personalization.addCustomArg("type", "marketing"); personalization.setSendAt(1443636843); mail.addPersonalization(personalization); - + Personalization personalization2 = new Personalization(); Email to2 = new Email(); to2.setName("Elmer Thomas"); @@ -100,7 +100,7 @@ public static Mail buildKitchenSink() throws IOException { personalization2.addCustomArg("type", "marketing"); personalization2.setSendAt(1443636843); mail.addPersonalization(personalization2); - + Content content = new Content(); content.setType("text/plain"); content.setValue("some text here"); @@ -108,7 +108,7 @@ public static Mail buildKitchenSink() throws IOException { content.setType("text/html"); content.setValue("some text here"); mail.addContent(content); - + Attachments attachments = new Attachments(); attachments.setContent("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12"); attachments.setType("application/pdf"); @@ -116,48 +116,45 @@ public static Mail buildKitchenSink() throws IOException { attachments.setDisposition("attachment"); attachments.setContentId("Balance Sheet"); mail.addAttachments(attachments); - + Attachments attachments2 = new Attachments(); - attachments2.setContent("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"); + attachments2.setContent("BwdW"); attachments2.setType("image/png"); attachments2.setFilename("banner.png"); attachments2.setDisposition("inline"); attachments2.setContentId("Banner"); mail.addAttachments(attachments2); - - mail.setTemplateId("sendgrid_template_id"); - + + mail.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); + mail.addSection("%section1%", "Substitution Text for Section 1"); mail.addSection("%section2%", "Substitution Text for Section 2"); mail.addHeader("X-Test1", "1"); mail.addHeader("X-Test2", "2"); - + mail.addCategory("May"); mail.addCategory("2016"); - + mail.addCustomArg("campaign", "welcome"); mail.addCustomArg("weekday", "morning"); - + mail.setSendAt(1443636842); - + ASM asm = new ASM(); asm.setGroupId(99); asm.setGroupsToDisplay(new int[] {4,5,6,7,8}); mail.setASM(asm); - + mail.setBatchId("sendgrid_batch_id"); - + mail.setIpPoolId("23"); - + MailSettings mailSettings = new MailSettings(); BccSettings bccSettings = new BccSettings(); bccSettings.setEnable(true); - Email bccSettingsEmail = new Email(); - bccSettingsEmail.setEmail("dx@sendgrid.com"); - bccSettings.setEmail(bccSettingsEmail); + bccSettings.setEmail("dx+bcc@sendgrid.com"); mailSettings.setBccSettings(bccSettings); - mail.setMailSettings(mailSettings); Setting sandBoxMode = new Setting(); sandBoxMode.setEnable(true); mailSettings.setSandboxMode(sandBoxMode); @@ -175,7 +172,7 @@ public static Mail buildKitchenSink() throws IOException { spamCheckSetting.setPostToUrl("https://spamcatcher.sendgrid.com"); mailSettings.setSpamCheckSetting(spamCheckSetting); mail.setMailSettings(mailSettings); - + TrackingSettings trackingSettings = new TrackingSettings(); ClickTrackingSetting clickTrackingSetting = new ClickTrackingSetting(); clickTrackingSetting.setEnable(true); @@ -205,80 +202,66 @@ public static Mail buildKitchenSink() throws IOException { replyTo.setName("Mr. Elmer Thomas"); replyTo.setEmail("dx+reply@sendgrid.com"); mail.setReplyTo(replyTo); - - return mail; - } - + + System.out.println(mail.build()); + return mail; + } + // Minimum required to send an email public static Mail buildHelloEmail() throws IOException { - Mail mail = new Mail(); - - Email fromEmail = new Email(); - fromEmail.setEmail("dx@sendgrid.com"); - mail.setFrom(fromEmail); - - Personalization personalization = new Personalization(); - Email to = new Email(); - to.setEmail("elmer.thomas@sendgrid.com"); - personalization.addTo(to); - - mail.addPersonalization(personalization); - - mail.setSubject("Hello World from the SendGrid Java Library"); - - Content content = new Content(); - content.setType("text/plain"); - content.setValue("some text here"); - mail.addContent(content); - content.setType("text/html"); - content.setValue("some text here"); - mail.addContent(content); - - return mail; + Email from = new Email("dx@sendgrid.com"); + String subject = "Hello World from the SendGrid Java Library"; + Email to = new Email("elmer.thomas@sendgrid.com"); + Content content = new Content("text/plain", "some text here"); + Mail mail = new Mail(from, subject, to, content); + Email email = new Email("elmer.thomas+add_second_email@sendgrid.com"); + mail.personalization.get(0).addTo(email); + + return mail; } - + public static void baselineExample() throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); sg.setHost("3wyb2hp7emnqja6ys.stoplight-proxy.io/"); sg.addRequestHeader("X-Mock", "true"); - + Request request = new Request(); Mail helloWorld = buildHelloEmail(); try { request.method = Method.POST; - request.endpoint = "mail/send"; + request.endpoint = "mail/send/beta"; request.requestBody = helloWorld.build(); - + Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); System.out.println(response.responseHeaders); } catch (IOException ex) { throw ex; - } + } } - + public static void kitchenSinkExample() throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); sg.setHost("3wyb2hp7emnqja6ys.stoplight-proxy.io/"); sg.addRequestHeader("X-Mock", "true"); - + Request request = new Request(); Mail kitchenSink = buildKitchenSink(); try { request.method = Method.POST; - request.endpoint = "mail/send"; + request.endpoint = "mail/send/beta"; request.requestBody = kitchenSink.build(); - + Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); System.out.println(response.responseHeaders); } catch (IOException ex) { throw ex; - } + } } - + public static void main(String[] args) throws IOException { baselineExample(); kitchenSinkExample(); diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index b82e17cd..cbe49b66 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -2,23 +2,18 @@ ## Dependencies -- [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) - [Jackson](https://github.com/FasterXML/jackson) # Quick Start -Run the example (make sure you have set your environment variable to include your SENDGRID_API_KEY). +Run the [example]() (make sure you have set your environment variable to include your SENDGRID_API_KEY). ```bash -cd examples/mailto +cd examples/mail javac -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-databind-2.7.3.jar:../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-databind-2.7.3.jar:../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.0.0-jar.jar:. Example ``` ## Usage - See the example for a complete working example. -- [Documentation]() - -## Unsupported Libraries - -- [Official and Unsupported SendGrid Libraries](https://sendgrid.com/docs/Integrate/libraries.html) +- [Documentation]() \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index 4f94d1f1..e1968819 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -22,42 +22,56 @@ */ @JsonInclude(Include.NON_DEFAULT) public class Mail { - @JsonProperty("from") private Email from; - @JsonProperty("subject") private String subject; - @JsonProperty("personalization") private List personalization; - @JsonProperty("content") private List content; - @JsonProperty("attachments") private List attachments; - @JsonProperty("template_id") private String templateId; - @JsonProperty("sections") private Map sections; - @JsonProperty("headers") private Map headers; - @JsonProperty("categories") private List categories; - @JsonProperty("custom_args") private Map customArgs; - @JsonProperty("send_at") private long sendAt; - @JsonProperty("batch_id") private String batchId; - @JsonProperty("asm") private ASM asm; - @JsonProperty("ip_pool_name") private String ipPoolId; - @JsonProperty("mail_settings") private MailSettings mailSettings; - @JsonProperty("tracking_settings") private TrackingSettings trackingSettings; - @JsonProperty("reply_to") private Email replyTo; + @JsonProperty("from") public Email from; + @JsonProperty("subject") public String subject; + @JsonProperty("personalization") public List personalization; + @JsonProperty("content") public List content; + @JsonProperty("attachments") public List attachments; + @JsonProperty("template_id") public String templateId; + @JsonProperty("sections") public Map sections; + @JsonProperty("headers") public Map headers; + @JsonProperty("categories") public List categories; + @JsonProperty("custom_args") public Map customArgs; + @JsonProperty("send_at") public long sendAt; + @JsonProperty("batch_id") public String batchId; + @JsonProperty("asm") public ASM asm; + @JsonProperty("ip_pool_name") public String ipPoolId; + @JsonProperty("mail_settings") public MailSettings mailSettings; + @JsonProperty("tracking_settings") public TrackingSettings trackingSettings; + @JsonProperty("reply_to") public Email replyTo; + + public Mail() { + return; + } + + public Mail(Email from, String subject, Email to, Content content) + { + this.setFrom(from); + this.setSubject(subject); + Personalization personalization = new Personalization(); + personalization.addTo(to); + this.addPersonalization(personalization); + this.addContent(content); + } @JsonProperty("from") public Email getFrom(Email from) { return from; } - + public void setFrom(Email from) { this.from = from; } - + @JsonProperty("subject") public String getSubject() { return subject; } - + public void setSubject(String subject) { this.subject = subject; } - + @JsonProperty("asm") public ASM getASM() { return asm; @@ -66,12 +80,12 @@ public ASM getASM() { public void setASM(ASM asm) { this.asm = asm; } - + @JsonProperty("personalization") public List getPersonalization() { return personalization; } - + public void addPersonalization(Personalization personalization) { if (this.personalization == null) { this.personalization = new ArrayList(); @@ -85,7 +99,7 @@ public void addPersonalization(Personalization personalization) { public List getContent() { return content; } - + public void addContent(Content content) { Content newContent = new Content(); newContent.setType(content.getType()); @@ -102,7 +116,7 @@ public void addContent(Content content) { public List getAttachments() { return attachments; } - + public void addAttachments(Attachments attachments) { Attachments newAttachment = new Attachments(); newAttachment.setContent(attachments.getContent()); @@ -122,16 +136,16 @@ public void addAttachments(Attachments attachments) { public String getTemplateId() { return this.templateId; } - + public void setTemplateId(String templateId) { this.templateId = templateId; } - + @JsonProperty("sections") public Map getSections() { return sections; } - + public void addSection(String key, String value) { if (sections == null) { sections = new HashMap(); @@ -140,12 +154,12 @@ public void addSection(String key, String value) { sections.put(key, value); } } - + @JsonProperty("headers") public Map getHeaders() { return headers; } - + public void addHeader(String key, String value) { if (headers == null) { @@ -156,10 +170,10 @@ public void addHeader(String key, String value) { } } - @JsonProperty("categories") + @JsonProperty("categories") public List getCategories() { return categories; - } + } public void addCategory(String category) { if (categories == null) { @@ -167,14 +181,14 @@ public void addCategory(String category) { categories.add(category); } else { categories.add(category); - } + } } - + @JsonProperty("custom_args") public Map getCustomArgs() { return customArgs; } - + public void addCustomArg(String key, String value) { if (customArgs == null) { customArgs = new HashMap(); @@ -183,43 +197,43 @@ public void addCustomArg(String key, String value) { customArgs.put(key, value); } } - + @JsonProperty("send_at") public long sendAt() { return sendAt; } - + public void setSendAt(long sendAt) { this.sendAt = sendAt; } - + @JsonProperty("batch_id") public String getBatchId() { return batchId; } - + public void setBatchId(String batchId) { this.batchId = batchId; } - + @JsonProperty("ip_pool_name") public String getIpPoolId() { return ipPoolId; } - + public void setIpPoolId(String ipPoolId) { this.ipPoolId = ipPoolId; } - + @JsonProperty("mail_settings") public MailSettings getMailSettings() { return mailSettings; } - + public void setMailSettings(MailSettings mailSettings) { this.mailSettings = mailSettings; } - + @JsonProperty("tracking_settings") public TrackingSettings getTrackingSettings() { return trackingSettings; @@ -228,19 +242,19 @@ public TrackingSettings getTrackingSettings() { public void setTrackingSettings(TrackingSettings trackingSettings) { this.trackingSettings = trackingSettings; } - + @JsonProperty("reply_to") public Email getReplyto() { return replyTo; } - + public void setReplyTo(Email replyTo) { this.replyTo = replyTo; } - + /** * Create a string represenation of the Mail object JSON. - */ + */ public String build() throws IOException { try { ObjectMapper mapper = new ObjectMapper(); @@ -252,7 +266,7 @@ public String build() throws IOException { /** * Create a string represenation of the Mail object JSON and pretty print it. - */ + */ public String buildPretty() throws IOException { try { ObjectMapper mapper = new ObjectMapper(); @@ -260,5 +274,5 @@ public String buildPretty() throws IOException { } catch (IOException ex) { throw ex; } - } + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index 8534a39b..176387fa 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -7,23 +7,23 @@ @JsonInclude(Include.NON_DEFAULT) public class BccSettings { @JsonProperty("enable") private boolean enable; - @JsonProperty("email") private Email email; - + @JsonProperty("email") private String email; + @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("email") - public Email getEmail() { + public String getEmail() { return this.email; } - - public void setEmail(Email email) { + + public void setEmail(String email) { this.email = email; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index c99374bc..b00f9566 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -9,7 +9,16 @@ public class Content { @JsonProperty("type") private String type; @JsonProperty("value") private String value; - @JsonProperty("type") + public Content() { + return; + } + + public Content(String type, String value) { + this.setType(type); + this.setValue(value); + } + + @JsonProperty("type") public String getType() { return type; } @@ -18,7 +27,7 @@ public void setType(String type) { this.type = type; } - @JsonProperty("value") + @JsonProperty("value") public String getValue() { return value; } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java index 3c191908..43396a85 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -8,21 +8,34 @@ public class Email { @JsonProperty("name") private String name; @JsonProperty("email") private String email; - - @JsonProperty("name") + + public Email() { + return; + } + + public Email(String email) { + this.setEmail(email); + } + + public Email(String email, String name) { + this.setEmail(email); + this.setName(name); + } + + @JsonProperty("name") public String getName() { return name; } - + public void setName(String name) { this.name = name; } - - @JsonProperty("email") + + @JsonProperty("email") public String getEmail() { return email; } - + public void setEmail(String email) { this.email = email; } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 4d17f6d4..50dcafc5 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -11,80 +11,80 @@ @JsonInclude(Include.NON_DEFAULT) public class Personalization { - @JsonProperty("to") private List to; - @JsonProperty("cc") private List cc; - @JsonProperty("bcc") private List bcc; + @JsonProperty("to") private List tos; + @JsonProperty("cc") private List ccs; + @JsonProperty("bcc") private List bccs; @JsonProperty("subject") private String subject; @JsonProperty("headers") private Map headers; @JsonProperty("substitutions") private Map substitutions; @JsonProperty("custom_args") private Map customArgs; @JsonProperty("send_at") private long sendAt; - @JsonProperty("to") - public List getTo() { - return to; + @JsonProperty("to") + public List getTos() { + return tos; } - + public void addTo(Email email) { Email newEmail = new Email(); newEmail.setName(email.getName()); newEmail.setEmail(email.getEmail()); - if (to == null) { - to = new ArrayList(); - to.add(newEmail); + if (tos == null) { + tos = new ArrayList(); + tos.add(newEmail); } else { - to.add(newEmail); - } + tos.add(newEmail); + } } - @JsonProperty("cc") - public List getCc() { - return cc; + @JsonProperty("cc") + public List getCcs() { + return ccs; } - + public void addCc(Email email) { Email newEmail = new Email(); newEmail.setName(email.getName()); newEmail.setEmail(email.getEmail()); - if (cc == null) { - cc = new ArrayList(); - cc.add(newEmail); + if (ccs == null) { + ccs = new ArrayList(); + ccs.add(newEmail); } else { - cc.add(newEmail); + ccs.add(newEmail); } } - - @JsonProperty("bcc") - public List getBcc() { - return bcc; + + @JsonProperty("bcc") + public List getBccs() { + return bccs; } public void addBcc(Email email) { Email newEmail = new Email(); newEmail.setName(email.getName()); newEmail.setEmail(email.getEmail()); - if (bcc == null) { - bcc = new ArrayList(); - bcc.add(newEmail); + if (bccs == null) { + bccs = new ArrayList(); + bccs.add(newEmail); } else { - bcc.add(newEmail); + bccs.add(newEmail); } } - + @JsonProperty("subject") public String getSubject() { return subject; } - + public void setSubject(String subject) { this.subject = subject; } - + @JsonProperty("headers") public Map getHeaders() { return headers; } - + public void addHeader(String key, String value) { if (headers == null) { headers = new HashMap(); @@ -93,12 +93,12 @@ public void addHeader(String key, String value) { headers.put(key, value); } } - + @JsonProperty("substitutions") public Map getSubstitutions() { return substitutions; } - + public void addSubstitution(String key, String value) { if (substitutions == null) { substitutions = new HashMap(); @@ -107,7 +107,7 @@ public void addSubstitution(String key, String value) { substitutions.put(key, value); } } - + @JsonProperty("custom_args") public Map getCustomArgs() { return customArgs; @@ -121,12 +121,12 @@ public void addCustomArg(String key, String value) { customArgs.put(key, value); } } - + @JsonProperty("send_at") public long sendAt() { return sendAt; } - + public void setSendAt(long sendAt) { this.sendAt = sendAt; } diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 10daed39..7a43888e 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -7,7 +7,7 @@ import java.io.IOException; public class MailTest { - + @Test public void testHelloWorld() throws IOException { Mail mail = new Mail(); @@ -32,10 +32,10 @@ public void testHelloWorld() throws IOException { content.setType("text/html"); content.setValue("some text here"); mail.addContent(content); - - Assert.assertEquals(mail.build(), "{\"from\":{\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalization\":[{\"to\":[{\"email\":\"elmer.thomas@sendgrid.com\"}]}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}]}"); + + Assert.assertEquals(mail.build(), "{\"from\":{\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalization\":[{\"to\":[{\"email\":\"elmer.thomas@sendgrid.com\"}]}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}]}"); } - + @Test public void testKitchenSink() throws IOException { Mail mail = new Mail(); @@ -128,14 +128,14 @@ public void testKitchenSink() throws IOException { mail.addAttachments(attachments); Attachments attachments2 = new Attachments(); - attachments2.setContent("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"); + attachments2.setContent("BwdW"); attachments2.setType("image/png"); attachments2.setFilename("banner.png"); attachments2.setDisposition("inline"); attachments2.setContentId("Banner"); mail.addAttachments(attachments2); - mail.setTemplateId("sendgrid_template_id"); + mail.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); mail.addSection("%section1%", "Substitution Text for Section 1"); mail.addSection("%section2%", "Substitution Text for Section 2"); @@ -163,11 +163,8 @@ public void testKitchenSink() throws IOException { MailSettings mailSettings = new MailSettings(); BccSettings bccSettings = new BccSettings(); bccSettings.setEnable(true); - Email bccSettingsEmail = new Email(); - bccSettingsEmail.setEmail("dx@sendgrid.com"); - bccSettings.setEmail(bccSettingsEmail); + bccSettings.setEmail("dx+bcc@sendgrid.com"); mailSettings.setBccSettings(bccSettings); - mail.setMailSettings(mailSettings); Setting sandBoxMode = new Setting(); sandBoxMode.setEnable(true); mailSettings.setSandboxMode(sandBoxMode); @@ -216,6 +213,6 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("dx+reply@sendgrid.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalization\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"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\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"sendgrid_template_id\",\"sections\":{\"%section2%\":\"Substitution Text for Section 2\",\"%section1%\":\"Substitution Text for Section 1\"},\"headers\":{\"X-Test2\":\"2\",\"X-Test1\":\"1\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"weekday\":\"morning\",\"campaign\":\"welcome\"},\"send_at\":1443636842,\"batch_id\":\"sendgrid_batch_id\",\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":{\"email\":\"dx@sendgrid.com\"}},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalization\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section2%\":\"Substitution Text for Section 2\",\"%section1%\":\"Substitution Text for Section 1\"},\"headers\":{\"X-Test2\":\"2\",\"X-Test1\":\"1\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"weekday\":\"morning\",\"campaign\":\"welcome\"},\"send_at\":1443636842,\"batch_id\":\"sendgrid_batch_id\",\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"dx+bcc@sendgrid.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); } } \ No newline at end of file From 9c426b3b6c5846fa78095798d62a3bf88221d46c Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 10 May 2016 16:06:06 -0700 Subject: [PATCH 010/439] Ready for deploy --- CONTRIBUTING.md | 6 ++--- README.md | 18 ++++++------- examples/Example.java | 27 +++++++++---------- examples/Mail/Example.java | 5 ++-- src/main/java/com/sendgrid/helpers/README.md | 6 ++--- .../java/com/sendgrid/helpers/mail/Mail.java | 2 +- .../java/com/sendgrid/helpers/MailTest.java | 4 +-- 7 files changed, 33 insertions(+), 35 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 52112dba..cf0ed1f2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -86,7 +86,7 @@ cd sendgrid-java ##### Execute: ##### -See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/master/examples) to get started quickly. +See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples) to get started quickly. You will need to setup the following environment to use the SendGrid example: @@ -126,9 +126,9 @@ The interface to the SendGrid API. All PRs require passing tests before the PR will be reviewed. -All test files are in the `[tests](https://github.com/sendgrid/sendgrid-java/tree/master/tests)` directory. +All test files are in the `[tests](https://github.com/sendgrid/sendgrid-java/tree/v2beta/tests)` directory. -For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/blob/master/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. +For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/v2beta/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. ```bash ./gradlew test -i diff --git a/README.md b/README.md index 0fab57d3..73221ee3 100644 --- a/README.md +++ b/README.md @@ -131,9 +131,9 @@ have the following resources to get you started quickly: - [SendGrid Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) - [Usage - Documentation](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md) + Documentation](https://github.com/sendgrid/sendgrid-java/tree/v2beta/USAGE.md) - [Example - Code](https://github.com/sendgrid/sendgrid-java/blob/master/examples) + Code](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples) Thank you for your continued support! @@ -143,18 +143,18 @@ Thank you for your continued support! ## How to Contribute -We encourage contribution to our libraries, please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) guide for details. +We encourage contribution to our libraries, please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/tree/v2beta/CONTRIBUTING.md) guide for details. -* [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature_request) -* [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit_a_bug_report) -* [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements_to_the_codebase) +* [Feature Request](https://github.com/sendgrid/sendgrid-java/tree/v2beta/CONTRIBUTING.md#feature_request) +* [Bug Reports](https://github.com/sendgrid/sendgrid-java/tree/v2beta/CONTRIBUTING.md#submit_a_bug_report) +* [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/tree/v2beta/CONTRIBUTING.md#improvements_to_the_codebase) ## Usage - [SendGrid Docs](https://sendgrid.com/docs/API_Reference/index.html) -- [v3 Web API](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md) -- [Example Code](https://github.com/sendgrid/sendgrid-java/blob/master/examples) -- [v3 Web API Mail Send Helper]() +- [v3 Web API](https://github.com/sendgrid/sendgrid-java/tree/v2beta/USAGE.md) +- [Example Code](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples) +- [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/v2beta/src/main/java/com/sendgrid/helpers/mail/README.md) ## Unsupported Libraries diff --git a/examples/Example.java b/examples/Example.java index 495b4da1..86424ed0 100644 --- a/examples/Example.java +++ b/examples/Example.java @@ -14,9 +14,8 @@ public class Example { public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); sg.addRequestHeader("X-Test", "test"); - + // GET Request request = new Request(); try { @@ -26,7 +25,7 @@ public static void main(String[] args) throws IOException { queryParams.put("limit", "100"); queryParams.put("offset", "0"); request.queryParams = queryParams; - + Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -36,14 +35,14 @@ public static void main(String[] args) throws IOException { } finally { request.queryParams = null; } - + // POST String apiKeyId = ""; try { request.method = Method.POST; request.endpoint = "api_keys"; request.requestBody = "{\"name\": \"My api Key\",\"scopes\": [\"mail.send\",\"alerts.create\",\"alerts.read\"]}"; - + Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -51,7 +50,7 @@ public static void main(String[] args) throws IOException { try { ObjectMapper mapper = new ObjectMapper(); JsonNode json = mapper.readTree(response.responseBody); - apiKeyId = json.path("api_key_id").asText(); + apiKeyId = json.path("api_key_id").asText(); } catch (IOException ex) { throw ex; } @@ -60,11 +59,11 @@ public static void main(String[] args) throws IOException { } finally { request.requestBody = ""; } - + // GET Single request.method = Method.GET; request.endpoint = "api_keys/" + apiKeyId; - + try { Response response = sg.api(request); System.out.println(response.statusCode); @@ -73,11 +72,11 @@ public static void main(String[] args) throws IOException { } catch (IOException ex) { throw ex; } - + // PATCH request.method = Method.PATCH; request.requestBody = "{\"name\": \"A New Hope\"}"; - + try { Response response = sg.api(request); System.out.println(response.statusCode); @@ -88,12 +87,12 @@ public static void main(String[] args) throws IOException { } finally { request.requestBody = ""; } - + // PUT request.method = Method.PUT; request.requestBody = "{\"name\": \"A New Hope\",\"scopes\": [\"user.profile.read\",\"user.profile.update\"]}"; - + try { Response response = sg.api(request); System.out.println(response.statusCode); @@ -104,10 +103,10 @@ public static void main(String[] args) throws IOException { } finally { request.requestBody = ""; } - + // DELETE request.method = Method.DELETE; - + try { Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/Mail/Example.java b/examples/Mail/Example.java index 489e5e9b..e059864e 100644 --- a/examples/Mail/Example.java +++ b/examples/Mail/Example.java @@ -146,7 +146,8 @@ public static Mail buildKitchenSink() throws IOException { asm.setGroupsToDisplay(new int[] {4,5,6,7,8}); mail.setASM(asm); - mail.setBatchId("sendgrid_batch_id"); + // This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) to work + // mail.setBatchId("sendgrid_batch_id"); mail.setIpPoolId("23"); @@ -222,7 +223,6 @@ public static Mail buildHelloEmail() throws IOException { public static void baselineExample() throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.setHost("3wyb2hp7emnqja6ys.stoplight-proxy.io/"); sg.addRequestHeader("X-Mock", "true"); Request request = new Request(); @@ -243,7 +243,6 @@ public static void baselineExample() throws IOException { public static void kitchenSinkExample() throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.setHost("3wyb2hp7emnqja6ys.stoplight-proxy.io/"); sg.addRequestHeader("X-Mock", "true"); Request request = new Request(); diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index cbe49b66..02421ae1 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -6,7 +6,7 @@ # Quick Start -Run the [example]() (make sure you have set your environment variable to include your SENDGRID_API_KEY). +Run the [example](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples/mail) (make sure you have set your environment variable to include your SENDGRID_API_KEY). ```bash cd examples/mail @@ -15,5 +15,5 @@ javac -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-d ## Usage -- See the example for a complete working example. -- [Documentation]() \ No newline at end of file +- See the [example](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples/mail) for a complete working example. +- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/overview.html) \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index e1968819..039e787f 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -24,7 +24,7 @@ public class Mail { @JsonProperty("from") public Email from; @JsonProperty("subject") public String subject; - @JsonProperty("personalization") public List personalization; + @JsonProperty("personalizations") public List personalization; @JsonProperty("content") public List content; @JsonProperty("attachments") public List attachments; @JsonProperty("template_id") public String templateId; diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 7a43888e..1925aeeb 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -33,7 +33,7 @@ public void testHelloWorld() throws IOException { content.setValue("some text here"); mail.addContent(content); - Assert.assertEquals(mail.build(), "{\"from\":{\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalization\":[{\"to\":[{\"email\":\"elmer.thomas@sendgrid.com\"}]}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}]}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"email\":\"elmer.thomas@sendgrid.com\"}]}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}]}"); } @Test @@ -213,6 +213,6 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("dx+reply@sendgrid.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalization\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section2%\":\"Substitution Text for Section 2\",\"%section1%\":\"Substitution Text for Section 1\"},\"headers\":{\"X-Test2\":\"2\",\"X-Test1\":\"1\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"weekday\":\"morning\",\"campaign\":\"welcome\"},\"send_at\":1443636842,\"batch_id\":\"sendgrid_batch_id\",\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"dx+bcc@sendgrid.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section2%\":\"Substitution Text for Section 2\",\"%section1%\":\"Substitution Text for Section 1\"},\"headers\":{\"X-Test2\":\"2\",\"X-Test1\":\"1\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"weekday\":\"morning\",\"campaign\":\"welcome\"},\"send_at\":1443636842,\"batch_id\":\"sendgrid_batch_id\",\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"dx+bcc@sendgrid.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); } } \ No newline at end of file From 5e9e4b501f9ea02fbe3483f7cbef015e7e6e1883 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 10 May 2016 16:47:08 -0700 Subject: [PATCH 011/439] Fixed personalizations --- examples/Mail/Example.java | 8 +++++--- src/main/java/com/sendgrid/helpers/mail/Mail.java | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/Mail/Example.java b/examples/Mail/Example.java index e059864e..5aa94c5b 100644 --- a/examples/Mail/Example.java +++ b/examples/Mail/Example.java @@ -223,7 +223,8 @@ public static Mail buildHelloEmail() throws IOException { public static void baselineExample() throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.addRequestHeader("X-Mock", "true"); + //sg.addRequestHeader("X-Mock", "true"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); Request request = new Request(); Mail helloWorld = buildHelloEmail(); @@ -243,15 +244,16 @@ public static void baselineExample() throws IOException { public static void kitchenSinkExample() throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.addRequestHeader("X-Mock", "true"); + //sg.addRequestHeader("X-Mock", "true"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); Request request = new Request(); Mail kitchenSink = buildKitchenSink(); try { request.method = Method.POST; request.endpoint = "mail/send/beta"; - request.requestBody = kitchenSink.build(); + System.out.println(request.requestBody); Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index 039e787f..3620bf0c 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -81,7 +81,7 @@ public void setASM(ASM asm) { this.asm = asm; } - @JsonProperty("personalization") + @JsonProperty("personalizations") public List getPersonalization() { return personalization; } From 1899204ae4ad28c8a8118e8e40bd1badf94aa659 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 10 May 2016 16:52:19 -0700 Subject: [PATCH 012/439] Debugging Travis --- src/test/java/com/sendgrid/helpers/MailTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 1925aeeb..0b614536 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -156,7 +156,8 @@ public void testKitchenSink() throws IOException { asm.setGroupsToDisplay(new int[] {4,5,6,7,8}); mail.setASM(asm); - mail.setBatchId("sendgrid_batch_id"); + // This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) to work + // mail.setBatchId("sendgrid_batch_id"); mail.setIpPoolId("23"); @@ -212,7 +213,6 @@ public void testKitchenSink() throws IOException { replyTo.setName("Mr. Elmer Thomas"); replyTo.setEmail("dx+reply@sendgrid.com"); mail.setReplyTo(replyTo); - - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section2%\":\"Substitution Text for Section 2\",\"%section1%\":\"Substitution Text for Section 1\"},\"headers\":{\"X-Test2\":\"2\",\"X-Test1\":\"1\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"weekday\":\"morning\",\"campaign\":\"welcome\"},\"send_at\":1443636842,\"batch_id\":\"sendgrid_batch_id\",\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"dx+bcc@sendgrid.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section2%\":\"Substitution Text for Section 2\",\"%section1%\":\"Substitution Text for Section 1\"},\"headers\":{\"X-Test2\":\"2\",\"X-Test1\":\"1\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"weekday\":\"morning\",\"campaign\":\"welcome\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"dx+bcc@sendgrid.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); } } \ No newline at end of file From c457ad813a3038fc5a5669f77319c9aa28311a32 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 11 May 2016 08:25:46 -0700 Subject: [PATCH 013/439] Travis Debugging --- examples/Mail/Example.java | 11 +++++------ src/main/java/com/sendgrid/helpers/mail/Mail.java | 10 ++++++++-- src/test/java/com/sendgrid/helpers/MailTest.java | 3 ++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/examples/Mail/Example.java b/examples/Mail/Example.java index 5aa94c5b..38885512 100644 --- a/examples/Mail/Example.java +++ b/examples/Mail/Example.java @@ -204,7 +204,6 @@ public static Mail buildKitchenSink() throws IOException { replyTo.setEmail("dx+reply@sendgrid.com"); mail.setReplyTo(replyTo); - System.out.println(mail.build()); return mail; } @@ -224,7 +223,7 @@ public static Mail buildHelloEmail() throws IOException { public static void baselineExample() throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); //sg.addRequestHeader("X-Mock", "true"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("3wyb2hp7emnqja6ys.stoplight-proxy.io"); Request request = new Request(); Mail helloWorld = buildHelloEmail(); @@ -232,7 +231,7 @@ public static void baselineExample() throws IOException { request.method = Method.POST; request.endpoint = "mail/send/beta"; request.requestBody = helloWorld.build(); - + System.out.println(request.requestBody); // REMOVE Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -245,15 +244,15 @@ public static void baselineExample() throws IOException { public static void kitchenSinkExample() throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); //sg.addRequestHeader("X-Mock", "true"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("3wyb2hp7emnqja6ys.stoplight-proxy.io"); Request request = new Request(); Mail kitchenSink = buildKitchenSink(); try { request.method = Method.POST; request.endpoint = "mail/send/beta"; - - System.out.println(request.requestBody); + request.requestBody = kitchenSink.build(); + System.out.println(request.requestBody); // REMOVE Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index 3620bf0c..db4c5134 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.SerializationFeature; import java.io.IOException; import java.util.ArrayList; @@ -40,6 +41,11 @@ public class Mail { @JsonProperty("tracking_settings") public TrackingSettings trackingSettings; @JsonProperty("reply_to") public Email replyTo; + private static final ObjectMapper SORTED_MAPPER = new ObjectMapper(); + static { + SORTED_MAPPER.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); + } + public Mail() { return; } @@ -257,8 +263,8 @@ public void setReplyTo(Email replyTo) { */ public String build() throws IOException { try { - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(this); + //ObjectMapper mapper = new ObjectMapper(); + return SORTED_MAPPER.writeValueAsString(this); } catch (IOException ex) { throw ex; } diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 0b614536..2120ae18 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -213,6 +213,7 @@ public void testKitchenSink() throws IOException { replyTo.setName("Mr. Elmer Thomas"); replyTo.setEmail("dx+reply@sendgrid.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section2%\":\"Substitution Text for Section 2\",\"%section1%\":\"Substitution Text for Section 1\"},\"headers\":{\"X-Test2\":\"2\",\"X-Test1\":\"1\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"weekday\":\"morning\",\"campaign\":\"welcome\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"dx+bcc@sendgrid.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); + + //Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section2%\":\"Substitution Text for Section 2\",\"%section1%\":\"Substitution Text for Section 1\"},\"headers\":{\"X-Test2\":\"2\",\"X-Test1\":\"1\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"weekday\":\"morning\",\"campaign\":\"welcome\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"dx+bcc@sendgrid.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); } } \ No newline at end of file From b4cd46a0425e99ee58a28d5c61e3dfedbb76f9da Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 11 May 2016 08:31:24 -0700 Subject: [PATCH 014/439] Travis Debugging --- src/test/java/com/sendgrid/helpers/MailTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 2120ae18..0801eff8 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -214,6 +214,6 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("dx+reply@sendgrid.com"); mail.setReplyTo(replyTo); - //Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"user_id\":\"343\",\"type\":\"marketing\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section2%\":\"Substitution Text for Section 2\",\"%section1%\":\"Substitution Text for Section 1\"},\"headers\":{\"X-Test2\":\"2\",\"X-Test1\":\"1\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"weekday\":\"morning\",\"campaign\":\"welcome\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"dx+bcc@sendgrid.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"dx+bcc@sendgrid.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); } } \ No newline at end of file From 4dc814396cacd2bb8b6fd73b773584af1436adea Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 12 May 2016 14:39:17 -0700 Subject: [PATCH 015/439] Doc updates --- CONTRIBUTING.md | 7 +- README.md | 60 +++++++++++---- examples/Mail/Example.java | 76 +++++++++---------- .../java/com/sendgrid/helpers/MailTest.java | 74 +++++++++--------- 4 files changed, 121 insertions(+), 96 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cf0ed1f2..65eab683 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -126,7 +126,7 @@ The interface to the SendGrid API. All PRs require passing tests before the PR will be reviewed. -All test files are in the `[tests](https://github.com/sendgrid/sendgrid-java/tree/v2beta/tests)` directory. +All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tree/v2beta/tests) directory. For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/v2beta/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. @@ -141,11 +141,6 @@ Generally, we follow the style guidelines as suggested by the official language. Please run your code through [FindBugs](http://findbugs.sourceforge.net/) and [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](http://checkstyle.sourceforge.net/reports/google-java-style.html). -### Directory Structure - -* `examples` for example calls -* `test`, for all tests - ## Creating a Pull Request 1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, diff --git a/README.md b/README.md index 73221ee3..1135578e 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,50 @@ By using this endpoint, you accept that you may encounter bugs and that the endp # Installation +## Environment Variables + +First, get your free SendGrid account [here](https://sendgrid.com/free?source=sendgrid-java). + +Next, update your environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys). + +```bash +echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env +echo "sendgrid.env" >> .gitignore +source ./sendgrid.env +``` +## TRYING OUT THE V3 BETA MAIL SEND + +```bash +git clone -b v3beta --single-branch https://github.com/sendgrid/sendgrid-java.git +cd sendgrid-java +./gradlew build +``` + +* Update the to and from [emails](https://github.com/sendgrid/sendgrid-java/blob/v3beta/examples/Mail/Example.java#L35). + +```bash +cd examples/mail +javac -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-databind-2.7.3.jar:../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-databind-2.7.3.jar:../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.0.0-jar.jar:. Example +``` + +## TRYING OUT THE V3 BETA WEB API + +```bash +git clone -b v3beta --single-branch https://github.com/sendgrid/sendgrid-java.git +``` + +* Check out the documentation for [Web API v3 endpoints](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html). +* Review the corresponding [examples](https://github.com/sendgrid/sendgrid-python/blob/v3beta/examples). + +```bash +cd examples +javac -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example +``` + +* Check out the documentation for [Web API v3 /mail/send/beta endpoint](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html). + +## Once we are out of v3 BETA, the following will apply + Choose your installation method - Maven w/ Gradle (recommended), Maven or Jar file. ### via Maven w/ Gradle @@ -57,18 +101,6 @@ import com.sendgrid.*; - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) -## Environment Variables - -First, get your free SendGrid account [here](https://sendgrid.com/free?source=sendgrid-java). - -Next, update your environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys). - -```bash -echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env -echo "sendgrid.env" >> .gitignore -source ./sendgrid.env -``` - # Quick Start ## Hello Email @@ -77,9 +109,9 @@ source ./sendgrid.env import com.sendgrid.*; import java.io.IOException; -Email from = new Email("dx@sendgrid.com"); +Email from = new Email("test@example.com"); String subject = "Hello World from the SendGrid Java Library"; -Email to = new Email("elmer.thomas@sendgrid.com"); +Email to = new Email("test@example.com"); Content content = new Content("text/plain", "some text here"); Mail mail = new Mail(from, subject, to, content); diff --git a/examples/Mail/Example.java b/examples/Mail/Example.java index 38885512..f5135860 100644 --- a/examples/Mail/Example.java +++ b/examples/Mail/Example.java @@ -31,38 +31,38 @@ public static Mail buildKitchenSink() throws IOException { Mail mail = new Mail(); Email fromEmail = new Email(); - fromEmail.setName("Elmer Thomas"); - fromEmail.setEmail("dx@sendgrid.com"); + fromEmail.setName("Example User"); + fromEmail.setEmail("test@example.com"); mail.setFrom(fromEmail); mail.setSubject("Hello World from the SendGrid Java Library"); Personalization personalization = new Personalization(); Email to = new Email(); - to.setName("Elmer Thomas"); - to.setEmail("elmer.thomas@sendgrid.com"); + to.setName("Example User"); + to.setEmail("test1@example.com"); personalization.addTo(to); - to.setName("Elmer Thomas Alias"); - to.setEmail("elmer.thomas@gmail.com"); + to.setName("Example User"); + to.setEmail("test2@example.com"); personalization.addTo(to); Email cc = new Email(); - cc.setName("Matt Bernier"); - cc.setEmail("matt.bernier@sendgrid.com"); + cc.setName("Example User"); + cc.setEmail("test3@example.com"); personalization.addCc(cc); - cc.setName("Eric Shallock"); - cc.setEmail("eric.shallock@sendgrid.com"); + cc.setName("Example User"); + cc.setEmail("test4@example.com"); personalization.addCc(cc); Email bcc = new Email(); - bcc.setName("DX Matt Bernier"); - bcc.setEmail("dx+matt@sendgrid.com"); + bcc.setName("Example User"); + bcc.setEmail("test5@example.com"); personalization.addBcc(bcc); - bcc.setName("DX Eric Shallock"); - bcc.setEmail("dx+eric@sendgrid.com"); + bcc.setName("Example User"); + bcc.setEmail("test6@example.com"); personalization.addBcc(bcc); personalization.setSubject("Hello World from the Personalized SendGrid Java Library"); personalization.addHeader("X-Test", "test"); personalization.addHeader("X-Mock", "true"); - personalization.addSubstitution("%name%", "Tim"); + personalization.addSubstitution("%name%", "Example User"); personalization.addSubstitution("%city%", "Riverside"); personalization.addCustomArg("user_id", "343"); personalization.addCustomArg("type", "marketing"); @@ -71,31 +71,31 @@ public static Mail buildKitchenSink() throws IOException { Personalization personalization2 = new Personalization(); Email to2 = new Email(); - to2.setName("Elmer Thomas"); - to2.setEmail("elmer.thomas@sendgrid.com"); + to2.setName("Example User"); + to2.setEmail("test1@example.com"); personalization2.addTo(to2); - to2.setName("Elmer Thomas Alias"); - to2.setEmail("elmer.thomas@gmail.com"); + to2.setName("Example User"); + to2.setEmail("test2@example.com"); personalization2.addTo(to2); Email cc2 = new Email(); - cc2.setName("Matt Bernier"); - cc2.setEmail("matt.bernier@sendgrid.com"); + cc2.setName("Example User"); + cc2.setEmail("test3@example.com"); personalization2.addCc(cc2); - cc2.setName("Eric Shallock"); - cc2.setEmail("eric.shallock@sendgrid.com"); + cc2.setName("Example User"); + cc2.setEmail("test4@example.com"); personalization2.addCc(cc2); Email bcc2 = new Email(); - bcc2.setName("DX Matt Bernier"); - bcc2.setEmail("dx+matt@sendgrid.com"); + bcc2.setName("Example User"); + bcc2.setEmail("test5@example.com"); personalization2.addBcc(bcc2); - bcc2.setName("DX Eric Shallock"); - bcc2.setEmail("dx+eric@sendgrid.com"); + bcc2.setName("Example User"); + bcc2.setEmail("test6@example.com"); personalization2.addBcc(bcc2); personalization2.setSubject("Hello World from the Personalized SendGrid Java Library"); personalization2.addHeader("X-Test", "test"); personalization2.addHeader("X-Mock", "true"); - personalization2.addSubstitution("%name%", "Tim"); - personalization2.addSubstitution("%city%", "Riverside"); + personalization2.addSubstitution("%name%", "Example User"); + personalization2.addSubstitution("%city%", "Denver"); personalization2.addCustomArg("user_id", "343"); personalization2.addCustomArg("type", "marketing"); personalization2.setSendAt(1443636843); @@ -154,7 +154,7 @@ public static Mail buildKitchenSink() throws IOException { MailSettings mailSettings = new MailSettings(); BccSettings bccSettings = new BccSettings(); bccSettings.setEnable(true); - bccSettings.setEmail("dx+bcc@sendgrid.com"); + bccSettings.setEmail("test@example.com"); mailSettings.setBccSettings(bccSettings); Setting sandBoxMode = new Setting(); sandBoxMode.setEnable(true); @@ -200,8 +200,8 @@ public static Mail buildKitchenSink() throws IOException { mail.setTrackingSettings(trackingSettings); Email replyTo = new Email(); - replyTo.setName("Mr. Elmer Thomas"); - replyTo.setEmail("dx+reply@sendgrid.com"); + replyTo.setName("Example User"); + replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); return mail; @@ -209,12 +209,12 @@ public static Mail buildKitchenSink() throws IOException { // Minimum required to send an email public static Mail buildHelloEmail() throws IOException { - Email from = new Email("dx@sendgrid.com"); + Email from = new Email("test@example.com"); String subject = "Hello World from the SendGrid Java Library"; - Email to = new Email("elmer.thomas@sendgrid.com"); + Email to = new Email("test@example.com"); Content content = new Content("text/plain", "some text here"); Mail mail = new Mail(from, subject, to, content); - Email email = new Email("elmer.thomas+add_second_email@sendgrid.com"); + Email email = new Email("test2@example.com"); mail.personalization.get(0).addTo(email); return mail; @@ -222,8 +222,7 @@ public static Mail buildHelloEmail() throws IOException { public static void baselineExample() throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - //sg.addRequestHeader("X-Mock", "true"); - sg.setHost("3wyb2hp7emnqja6ys.stoplight-proxy.io"); + sg.addRequestHeader("X-Mock", "true"); Request request = new Request(); Mail helloWorld = buildHelloEmail(); @@ -243,8 +242,7 @@ public static void baselineExample() throws IOException { public static void kitchenSinkExample() throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - //sg.addRequestHeader("X-Mock", "true"); - sg.setHost("3wyb2hp7emnqja6ys.stoplight-proxy.io"); + sg.addRequestHeader("X-Mock", "true"); Request request = new Request(); Mail kitchenSink = buildKitchenSink(); diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 0801eff8..21f709c0 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -13,12 +13,12 @@ public void testHelloWorld() throws IOException { Mail mail = new Mail(); Email fromEmail = new Email(); - fromEmail.setEmail("dx@sendgrid.com"); + fromEmail.setEmail("test@example.com"); mail.setFrom(fromEmail); Personalization personalization = new Personalization(); Email to = new Email(); - to.setEmail("elmer.thomas@sendgrid.com"); + to.setEmail("test@example.com"); personalization.addTo(to); mail.addPersonalization(personalization); @@ -33,7 +33,7 @@ public void testHelloWorld() throws IOException { content.setValue("some text here"); mail.addContent(content); - Assert.assertEquals(mail.build(), "{\"from\":{\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"email\":\"elmer.thomas@sendgrid.com\"}]}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}]}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}]}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}]}"); } @Test @@ -41,39 +41,39 @@ public void testKitchenSink() throws IOException { Mail mail = new Mail(); Email fromEmail = new Email(); - fromEmail.setName("Elmer Thomas"); - fromEmail.setEmail("dx@sendgrid.com"); + fromEmail.setName("Example User"); + fromEmail.setEmail("test@example.com"); mail.setFrom(fromEmail); mail.setSubject("Hello World from the SendGrid Java Library"); Personalization personalization = new Personalization(); Email to = new Email(); - to.setName("Elmer Thomas"); - to.setEmail("elmer.thomas@sendgrid.com"); + to.setName("Example User"); + to.setEmail("test@example.com"); personalization.addTo(to); - to.setName("Elmer Thomas Alias"); - to.setEmail("elmer.thomas@gmail.com"); + to.setName("Example User"); + to.setEmail("test@example.com"); personalization.addTo(to); Email cc = new Email(); - cc.setName("Matt Bernier"); - cc.setEmail("matt.bernier@sendgrid.com"); + cc.setName("Example User"); + cc.setEmail("test@example.com"); personalization.addCc(cc); - cc.setName("Eric Shallock"); - cc.setEmail("eric.shallock@sendgrid.com"); + cc.setName("Example User"); + cc.setEmail("test@example.com"); personalization.addCc(cc); Email bcc = new Email(); - bcc.setName("DX Matt Bernier"); - bcc.setEmail("dx+matt@sendgrid.com"); + bcc.setName("Example User"); + bcc.setEmail("test@example.com"); personalization.addBcc(bcc); - bcc.setName("DX Eric Shallock"); - bcc.setEmail("dx+eric@sendgrid.com"); + bcc.setName("Example User"); + bcc.setEmail("test@example.com"); personalization.addBcc(bcc); personalization.setSubject("Hello World from the Personalized SendGrid Java Library"); personalization.addHeader("X-Test", "test"); personalization.addHeader("X-Mock", "true"); - personalization.addSubstitution("%name%", "Tim"); - personalization.addSubstitution("%city%", "Riverside"); + personalization.addSubstitution("%name%", "Example User"); + personalization.addSubstitution("%city%", "Denver"); personalization.addCustomArg("user_id", "343"); personalization.addCustomArg("type", "marketing"); personalization.setSendAt(1443636843); @@ -81,31 +81,31 @@ public void testKitchenSink() throws IOException { Personalization personalization2 = new Personalization(); Email to2 = new Email(); - to2.setName("Elmer Thomas"); - to2.setEmail("elmer.thomas@sendgrid.com"); + to2.setName("Example User"); + to2.setEmail("test@example.com"); personalization2.addTo(to2); - to2.setName("Elmer Thomas Alias"); - to2.setEmail("elmer.thomas@gmail.com"); + to2.setName("Example User"); + to2.setEmail("test@example.com"); personalization2.addTo(to2); Email cc2 = new Email(); - cc2.setName("Matt Bernier"); - cc2.setEmail("matt.bernier@sendgrid.com"); + cc2.setName("Example User"); + cc2.setEmail("test@example.com"); personalization2.addCc(cc2); - cc2.setName("Eric Shallock"); - cc2.setEmail("eric.shallock@sendgrid.com"); + cc2.setName("Example User"); + cc2.setEmail("test@example.com"); personalization2.addCc(cc2); Email bcc2 = new Email(); - bcc2.setName("DX Matt Bernier"); - bcc2.setEmail("dx+matt@sendgrid.com"); + bcc2.setName("Example User"); + bcc2.setEmail("test@example.com"); personalization2.addBcc(bcc2); - bcc2.setName("DX Eric Shallock"); - bcc2.setEmail("dx+eric@sendgrid.com"); + bcc2.setName("Example User"); + bcc2.setEmail("test@example.com"); personalization2.addBcc(bcc2); personalization2.setSubject("Hello World from the Personalized SendGrid Java Library"); personalization2.addHeader("X-Test", "test"); personalization2.addHeader("X-Mock", "true"); - personalization2.addSubstitution("%name%", "Tim"); - personalization2.addSubstitution("%city%", "Riverside"); + personalization2.addSubstitution("%name%", "Example User"); + personalization2.addSubstitution("%city%", "Denver"); personalization2.addCustomArg("user_id", "343"); personalization2.addCustomArg("type", "marketing"); personalization2.setSendAt(1443636843); @@ -164,7 +164,7 @@ public void testKitchenSink() throws IOException { MailSettings mailSettings = new MailSettings(); BccSettings bccSettings = new BccSettings(); bccSettings.setEnable(true); - bccSettings.setEmail("dx+bcc@sendgrid.com"); + bccSettings.setEmail("test@example.com"); mailSettings.setBccSettings(bccSettings); Setting sandBoxMode = new Setting(); sandBoxMode.setEnable(true); @@ -210,10 +210,10 @@ public void testKitchenSink() throws IOException { mail.setTrackingSettings(trackingSettings); Email replyTo = new Email(); - replyTo.setName("Mr. Elmer Thomas"); - replyTo.setEmail("dx+reply@sendgrid.com"); + replyTo.setName("Example User"); + replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Elmer Thomas\",\"email\":\"dx@sendgrid.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Elmer Thomas\",\"email\":\"elmer.thomas@sendgrid.com\"},{\"name\":\"Elmer Thomas Alias\",\"email\":\"elmer.thomas@gmail.com\"}],\"cc\":[{\"name\":\"Matt Bernier\",\"email\":\"matt.bernier@sendgrid.com\"},{\"name\":\"Eric Shallock\",\"email\":\"eric.shallock@sendgrid.com\"}],\"bcc\":[{\"name\":\"DX Matt Bernier\",\"email\":\"dx+matt@sendgrid.com\"},{\"name\":\"DX Eric Shallock\",\"email\":\"dx+eric@sendgrid.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Riverside\",\"%name%\":\"Tim\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"dx+bcc@sendgrid.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Mr. Elmer Thomas\",\"email\":\"dx+reply@sendgrid.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } } \ No newline at end of file From 1e2b3802c2ef7855f18e124f35221a35e0575ca4 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 20 May 2016 09:05:05 -0700 Subject: [PATCH 016/439] Update README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index e1729593..6e845a2d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ +# Special Announcement + +We have released a [v3 beta branch](https://github.com/sendgrid/sendgrid-java/tree/v3beta) for this library that supports our new v3 Mail Send endpoint which is in open beta. The v3/mail/send/beta endpoint is not a production endpoint, so you should not integrate with it for your production email sending. However, when we make this an officially released feature it will be available at v3/mail//send. + +Please try it out and let us know what you think about the endpoint and the library in the [issues area of this repo](https://github.com/sendgrid/sendgrid-java/issues]), all of your feedback will be taken into account to influence the endpoint and this library. + +Beginning with v3/mail/send/beta, the new version of our library will only support v3 endpoints. Once this endpoint is out of beta, we will update the endpoint, removing the “/beta” from the URI. At this point, the v3 beta branch will be merged to master and will be our official library going forward. This means that we will no longer formally support the v2 mail.send.json endpoint in any of our libraries. + +So long as you are not automatically pulling new versions of the library into your production code base, your integration will not break regardless of which endpoint you’re using. By the way, don't pull new versions into your production code base, because breaking changes break things. + +The /api/mail.send.json endpoint, known as v2 mail send, is NOT going away. It will continue to work as it always has, happily sending your emails along as if nothing happened. + # SendGrid-Java This Java module allows you to quickly and easily send emails through SendGrid using Java. From 563e2840ba7b05f9a53a78a756e6544840d45c9c Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 20 May 2016 09:20:33 -0700 Subject: [PATCH 017/439] Update to comply with SendGrid's Open Source policy --- CONTRIBUTING.md | 112 ++++++++++++++++++++++-------------------------- LICENSE.txt | 2 +- README.md | 68 ++++++++++++++--------------- 3 files changed, 87 insertions(+), 95 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 65eab683..7e26a0aa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,14 +1,28 @@ -Hello! Thank you for choosing to help contribute to the sendgrid-java library. There are many ways you can contribute and help is always welcome. - +Hello! Thank you for choosing to help contribute to one of the SendGrid open source libraries. There are many ways you can contribute and help is always welcome. We simply ask that you follow the following contribution policies. + +- [CLAs and CCLAs](#cla) +- [Roadmap & Milestones](#roadmap) +- [Feature Request](#feature_request) +- [Submit a Bug Report](#submit_a_bug_report) +- [Improvements to the Codebase](#improvements_to_the_codebase) +- [Understanding the Code Base](#understanding_the_codebase) +- [Testing](#testing) +- [Style Guidelines & Naming Conventions](#style_guidelines_and_naming_conventions) +- [Creating a Pull Request](#creating_a_pull_request) + + We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. -* [Feature Request](#feature_request) -* [Submit a Bug Report](#submit_a_bug_report) -* [Improvements to the Codebase](#improvements_to_the_codebase) -* [Understanding the Code Base](#understanding_the_codebase) -* [Testing](#testing) -* [Style Guidelines & Naming Conventions](#style_guidelines_and_naming_conventions) -* [Creating a Pull Request](#creating_a_pull_request) + +## CLAs and CCLAs + +Before you get started, SendGrid requires that a SendGrid Contributor License Agreement (CLA) or a SendGrid Company Contributor Licensing Agreement (CCLA) be filled out by every contributor to a SendGrid open source project. + +Our goal with the CLA and CCLA is to clarify the rights of our contributors and reduce other risks arising from inappropriate contributions. The CLA also clarifies the rights SendGrid holds in each contribution and helps to avoid misunderstandings over what rights each contributor is required to grant to SendGrid when making a contribution. In this way the CLA and CCLA encourage broad participation by our open source community and help us build strong open source projects, free from any individual contributor withholding or revoking rights to any contribution. + +SendGrid does not merge a pull request made against a SendGrid open source project until that pull request is associated with a signed CLA (or CCLA). Copies of the CLA and CCLA are available [here](https://drive.google.com/a/sendgrid.com/file/d/0B0PlcM9qA91LN2VEUTJWU2RIVXc/view). + +You may submit your completed [CLA or CCLA](https://drive.google.com/a/sendgrid.com/file/d/0B0PlcM9qA91LN2VEUTJWU2RIVXc/view) to SendGrid at [dx@sendgrid.com](mailto:dx@sendgrid.com). SendGrid will then confirm you are ready to begin making contributions. There are a few ways to contribute, which we'll enumerate below: @@ -37,87 +51,63 @@ Before you decide to create a new issue, please try the following: ### Please use our Bug Report Template -In order to make the process easier, we've included a sample bug report template (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. - -``` -Short and descriptive example bug report title - -#### Issue Summary - -A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. Please feel free to include screenshots, screencasts, code examples. - - -#### Steps to Reproduce - -1. This is the first step -2. This is the second step -3. Further steps, etc. - -Any other information you want to share that is relevant to the issue being reported. Especially, why do you consider this to be a bug? What do you expect to happen instead? - -#### Technical details: - -* sendgrid-java Version: master (latest commit: 2cb34372ef0f31352f7c90015a45e1200cb849da) -* Java Version: 1.8 -``` +In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. ## Improvements to the Codebase -We welcome direct contributions to the sendgrid-python code base. Thank you! +We welcome direct contributions to the sendgrid-java code base. Thank you! ### Development Environment ### -#### Install and run locally #### - -### Creating a Helper ### +#### Install and Run Locally #### ##### Prerequisites ##### -* Java 1.7 through 1.8 -* java-http-client +- Java 1.7 through 1.8 +- [java-http-client](https://github.com/sendgrid/java-http-client) ##### Initial setup: ##### -``` +```bash git clone https://github.com/sendgrid/sendgrid-java.git cd sendgrid-java ``` -##### Execute: ##### +## Environment Variables -See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples) to get started quickly. +First, get your free SendGrid account [here](https://sendgrid.com/free?source=sendgrid-java). -You will need to setup the following environment to use the SendGrid example: +Next, update your environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys). -``` +```bash echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env echo "sendgrid.env" >> .gitignore source ./sendgrid.env +./gradlew build ``` - -## Understanding the Code Base - -**/examples** +##### Execute: ##### -Working examples that demonstrate usage. To run the example code +See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/v3beta/examples) to get started quickly. ```bash cd examples javac -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example ``` -To build the project: -```bash -./gradlew build -``` + +## Understanding the Code Base + +**/examples** + +Working examples that demonstrate usage. -**/tests** +**/src/test** -Tests for HTTP client. +Unit and integration tests. -**/sendgrid** +**/src/main** The interface to the SendGrid API. @@ -126,9 +116,9 @@ The interface to the SendGrid API. All PRs require passing tests before the PR will be reviewed. -All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tree/v2beta/tests) directory. +All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tree/v3beta/src/test/java/com/sendgrid) directory. -For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/v2beta/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. +For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/v3beta/src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. ```bash ./gradlew test -i @@ -139,7 +129,9 @@ For the purposes of contributing to this repo, please update the [`SendGridTest. Generally, we follow the style guidelines as suggested by the official language. However, we ask that you conform to the styles that already exist in the library. If you wish to deviate, please explain your reasoning. -Please run your code through [FindBugs](http://findbugs.sourceforge.net/) and [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](http://checkstyle.sourceforge.net/reports/google-java-style.html). +Please run your code through: +- [FindBugs](http://findbugs.sourceforge.net/) +- [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](http://checkstyle.sourceforge.net/reports/google-java-style.html). ## Creating a Pull Request @@ -150,7 +142,7 @@ Please run your code through [FindBugs](http://findbugs.sourceforge.net/) and [C # Clone your fork of the repo into the current directory git clone https://github.com/sendgrid/sendgrid-java # Navigate to the newly cloned directory - cd sendgrid-java + cd sendgrid-python # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/sendgrid/sendgrid-java ``` @@ -194,4 +186,4 @@ Please run your code through [FindBugs](http://findbugs.sourceforge.net/) and [C 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. -If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. +If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt index a5e93d27..3e9812c6 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016 SendGrid +Copyright (c) 2013-2016 SendGrid Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 1135578e..d0a3d4c0 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ **This library allows you to quickly and easily use the SendGrid Web API via Java.** +# Announcements + **NOTE: The `/mail/send/beta` endpoint is currently in beta! Since this is not a general release, we do not recommend POSTing production level traffic through this endpoint or integrating your production servers with this endpoint. @@ -10,6 +12,24 @@ When this endpoint is ready for general release, your code will require an updat By using this endpoint, you accept that you may encounter bugs and that the endpoint may be taken down for maintenance at any time. We cannot guarantee the continued availability of this beta endpoint. We hope that you like this new endpoint and we appreciate any [feedback](dx+mail-beta@sendgrid.com) that you can send our way.** +**BREAKING CHANGE as of XXXX.XX.XX** + +Version `3.0.0` is a breaking change for the entire library. + +Version 3.0.0 brings you full support for all Web API v3 endpoints. We +have the following resources to get you started quickly: + +- [SendGrid + Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) +- [Usage + Documentation](https://github.com/sendgrid/sendgrid-java/tree/v2beta/USAGE.md) +- [Example + Code](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples) + +Thank you for your continued support! + +All updates to this library is documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CHANGELOG.md). + # Installation ## Environment Variables @@ -99,6 +119,7 @@ import com.sendgrid.*; ## Dependencies +- The SendGrid Service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java)) - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) # Quick Start @@ -151,52 +172,31 @@ try { } ``` -# Announcements - -**BREAKING CHANGE as of XXXX.XX.XX** - -Version `3.0.0` is a breaking change for the entire library. +# Usage -Version 3.0.0 brings you full support for all Web API v3 endpoints. We -have the following resources to get you started quickly: - -- [SendGrid - Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) -- [Usage - Documentation](https://github.com/sendgrid/sendgrid-java/tree/v2beta/USAGE.md) -- [Example - Code](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples) - -Thank you for your continued support! +- [SendGrid Docs](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) +- [Example Code](https://github.com/sendgrid/sendgrid-java/tree/v3beta/examples) ## Roadmap -[Milestones](https://github.com/sendgrid/sendgrid-java/milestones) +If you are intersted in the future direction of this project, please take a look at our [milestones](https://github.com/sendgrid/sendgrid-java/milestones). We would love to hear your feedback. ## How to Contribute -We encourage contribution to our libraries, please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/tree/v2beta/CONTRIBUTING.md) guide for details. - -* [Feature Request](https://github.com/sendgrid/sendgrid-java/tree/v2beta/CONTRIBUTING.md#feature_request) -* [Bug Reports](https://github.com/sendgrid/sendgrid-java/tree/v2beta/CONTRIBUTING.md#submit_a_bug_report) -* [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/tree/v2beta/CONTRIBUTING.md#improvements_to_the_codebase) - -## Usage +We encourage contribution to our libraries, please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CONTRIBUTING.md) guide for details. -- [SendGrid Docs](https://sendgrid.com/docs/API_Reference/index.html) -- [v3 Web API](https://github.com/sendgrid/sendgrid-java/tree/v2beta/USAGE.md) -- [Example Code](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples) -- [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/v2beta/src/main/java/com/sendgrid/helpers/mail/README.md) +Quick links: -## Unsupported Libraries - -- [Official and Unsupported SendGrid Libraries](https://sendgrid.com/docs/Integrate/libraries.html) +- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CONTRIBUTING.md#feature_request) +- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CONTRIBUTING.md#submit_a_bug_report) +- [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CONTRIBUTING.md#cla) +- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CONTRIBUTING.md#improvements_to_the_codebase) # About -![SendGrid Logo] -(https://assets3.sendgrid.com/mkt/assets/logos_brands/small/sglogo_2015_blue-9c87423c2ff2ff393ebce1ab3bd018a4.png) - sendgrid-java is guided and supported by the SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. + +![SendGrid Logo] +(https://assets3.sendgrid.com/mkt/assets/logos_brands/small/sglogo_2015_blue-9c87423c2ff2ff393ebce1ab3bd018a4.png) \ No newline at end of file From 71f7a4a230970ba755d6494c41779c4b676c5aee Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 20 May 2016 09:30:47 -0700 Subject: [PATCH 018/439] Revert "Fixing a typo in the README" --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 001d0f51..60adf463 100644 --- a/README.md +++ b/README.md @@ -290,10 +290,10 @@ JSONObject subs = header.getSubstitutions(); ### [Unique Arguments](http://sendgrid.com/docs/API_Reference/SMTP_API/unique_arguments.html) -#### addUniqueArg +#### addUniqueAarg ```java -email.addUniqueArg("key", "value"); +email.addUniqueAarg("key", "value"); // or Map map = new HashMap(); map.put("unique", "value"); From 1ce3a667bbbe9d1e728dad0b0b769ef1159c1aac Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 27 May 2016 18:40:54 -0700 Subject: [PATCH 019/439] Test all v3 Web API endpoints --- src/test/java/com/sendgrid/SendGridTest.java | 4199 +++++++++++++++++- 1 file changed, 4137 insertions(+), 62 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 5b83c12b..ea127700 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -14,7 +14,7 @@ public class SendGridTest { private final String SENDGRID_API_KEY = ""; - + public Map buildDefaultHeaders() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); Map requestHeaders = new HashMap(); @@ -24,7 +24,7 @@ public Map buildDefaultHeaders() { requestHeaders.put("User-agent", USER_AGENT); return requestHeaders; } - + @Test public void testInitialization() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); @@ -33,112 +33,4187 @@ public void testInitialization() { Map requestHeaders = buildDefaultHeaders(); Assert.assertEquals(sg.getRequestHeaders(), requestHeaders); } - + @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); Assert.assertEquals(sg.getLibraryVersion(), "3.0.0"); } - + @Test public void testVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); sg.setVersion("v4"); Assert.assertEquals(sg.getVersion(), "v4"); } - + @Test public void testRequestHeaders() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); Map requestHeaders = buildDefaultHeaders(); - + sg.addRequestHeader("Test", "one"); requestHeaders.put("Test", "one"); Assert.assertEquals(sg.getRequestHeaders(), requestHeaders); - + sg.removeRequestHeader("Test"); requestHeaders.remove("Test"); Assert.assertEquals(sg.getRequestHeaders(), requestHeaders); } - + @Test public void testHost() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); sg.setHost("api.new.com"); Assert.assertEquals(sg.getHost(), "api.new.com"); } - + + + @Test + public void test_access_settings_activity_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "access_settings/activity/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_access_settings_whitelist_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "access_settings/whitelist/"; + request.requestBody = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_access_settings_whitelist_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "access_settings/whitelist/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_access_settings_whitelist_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "access_settings/whitelist/"; + request.requestBody = "{\"ids\":[1,2,3]}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_access_settings_whitelist__rule_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "access_settings/whitelist/{rule_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_access_settings_whitelist__rule_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "access_settings/whitelist/{rule_id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_api_keys_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "api_keys/"; + request.requestBody = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_api_keys_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "api_keys/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_api_keys__api_key_id__put() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "api_keys/{api_key_id}/"; + request.requestBody = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_api_keys__api_key_id__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "api_keys/{api_key_id}/"; + request.requestBody = "{\"name\":\"A New Hope\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_api_keys__api_key_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "api_keys/{api_key_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_api_keys__api_key_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "api_keys/{api_key_id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_asm_groups_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/groups/"; + request.requestBody = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_asm_groups_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/groups/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_asm_groups__group_id__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "asm/groups/{group_id}/"; + request.requestBody = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_asm_groups__group_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/groups/{group_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_asm_groups__group_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "asm/groups/{group_id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_asm_groups__group_id__suppressions_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/groups/{group_id}/suppressions/"; + request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_asm_groups__group_id__suppressions_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/groups/{group_id}/suppressions/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_asm_groups__group_id__suppressions__email__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "asm/groups/{group_id}/suppressions/{email}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_asm_suppressions_global_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/suppressions/global/"; + request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_asm_suppressions_global__email__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/suppressions/global/{email}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_asm_suppressions_global__email__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "asm/suppressions/global/{email}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_browsers_stats_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "browsers/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("browsers", "test_string"); + queryParams.put("limit", "test_string"); + queryParams.put("offset", "test_string"); + queryParams.put("start_date", "2016-01-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_campaigns_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/"; + request.requestBody = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + @Test - public void testApiGet() throws IOException { - MockSendGrid sg = new MockSendGrid(SENDGRID_API_KEY); + public void test_campaigns_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + Request request = new Request(); request.method = Method.GET; - request.endpoint = "api_keys"; + request.endpoint = "campaigns/"; Map queryParams = new HashMap(); - queryParams.put("limit", "100"); + queryParams.put("limit", "0"); queryParams.put("offset", "0"); request.queryParams = queryParams; - sg.api(request); - Request testRequest = sg.getRequest(); - Assert.assertEquals(request.queryParams, testRequest.queryParams); - Assert.assertEquals(request.method, testRequest.method); - Assert.assertEquals("/v3/" + request.endpoint, testRequest.endpoint); - Map requestHeaders = buildDefaultHeaders(); - Assert.assertEquals(requestHeaders, testRequest.requestHeaders); + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_campaigns__campaign_id__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "campaigns/{campaign_id}/"; + request.requestBody = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_campaigns__campaign_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "campaigns/{campaign_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_campaigns__campaign_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "campaigns/{campaign_id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_campaigns__campaign_id__schedules_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.requestBody = "{\"send_at\":1489451436}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); } - + @Test - public void testApiPostPutPatch() throws IOException { - MockSendGrid sg = new MockSendGrid(SENDGRID_API_KEY); + public void test_campaigns__campaign_id__schedules_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + Request request = new Request(); request.method = Method.POST; - request.endpoint = "api_keys"; - request.requestBody = "{\"test\":\"request_body\"}"; - sg.api(request); - Request testRequest = sg.getRequest(); - Assert.assertEquals(request.method, testRequest.method); - Assert.assertEquals("/v3/" + request.endpoint, testRequest.endpoint); - Assert.assertEquals(request.requestBody, testRequest.requestBody); - Map requestHeaders = buildDefaultHeaders(); - Assert.assertEquals(requestHeaders, testRequest.requestHeaders); + request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.requestBody = "{\"send_at\":1489771528}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_campaigns__campaign_id__schedules_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "campaigns/{campaign_id}/schedules/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); } - - @Test - public void testApiDelete() throws IOException { - MockSendGrid sg = new MockSendGrid(SENDGRID_API_KEY); + + @Test + public void test_campaigns__campaign_id__schedules_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "api_keys"; - sg.api(request); - Request testRequest = sg.getRequest(); - Assert.assertEquals(request.method, testRequest.method); - Assert.assertEquals("/v3/" + request.endpoint, testRequest.endpoint); - Map requestHeaders = buildDefaultHeaders(); - Assert.assertEquals(requestHeaders, testRequest.requestHeaders); + request.endpoint = "campaigns/{campaign_id}/schedules/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_campaigns__campaign_id__schedules_now_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/{campaign_id}/schedules/now/"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); } @Test - public void testBuildGradleVersion() throws IOException { - try { - SendGrid sg = new SendGrid(SENDGRID_API_KEY); - BufferedReader br = new BufferedReader(new FileReader("./build.gradle")); - String line = br.readLine(); - String regex = "version\\s*=\\s*'" + sg.getLibraryVersion() + "'"; + public void test_campaigns__campaign_id__schedules_test_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/{campaign_id}/schedules/test/"; + request.requestBody = "{\"to\":\"your.email@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } - while (line != null) { - if (line.matches(regex)) { - br.close(); - return; - } - line = br.readLine(); - } - br.close(); - Assert.assertTrue("build.gradle version does not match", false); - } catch (FileNotFoundException ex) { - throw ex; - } catch (IOException ex) { - throw ex; + @Test + public void test_categories_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); } + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "categories/"; + Map queryParams = new HashMap(); + queryParams.put("category", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); } + + @Test + public void test_categories_stats_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "categories/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("categories", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_categories_stats_sums_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "categories/stats/sums/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_clients_stats_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "clients/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_clients__client_type__stats_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "clients/{client_type}/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_custom_fields_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/custom_fields/"; + request.requestBody = "{\"type\":\"text\",\"name\":\"pet\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_contactdb_custom_fields_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/custom_fields/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_custom_fields__custom_field_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_custom_fields__custom_field_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "202"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + Response response = sg.api(request); + Assert.assertEquals(202, response.statusCode); + } + + @Test + public void test_contactdb_lists_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/lists/"; + request.requestBody = "{\"name\":\"your list name\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_contactdb_lists_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/lists/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_lists_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/lists/"; + request.requestBody = "[1,2,3,4]"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_contactdb_lists__list_id__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "contactdb/lists/{list_id}/"; + request.requestBody = "{\"name\":\"newlistname\"}"; + Map queryParams = new HashMap(); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_lists__list_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/lists/{list_id}/"; + Map queryParams = new HashMap(); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_lists__list_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "202"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/lists/{list_id}/"; + Map queryParams = new HashMap(); + queryParams.put("delete_contacts", "true"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(202, response.statusCode); + } + + @Test + public void test_contactdb_lists__list_id__recipients_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/lists/{list_id}/recipients/"; + request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_contactdb_lists__list_id__recipients_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/lists/{list_id}/recipients/"; + Map queryParams = new HashMap(); + queryParams.put("page", "1"); + queryParams.put("page_size", "1"); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_lists__list_id__recipients__recipient_id__post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_contactdb_lists__list_id__recipients__recipient_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + Map queryParams = new HashMap(); + queryParams.put("recipient_id", "0"); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_contactdb_recipients_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "contactdb/recipients/"; + request.requestBody = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_contactdb_recipients_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/recipients/"; + request.requestBody = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_contactdb_recipients_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/"; + Map queryParams = new HashMap(); + queryParams.put("page", "1"); + queryParams.put("page_size", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_recipients_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/recipients/"; + request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_recipients_billable_count_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/billable_count/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_recipients_count_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/count/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_recipients_search_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/search/"; + Map queryParams = new HashMap(); + queryParams.put("{field_name}", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_recipients__recipient_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/{recipient_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_recipients__recipient_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/recipients/{recipient_id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_contactdb_recipients__recipient_id__lists_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/{recipient_id}/lists/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_reserved_fields_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/reserved_fields/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_segments_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/segments/"; + request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_segments_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/segments/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_segments__segment_id__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "contactdb/segments/{segment_id}/"; + request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; + Map queryParams = new HashMap(); + queryParams.put("segment_id", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_segments__segment_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/segments/{segment_id}/"; + Map queryParams = new HashMap(); + queryParams.put("segment_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_contactdb_segments__segment_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/segments/{segment_id}/"; + Map queryParams = new HashMap(); + queryParams.put("delete_contacts", "true"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_contactdb_segments__segment_id__recipients_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/segments/{segment_id}/recipients/"; + Map queryParams = new HashMap(); + queryParams.put("page", "1"); + queryParams.put("page_size", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_devices_stats_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "devices/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_geo_stats_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "geo/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("country", "US"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_ips_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/"; + Map queryParams = new HashMap(); + queryParams.put("subuser", "test_string"); + queryParams.put("ip", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("exclude_whitelabels", "true"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_ips_assigned_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/assigned/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_ips_pools_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "ips/pools/"; + request.requestBody = "{\"name\":\"marketing\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_ips_pools_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/pools/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_ips_pools__pool_name__put() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "ips/pools/{pool_name}/"; + request.requestBody = "{\"name\":\"new_pool_name\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_ips_pools__pool_name__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/pools/{pool_name}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_ips_pools__pool_name__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "ips/pools/{pool_name}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_ips_pools__pool_name__ips_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "ips/pools/{pool_name}/ips/"; + request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "ips/pools/{pool_name}/ips/{ip}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_ips_warmup_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "ips/warmup/"; + request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_ips_warmup_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/warmup/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_ips_warmup__ip_address__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/warmup/{ip_address}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_ips_warmup__ip_address__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "ips/warmup/{ip_address}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_ips__ip_address__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/{ip_address}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_batch_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "mail/batch/"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_mail_batch__batch_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail/batch/{batch_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_send_beta_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "202"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "mail/send/beta/"; + request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + Response response = sg.api(request); + Assert.assertEquals(202, response.statusCode); + } + + @Test + public void test_mail_settings_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_address_whitelist_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/address_whitelist/"; + request.requestBody = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_address_whitelist_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/address_whitelist/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_bcc_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/bcc/"; + request.requestBody = "{\"enabled\":false,\"email\":\"email@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_bcc_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/bcc/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_bounce_purge_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/bounce_purge/"; + request.requestBody = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_bounce_purge_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/bounce_purge/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_footer_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/footer/"; + request.requestBody = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_footer_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/footer/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_forward_bounce_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/forward_bounce/"; + request.requestBody = "{\"enabled\":true,\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_forward_bounce_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/forward_bounce/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_forward_spam_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/forward_spam/"; + request.requestBody = "{\"enabled\":false,\"email\":\"\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_forward_spam_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/forward_spam/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_plain_content_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/plain_content/"; + request.requestBody = "{\"enabled\":false}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_plain_content_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/plain_content/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_spam_check_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/spam_check/"; + request.requestBody = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_spam_check_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/spam_check/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_template_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/template/"; + request.requestBody = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mail_settings_template_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/template/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_mailbox_providers_stats_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mailbox_providers/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("mailbox_providers", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_partner_settings_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "partner_settings/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_partner_settings_new_relic_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "partner_settings/new_relic/"; + request.requestBody = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_partner_settings_new_relic_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "partner_settings/new_relic/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_scopes_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "scopes/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_stats_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "subusers/"; + request.requestBody = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + queryParams.put("limit", "0"); + queryParams.put("offset", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers_reputations_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/reputations/"; + Map queryParams = new HashMap(); + queryParams.put("usernames", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers_stats_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("subusers", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers_stats_monthly_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/stats/monthly/"; + Map queryParams = new HashMap(); + queryParams.put("subuser", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("date", "test_string"); + queryParams.put("sort_by_direction", "asc"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers_stats_sums_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/stats/sums/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers__subuser_name__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "subusers/{subuser_name}/"; + request.requestBody = "{\"disabled\":false}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_subusers__subuser_name__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "subusers/{subuser_name}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_subusers__subuser_name__ips_put() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "subusers/{subuser_name}/ips/"; + request.requestBody = "[\"127.0.0.1\"]"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers__subuser_name__monitor_put() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "subusers/{subuser_name}/monitor/"; + request.requestBody = "{\"frequency\":500,\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers__subuser_name__monitor_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "subusers/{subuser_name}/monitor/"; + request.requestBody = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers__subuser_name__monitor_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/{subuser_name}/monitor/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_subusers__subuser_name__monitor_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "subusers/{subuser_name}/monitor/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_subusers__subuser_name__stats_monthly_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/{subuser_name}/stats/monthly/"; + Map queryParams = new HashMap(); + queryParams.put("date", "test_string"); + queryParams.put("sort_by_direction", "asc"); + queryParams.put("limit", "0"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_suppression_blocks_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/blocks/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_suppression_blocks_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/blocks/"; + request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_suppression_blocks__email__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/blocks/{email}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_suppression_blocks__email__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/blocks/{email}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_suppression_bounces_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/bounces/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "0"); + queryParams.put("end_time", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_suppression_bounces_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/bounces/"; + request.requestBody = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_suppression_bounces__email__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/bounces/{email}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_suppression_bounces__email__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/bounces/{email}/"; + Map queryParams = new HashMap(); + queryParams.put("email_address", "example@example.com"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_suppression_invalid_emails_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/invalid_emails/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_suppression_invalid_emails_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/invalid_emails/"; + request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_suppression_invalid_emails__email__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/invalid_emails/{email}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_suppression_invalid_emails__email__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/invalid_emails/{email}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_suppression_spam_report__email__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/spam_report/{email}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_suppression_spam_report__email__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/spam_report/{email}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_suppression_spam_reports_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/spam_reports/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_suppression_spam_reports_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/spam_reports/"; + request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_suppression_unsubscribes_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/unsubscribes/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_templates_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "templates/"; + request.requestBody = "{\"name\":\"example_name\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_templates_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "templates/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_templates__template_id__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "templates/{template_id}/"; + request.requestBody = "{\"name\":\"new_example_name\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_templates__template_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "templates/{template_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_templates__template_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "templates/{template_id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_templates__template_id__versions_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "templates/{template_id}/versions/"; + request.requestBody = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_templates__template_id__versions__version_id__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.requestBody = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_templates__template_id__versions__version_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "templates/{template_id}/versions/{version_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_templates__template_id__versions__version_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "templates/{template_id}/versions/{version_id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_templates__template_id__versions__version_id__activate_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "templates/{template_id}/versions/{version_id}/activate/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_tracking_settings_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_tracking_settings_click_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/click/"; + request.requestBody = "{\"enabled\":true}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_tracking_settings_click_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/click/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_tracking_settings_google_analytics_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/google_analytics/"; + request.requestBody = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_tracking_settings_google_analytics_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/google_analytics/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_tracking_settings_open_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/open/"; + request.requestBody = "{\"enabled\":true}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_tracking_settings_open_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/open/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_tracking_settings_subscription_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/subscription/"; + request.requestBody = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_tracking_settings_subscription_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/subscription/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_account_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/account/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_credits_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/credits/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_email_put() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "user/email/"; + request.requestBody = "{\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_email_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/email/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_password_put() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "user/password/"; + request.requestBody = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_profile_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/profile/"; + request.requestBody = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_profile_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/profile/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_scheduled_sends_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "user/scheduled_sends/"; + request.requestBody = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_user_scheduled_sends_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/scheduled_sends/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_scheduled_sends__batch_id__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.requestBody = "{\"status\":\"pause\"}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_user_scheduled_sends__batch_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/scheduled_sends/{batch_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_scheduled_sends__batch_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "user/scheduled_sends/{batch_id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_user_settings_enforced_tls_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/settings/enforced_tls/"; + request.requestBody = "{\"require_tls\":true,\"require_valid_cert\":false}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_settings_enforced_tls_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/settings/enforced_tls/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_username_put() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "user/username/"; + request.requestBody = "{\"username\":\"test_username\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_username_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/username/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_webhooks_event_settings_patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/webhooks/event/settings/"; + request.requestBody = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_webhooks_event_settings_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/event/settings/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_webhooks_event_test_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "user/webhooks/event/test/"; + request.requestBody = "{\"url\":\"url\"}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_user_webhooks_parse_settings_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/parse/settings/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_webhooks_parse_stats_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/parse/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "test_string"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_domains_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/"; + request.requestBody = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_whitelabel_domains_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + queryParams.put("domain", "test_string"); + queryParams.put("exclude_subusers", "true"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_domains_default_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/default/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_domains_subuser_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/subuser/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_domains_subuser_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/domains/subuser/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_whitelabel_domains__domain_id__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "whitelabel/domains/{domain_id}/"; + request.requestBody = "{\"default\":false,\"custom_spf\":true}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_domains__domain_id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/{domain_id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_domains__domain_id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/domains/{domain_id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_whitelabel_domains__domain_id__subuser_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/{domain_id}/subuser/"; + request.requestBody = "{\"username\":\"jane@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_whitelabel_domains__id__ips_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/{id}/ips/"; + request.requestBody = "{\"ip\":\"192.168.0.1\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/domains/{id}/ips/{ip}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_domains__id__validate_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/{id}/validate/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_ips_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/ips/"; + request.requestBody = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_whitelabel_ips_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/ips/"; + Map queryParams = new HashMap(); + queryParams.put("ip", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_ips__id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/ips/{id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_ips__id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/ips/{id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_whitelabel_ips__id__validate_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/ips/{id}/validate/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_links_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "201"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/links/"; + request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_whitelabel_links_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_links_default_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/default/"; + Map queryParams = new HashMap(); + queryParams.put("domain", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_links_subuser_get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/subuser/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_links_subuser_delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/links/subuser/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_whitelabel_links__id__patch() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "whitelabel/links/{id}/"; + request.requestBody = "{\"default\":true}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_links__id__get() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/{id}/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_links__id__delete() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "204"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/links/{id}/"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_whitelabel_links__id__validate_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/links/{id}/validate/"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_whitelabel_links__link_id__subuser_post() throws IOException { + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + sg.addRequestHeader("X-Mock", "200"); + if(System.getenv("TRAVIS") == "true") { + sg.setHost("MOCK_HOST"); + } else { + //sg.setHost("localhost:4010"); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + } + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/links/{link_id}/subuser/"; + request.requestBody = "{\"username\":\"jane@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + } From 18fcebd0c8289853c7b11b4ebba5acab16c082d4 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 27 May 2016 18:42:17 -0700 Subject: [PATCH 020/439] Fixed local tests --- src/test/java/com/sendgrid/SendGridTest.java | 639 +++++++------------ 1 file changed, 213 insertions(+), 426 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index ea127700..c964d2e6 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -76,8 +76,7 @@ public void test_access_settings_activity_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -97,8 +96,7 @@ public void test_access_settings_whitelist_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -116,8 +114,7 @@ public void test_access_settings_whitelist_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -134,8 +131,7 @@ public void test_access_settings_whitelist_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -153,8 +149,7 @@ public void test_access_settings_whitelist__rule_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -171,8 +166,7 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -189,8 +183,7 @@ public void test_api_keys_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -208,8 +201,7 @@ public void test_api_keys_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -226,8 +218,7 @@ public void test_api_keys__api_key_id__put() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -245,8 +236,7 @@ public void test_api_keys__api_key_id__patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -264,8 +254,7 @@ public void test_api_keys__api_key_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -282,8 +271,7 @@ public void test_api_keys__api_key_id__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -300,8 +288,7 @@ public void test_asm_groups_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -319,8 +306,7 @@ public void test_asm_groups_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -337,8 +323,7 @@ public void test_asm_groups__group_id__patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -356,8 +341,7 @@ public void test_asm_groups__group_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -374,8 +358,7 @@ public void test_asm_groups__group_id__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -392,8 +375,7 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -411,8 +393,7 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -429,8 +410,7 @@ public void test_asm_groups__group_id__suppressions__email__delete() throws IOEx if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -447,8 +427,7 @@ public void test_asm_suppressions_global_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -466,8 +445,7 @@ public void test_asm_suppressions_global__email__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -484,8 +462,7 @@ public void test_asm_suppressions_global__email__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -502,8 +479,7 @@ public void test_browsers_stats_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -528,8 +504,7 @@ public void test_campaigns_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -547,8 +522,7 @@ public void test_campaigns_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -569,8 +543,7 @@ public void test_campaigns__campaign_id__patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -588,8 +561,7 @@ public void test_campaigns__campaign_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -606,8 +578,7 @@ public void test_campaigns__campaign_id__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -624,8 +595,7 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -643,8 +613,7 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -662,8 +631,7 @@ public void test_campaigns__campaign_id__schedules_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -680,8 +648,7 @@ public void test_campaigns__campaign_id__schedules_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -698,8 +665,7 @@ public void test_campaigns__campaign_id__schedules_now_post() throws IOException if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -716,8 +682,7 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -735,8 +700,7 @@ public void test_categories_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -758,8 +722,7 @@ public void test_categories_stats_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -784,8 +747,7 @@ public void test_categories_stats_sums_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -811,8 +773,7 @@ public void test_clients_stats_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -834,8 +795,7 @@ public void test_clients__client_type__stats_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -857,8 +817,7 @@ public void test_contactdb_custom_fields_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -876,8 +835,7 @@ public void test_contactdb_custom_fields_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -894,8 +852,7 @@ public void test_contactdb_custom_fields__custom_field_id__get() throws IOExcept if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -912,8 +869,7 @@ public void test_contactdb_custom_fields__custom_field_id__delete() throws IOExc if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -930,8 +886,7 @@ public void test_contactdb_lists_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -949,8 +904,7 @@ public void test_contactdb_lists_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -967,8 +921,7 @@ public void test_contactdb_lists_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -986,8 +939,7 @@ public void test_contactdb_lists__list_id__patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1008,8 +960,7 @@ public void test_contactdb_lists__list_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1029,8 +980,7 @@ public void test_contactdb_lists__list_id__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1050,8 +1000,7 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1069,8 +1018,7 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1092,8 +1040,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__post() thro if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1110,8 +1057,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1132,8 +1078,7 @@ public void test_contactdb_recipients_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1151,8 +1096,7 @@ public void test_contactdb_recipients_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1170,8 +1114,7 @@ public void test_contactdb_recipients_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1192,8 +1135,7 @@ public void test_contactdb_recipients_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1211,8 +1153,7 @@ public void test_contactdb_recipients_billable_count_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1229,8 +1170,7 @@ public void test_contactdb_recipients_count_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1247,8 +1187,7 @@ public void test_contactdb_recipients_search_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1268,8 +1207,7 @@ public void test_contactdb_recipients__recipient_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1286,8 +1224,7 @@ public void test_contactdb_recipients__recipient_id__delete() throws IOException if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1304,8 +1241,7 @@ public void test_contactdb_recipients__recipient_id__lists_get() throws IOExcept if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1322,8 +1258,7 @@ public void test_contactdb_reserved_fields_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1340,8 +1275,7 @@ public void test_contactdb_segments_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1359,8 +1293,7 @@ public void test_contactdb_segments_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1377,8 +1310,7 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1399,8 +1331,7 @@ public void test_contactdb_segments__segment_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1420,8 +1351,7 @@ public void test_contactdb_segments__segment_id__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1441,8 +1371,7 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1463,8 +1392,7 @@ public void test_devices_stats_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1488,8 +1416,7 @@ public void test_geo_stats_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1514,8 +1441,7 @@ public void test_ips_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1539,8 +1465,7 @@ public void test_ips_assigned_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1557,8 +1482,7 @@ public void test_ips_pools_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1576,8 +1500,7 @@ public void test_ips_pools_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1594,8 +1517,7 @@ public void test_ips_pools__pool_name__put() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1613,8 +1535,7 @@ public void test_ips_pools__pool_name__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1631,8 +1552,7 @@ public void test_ips_pools__pool_name__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1649,8 +1569,7 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1668,8 +1587,7 @@ public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1686,8 +1604,7 @@ public void test_ips_warmup_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1705,8 +1622,7 @@ public void test_ips_warmup_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1723,8 +1639,7 @@ public void test_ips_warmup__ip_address__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1741,8 +1656,7 @@ public void test_ips_warmup__ip_address__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1759,8 +1673,7 @@ public void test_ips__ip_address__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1777,8 +1690,7 @@ public void test_mail_batch_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1795,8 +1707,7 @@ public void test_mail_batch__batch_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1813,8 +1724,7 @@ public void test_mail_send_beta_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1832,8 +1742,7 @@ public void test_mail_settings_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1854,8 +1763,7 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1873,8 +1781,7 @@ public void test_mail_settings_address_whitelist_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1891,8 +1798,7 @@ public void test_mail_settings_bcc_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1910,8 +1816,7 @@ public void test_mail_settings_bcc_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1928,8 +1833,7 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1947,8 +1851,7 @@ public void test_mail_settings_bounce_purge_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1965,8 +1868,7 @@ public void test_mail_settings_footer_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -1984,8 +1886,7 @@ public void test_mail_settings_footer_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2002,8 +1903,7 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2021,8 +1921,7 @@ public void test_mail_settings_forward_bounce_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2039,8 +1938,7 @@ public void test_mail_settings_forward_spam_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2058,8 +1956,7 @@ public void test_mail_settings_forward_spam_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2076,8 +1973,7 @@ public void test_mail_settings_plain_content_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2095,8 +1991,7 @@ public void test_mail_settings_plain_content_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2113,8 +2008,7 @@ public void test_mail_settings_spam_check_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2132,8 +2026,7 @@ public void test_mail_settings_spam_check_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2150,8 +2043,7 @@ public void test_mail_settings_template_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2169,8 +2061,7 @@ public void test_mail_settings_template_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2187,8 +2078,7 @@ public void test_mailbox_providers_stats_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2213,8 +2103,7 @@ public void test_partner_settings_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2235,8 +2124,7 @@ public void test_partner_settings_new_relic_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2254,8 +2142,7 @@ public void test_partner_settings_new_relic_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2272,8 +2159,7 @@ public void test_scopes_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2290,8 +2176,7 @@ public void test_stats_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2315,8 +2200,7 @@ public void test_subusers_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2334,8 +2218,7 @@ public void test_subusers_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2357,8 +2240,7 @@ public void test_subusers_reputations_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2378,8 +2260,7 @@ public void test_subusers_stats_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2404,8 +2285,7 @@ public void test_subusers_stats_monthly_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2430,8 +2310,7 @@ public void test_subusers_stats_sums_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2457,8 +2336,7 @@ public void test_subusers__subuser_name__patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2476,8 +2354,7 @@ public void test_subusers__subuser_name__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2494,8 +2371,7 @@ public void test_subusers__subuser_name__ips_put() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2513,8 +2389,7 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2532,8 +2407,7 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2551,8 +2425,7 @@ public void test_subusers__subuser_name__monitor_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2569,8 +2442,7 @@ public void test_subusers__subuser_name__monitor_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2587,8 +2459,7 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2612,8 +2483,7 @@ public void test_suppression_blocks_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2636,8 +2506,7 @@ public void test_suppression_blocks_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2655,8 +2524,7 @@ public void test_suppression_blocks__email__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2673,8 +2541,7 @@ public void test_suppression_blocks__email__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2691,8 +2558,7 @@ public void test_suppression_bounces_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2713,8 +2579,7 @@ public void test_suppression_bounces_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2732,8 +2597,7 @@ public void test_suppression_bounces__email__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2750,8 +2614,7 @@ public void test_suppression_bounces__email__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2771,8 +2634,7 @@ public void test_suppression_invalid_emails_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2795,8 +2657,7 @@ public void test_suppression_invalid_emails_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2814,8 +2675,7 @@ public void test_suppression_invalid_emails__email__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2832,8 +2692,7 @@ public void test_suppression_invalid_emails__email__delete() throws IOException if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2850,8 +2709,7 @@ public void test_suppression_spam_report__email__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2868,8 +2726,7 @@ public void test_suppression_spam_report__email__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2886,8 +2743,7 @@ public void test_suppression_spam_reports_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2910,8 +2766,7 @@ public void test_suppression_spam_reports_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2929,8 +2784,7 @@ public void test_suppression_unsubscribes_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2953,8 +2807,7 @@ public void test_templates_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2972,8 +2825,7 @@ public void test_templates_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -2990,8 +2842,7 @@ public void test_templates__template_id__patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3009,8 +2860,7 @@ public void test_templates__template_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3027,8 +2877,7 @@ public void test_templates__template_id__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3045,8 +2894,7 @@ public void test_templates__template_id__versions_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3064,8 +2912,7 @@ public void test_templates__template_id__versions__version_id__patch() throws IO if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3083,8 +2930,7 @@ public void test_templates__template_id__versions__version_id__get() throws IOEx if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3101,8 +2947,7 @@ public void test_templates__template_id__versions__version_id__delete() throws I if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3119,8 +2964,7 @@ public void test_templates__template_id__versions__version_id__activate_post() t if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3137,8 +2981,7 @@ public void test_tracking_settings_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3159,8 +3002,7 @@ public void test_tracking_settings_click_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3178,8 +3020,7 @@ public void test_tracking_settings_click_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3196,8 +3037,7 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3215,8 +3055,7 @@ public void test_tracking_settings_google_analytics_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3233,8 +3072,7 @@ public void test_tracking_settings_open_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3252,8 +3090,7 @@ public void test_tracking_settings_open_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3270,8 +3107,7 @@ public void test_tracking_settings_subscription_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3289,8 +3125,7 @@ public void test_tracking_settings_subscription_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3307,8 +3142,7 @@ public void test_user_account_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3325,8 +3159,7 @@ public void test_user_credits_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3343,8 +3176,7 @@ public void test_user_email_put() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3362,8 +3194,7 @@ public void test_user_email_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3380,8 +3211,7 @@ public void test_user_password_put() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3399,8 +3229,7 @@ public void test_user_profile_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3418,8 +3247,7 @@ public void test_user_profile_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3436,8 +3264,7 @@ public void test_user_scheduled_sends_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3455,8 +3282,7 @@ public void test_user_scheduled_sends_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3473,8 +3299,7 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3492,8 +3317,7 @@ public void test_user_scheduled_sends__batch_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3510,8 +3334,7 @@ public void test_user_scheduled_sends__batch_id__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3528,8 +3351,7 @@ public void test_user_settings_enforced_tls_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3547,8 +3369,7 @@ public void test_user_settings_enforced_tls_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3565,8 +3386,7 @@ public void test_user_username_put() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3584,8 +3404,7 @@ public void test_user_username_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3602,8 +3421,7 @@ public void test_user_webhooks_event_settings_patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3621,8 +3439,7 @@ public void test_user_webhooks_event_settings_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3639,8 +3456,7 @@ public void test_user_webhooks_event_test_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3658,8 +3474,7 @@ public void test_user_webhooks_parse_settings_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3676,8 +3491,7 @@ public void test_user_webhooks_parse_stats_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3701,8 +3515,7 @@ public void test_whitelabel_domains_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3720,8 +3533,7 @@ public void test_whitelabel_domains_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3745,8 +3557,7 @@ public void test_whitelabel_domains_default_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3763,8 +3574,7 @@ public void test_whitelabel_domains_subuser_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3781,8 +3591,7 @@ public void test_whitelabel_domains_subuser_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3799,8 +3608,7 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3818,8 +3626,7 @@ public void test_whitelabel_domains__domain_id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3836,8 +3643,7 @@ public void test_whitelabel_domains__domain_id__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3854,8 +3660,7 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3873,8 +3678,7 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3892,8 +3696,7 @@ public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3910,8 +3713,7 @@ public void test_whitelabel_domains__id__validate_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3928,8 +3730,7 @@ public void test_whitelabel_ips_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3947,8 +3748,7 @@ public void test_whitelabel_ips_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3970,8 +3770,7 @@ public void test_whitelabel_ips__id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -3988,8 +3787,7 @@ public void test_whitelabel_ips__id__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4006,8 +3804,7 @@ public void test_whitelabel_ips__id__validate_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4024,8 +3821,7 @@ public void test_whitelabel_links_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4047,8 +3843,7 @@ public void test_whitelabel_links_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4068,8 +3863,7 @@ public void test_whitelabel_links_default_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4089,8 +3883,7 @@ public void test_whitelabel_links_subuser_get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4110,8 +3903,7 @@ public void test_whitelabel_links_subuser_delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4131,8 +3923,7 @@ public void test_whitelabel_links__id__patch() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4150,8 +3941,7 @@ public void test_whitelabel_links__id__get() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4168,8 +3958,7 @@ public void test_whitelabel_links__id__delete() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4186,8 +3975,7 @@ public void test_whitelabel_links__id__validate_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); @@ -4204,8 +3992,7 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { if(System.getenv("TRAVIS") == "true") { sg.setHost("MOCK_HOST"); } else { - //sg.setHost("localhost:4010"); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); + sg.setHost("localhost:4010"); } Request request = new Request(); From 60fab3c1ae1acf013986201cba93756f77c3eb72 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 27 May 2016 18:52:47 -0700 Subject: [PATCH 021/439] Fix error in setting MOCK_HOST --- src/test/java/com/sendgrid/SendGridTest.java | 426 +++++++++---------- 1 file changed, 213 insertions(+), 213 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index c964d2e6..c9191e3c 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -74,7 +74,7 @@ public void test_access_settings_activity_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -94,7 +94,7 @@ public void test_access_settings_whitelist_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -112,7 +112,7 @@ public void test_access_settings_whitelist_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -129,7 +129,7 @@ public void test_access_settings_whitelist_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -147,7 +147,7 @@ public void test_access_settings_whitelist__rule_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -164,7 +164,7 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -181,7 +181,7 @@ public void test_api_keys_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -199,7 +199,7 @@ public void test_api_keys_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -216,7 +216,7 @@ public void test_api_keys__api_key_id__put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -234,7 +234,7 @@ public void test_api_keys__api_key_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -252,7 +252,7 @@ public void test_api_keys__api_key_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -269,7 +269,7 @@ public void test_api_keys__api_key_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -286,7 +286,7 @@ public void test_asm_groups_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -304,7 +304,7 @@ public void test_asm_groups_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -321,7 +321,7 @@ public void test_asm_groups__group_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -339,7 +339,7 @@ public void test_asm_groups__group_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -356,7 +356,7 @@ public void test_asm_groups__group_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -373,7 +373,7 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -391,7 +391,7 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -408,7 +408,7 @@ public void test_asm_groups__group_id__suppressions__email__delete() throws IOEx SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -425,7 +425,7 @@ public void test_asm_suppressions_global_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -443,7 +443,7 @@ public void test_asm_suppressions_global__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -460,7 +460,7 @@ public void test_asm_suppressions_global__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -477,7 +477,7 @@ public void test_browsers_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -502,7 +502,7 @@ public void test_campaigns_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -520,7 +520,7 @@ public void test_campaigns_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -541,7 +541,7 @@ public void test_campaigns__campaign_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -559,7 +559,7 @@ public void test_campaigns__campaign_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -576,7 +576,7 @@ public void test_campaigns__campaign_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -593,7 +593,7 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -611,7 +611,7 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -629,7 +629,7 @@ public void test_campaigns__campaign_id__schedules_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -646,7 +646,7 @@ public void test_campaigns__campaign_id__schedules_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -663,7 +663,7 @@ public void test_campaigns__campaign_id__schedules_now_post() throws IOException SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -680,7 +680,7 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -698,7 +698,7 @@ public void test_categories_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -720,7 +720,7 @@ public void test_categories_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -745,7 +745,7 @@ public void test_categories_stats_sums_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -771,7 +771,7 @@ public void test_clients_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -793,7 +793,7 @@ public void test_clients__client_type__stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -815,7 +815,7 @@ public void test_contactdb_custom_fields_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -833,7 +833,7 @@ public void test_contactdb_custom_fields_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -850,7 +850,7 @@ public void test_contactdb_custom_fields__custom_field_id__get() throws IOExcept SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -867,7 +867,7 @@ public void test_contactdb_custom_fields__custom_field_id__delete() throws IOExc SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -884,7 +884,7 @@ public void test_contactdb_lists_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -902,7 +902,7 @@ public void test_contactdb_lists_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -919,7 +919,7 @@ public void test_contactdb_lists_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -937,7 +937,7 @@ public void test_contactdb_lists__list_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -958,7 +958,7 @@ public void test_contactdb_lists__list_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -978,7 +978,7 @@ public void test_contactdb_lists__list_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -998,7 +998,7 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1016,7 +1016,7 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1038,7 +1038,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__post() thro SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1055,7 +1055,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1076,7 +1076,7 @@ public void test_contactdb_recipients_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1094,7 +1094,7 @@ public void test_contactdb_recipients_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1112,7 +1112,7 @@ public void test_contactdb_recipients_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1133,7 +1133,7 @@ public void test_contactdb_recipients_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1151,7 +1151,7 @@ public void test_contactdb_recipients_billable_count_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1168,7 +1168,7 @@ public void test_contactdb_recipients_count_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1185,7 +1185,7 @@ public void test_contactdb_recipients_search_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1205,7 +1205,7 @@ public void test_contactdb_recipients__recipient_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1222,7 +1222,7 @@ public void test_contactdb_recipients__recipient_id__delete() throws IOException SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1239,7 +1239,7 @@ public void test_contactdb_recipients__recipient_id__lists_get() throws IOExcept SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1256,7 +1256,7 @@ public void test_contactdb_reserved_fields_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1273,7 +1273,7 @@ public void test_contactdb_segments_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1291,7 +1291,7 @@ public void test_contactdb_segments_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1308,7 +1308,7 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1329,7 +1329,7 @@ public void test_contactdb_segments__segment_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1349,7 +1349,7 @@ public void test_contactdb_segments__segment_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1369,7 +1369,7 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1390,7 +1390,7 @@ public void test_devices_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1414,7 +1414,7 @@ public void test_geo_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1439,7 +1439,7 @@ public void test_ips_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1463,7 +1463,7 @@ public void test_ips_assigned_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1480,7 +1480,7 @@ public void test_ips_pools_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1498,7 +1498,7 @@ public void test_ips_pools_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1515,7 +1515,7 @@ public void test_ips_pools__pool_name__put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1533,7 +1533,7 @@ public void test_ips_pools__pool_name__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1550,7 +1550,7 @@ public void test_ips_pools__pool_name__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1567,7 +1567,7 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1585,7 +1585,7 @@ public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1602,7 +1602,7 @@ public void test_ips_warmup_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1620,7 +1620,7 @@ public void test_ips_warmup_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1637,7 +1637,7 @@ public void test_ips_warmup__ip_address__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1654,7 +1654,7 @@ public void test_ips_warmup__ip_address__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1671,7 +1671,7 @@ public void test_ips__ip_address__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1688,7 +1688,7 @@ public void test_mail_batch_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1705,7 +1705,7 @@ public void test_mail_batch__batch_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1722,7 +1722,7 @@ public void test_mail_send_beta_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1740,7 +1740,7 @@ public void test_mail_settings_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1761,7 +1761,7 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1779,7 +1779,7 @@ public void test_mail_settings_address_whitelist_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1796,7 +1796,7 @@ public void test_mail_settings_bcc_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1814,7 +1814,7 @@ public void test_mail_settings_bcc_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1831,7 +1831,7 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1849,7 +1849,7 @@ public void test_mail_settings_bounce_purge_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1866,7 +1866,7 @@ public void test_mail_settings_footer_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1884,7 +1884,7 @@ public void test_mail_settings_footer_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1901,7 +1901,7 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1919,7 +1919,7 @@ public void test_mail_settings_forward_bounce_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1936,7 +1936,7 @@ public void test_mail_settings_forward_spam_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1954,7 +1954,7 @@ public void test_mail_settings_forward_spam_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1971,7 +1971,7 @@ public void test_mail_settings_plain_content_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -1989,7 +1989,7 @@ public void test_mail_settings_plain_content_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2006,7 +2006,7 @@ public void test_mail_settings_spam_check_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2024,7 +2024,7 @@ public void test_mail_settings_spam_check_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2041,7 +2041,7 @@ public void test_mail_settings_template_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2059,7 +2059,7 @@ public void test_mail_settings_template_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2076,7 +2076,7 @@ public void test_mailbox_providers_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2101,7 +2101,7 @@ public void test_partner_settings_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2122,7 +2122,7 @@ public void test_partner_settings_new_relic_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2140,7 +2140,7 @@ public void test_partner_settings_new_relic_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2157,7 +2157,7 @@ public void test_scopes_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2174,7 +2174,7 @@ public void test_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2198,7 +2198,7 @@ public void test_subusers_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2216,7 +2216,7 @@ public void test_subusers_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2238,7 +2238,7 @@ public void test_subusers_reputations_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2258,7 +2258,7 @@ public void test_subusers_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2283,7 +2283,7 @@ public void test_subusers_stats_monthly_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2308,7 +2308,7 @@ public void test_subusers_stats_sums_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2334,7 +2334,7 @@ public void test_subusers__subuser_name__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2352,7 +2352,7 @@ public void test_subusers__subuser_name__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2369,7 +2369,7 @@ public void test_subusers__subuser_name__ips_put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2387,7 +2387,7 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2405,7 +2405,7 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2423,7 +2423,7 @@ public void test_subusers__subuser_name__monitor_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2440,7 +2440,7 @@ public void test_subusers__subuser_name__monitor_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2457,7 +2457,7 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2481,7 +2481,7 @@ public void test_suppression_blocks_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2504,7 +2504,7 @@ public void test_suppression_blocks_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2522,7 +2522,7 @@ public void test_suppression_blocks__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2539,7 +2539,7 @@ public void test_suppression_blocks__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2556,7 +2556,7 @@ public void test_suppression_bounces_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2577,7 +2577,7 @@ public void test_suppression_bounces_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2595,7 +2595,7 @@ public void test_suppression_bounces__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2612,7 +2612,7 @@ public void test_suppression_bounces__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2632,7 +2632,7 @@ public void test_suppression_invalid_emails_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2655,7 +2655,7 @@ public void test_suppression_invalid_emails_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2673,7 +2673,7 @@ public void test_suppression_invalid_emails__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2690,7 +2690,7 @@ public void test_suppression_invalid_emails__email__delete() throws IOException SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2707,7 +2707,7 @@ public void test_suppression_spam_report__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2724,7 +2724,7 @@ public void test_suppression_spam_report__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2741,7 +2741,7 @@ public void test_suppression_spam_reports_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2764,7 +2764,7 @@ public void test_suppression_spam_reports_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2782,7 +2782,7 @@ public void test_suppression_unsubscribes_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2805,7 +2805,7 @@ public void test_templates_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2823,7 +2823,7 @@ public void test_templates_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2840,7 +2840,7 @@ public void test_templates__template_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2858,7 +2858,7 @@ public void test_templates__template_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2875,7 +2875,7 @@ public void test_templates__template_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2892,7 +2892,7 @@ public void test_templates__template_id__versions_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2910,7 +2910,7 @@ public void test_templates__template_id__versions__version_id__patch() throws IO SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2928,7 +2928,7 @@ public void test_templates__template_id__versions__version_id__get() throws IOEx SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2945,7 +2945,7 @@ public void test_templates__template_id__versions__version_id__delete() throws I SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2962,7 +2962,7 @@ public void test_templates__template_id__versions__version_id__activate_post() t SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -2979,7 +2979,7 @@ public void test_tracking_settings_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3000,7 +3000,7 @@ public void test_tracking_settings_click_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3018,7 +3018,7 @@ public void test_tracking_settings_click_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3035,7 +3035,7 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3053,7 +3053,7 @@ public void test_tracking_settings_google_analytics_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3070,7 +3070,7 @@ public void test_tracking_settings_open_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3088,7 +3088,7 @@ public void test_tracking_settings_open_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3105,7 +3105,7 @@ public void test_tracking_settings_subscription_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3123,7 +3123,7 @@ public void test_tracking_settings_subscription_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3140,7 +3140,7 @@ public void test_user_account_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3157,7 +3157,7 @@ public void test_user_credits_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3174,7 +3174,7 @@ public void test_user_email_put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3192,7 +3192,7 @@ public void test_user_email_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3209,7 +3209,7 @@ public void test_user_password_put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3227,7 +3227,7 @@ public void test_user_profile_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3245,7 +3245,7 @@ public void test_user_profile_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3262,7 +3262,7 @@ public void test_user_scheduled_sends_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3280,7 +3280,7 @@ public void test_user_scheduled_sends_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3297,7 +3297,7 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3315,7 +3315,7 @@ public void test_user_scheduled_sends__batch_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3332,7 +3332,7 @@ public void test_user_scheduled_sends__batch_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3349,7 +3349,7 @@ public void test_user_settings_enforced_tls_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3367,7 +3367,7 @@ public void test_user_settings_enforced_tls_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3384,7 +3384,7 @@ public void test_user_username_put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3402,7 +3402,7 @@ public void test_user_username_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3419,7 +3419,7 @@ public void test_user_webhooks_event_settings_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3437,7 +3437,7 @@ public void test_user_webhooks_event_settings_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3454,7 +3454,7 @@ public void test_user_webhooks_event_test_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3472,7 +3472,7 @@ public void test_user_webhooks_parse_settings_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3489,7 +3489,7 @@ public void test_user_webhooks_parse_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3513,7 +3513,7 @@ public void test_whitelabel_domains_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3531,7 +3531,7 @@ public void test_whitelabel_domains_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3555,7 +3555,7 @@ public void test_whitelabel_domains_default_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3572,7 +3572,7 @@ public void test_whitelabel_domains_subuser_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3589,7 +3589,7 @@ public void test_whitelabel_domains_subuser_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3606,7 +3606,7 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3624,7 +3624,7 @@ public void test_whitelabel_domains__domain_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3641,7 +3641,7 @@ public void test_whitelabel_domains__domain_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3658,7 +3658,7 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3676,7 +3676,7 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3694,7 +3694,7 @@ public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3711,7 +3711,7 @@ public void test_whitelabel_domains__id__validate_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3728,7 +3728,7 @@ public void test_whitelabel_ips_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3746,7 +3746,7 @@ public void test_whitelabel_ips_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3768,7 +3768,7 @@ public void test_whitelabel_ips__id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3785,7 +3785,7 @@ public void test_whitelabel_ips__id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3802,7 +3802,7 @@ public void test_whitelabel_ips__id__validate_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3819,7 +3819,7 @@ public void test_whitelabel_links_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3841,7 +3841,7 @@ public void test_whitelabel_links_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3861,7 +3861,7 @@ public void test_whitelabel_links_default_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3881,7 +3881,7 @@ public void test_whitelabel_links_subuser_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3901,7 +3901,7 @@ public void test_whitelabel_links_subuser_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3921,7 +3921,7 @@ public void test_whitelabel_links__id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3939,7 +3939,7 @@ public void test_whitelabel_links__id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3956,7 +3956,7 @@ public void test_whitelabel_links__id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3973,7 +3973,7 @@ public void test_whitelabel_links__id__validate_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } @@ -3990,7 +3990,7 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); if(System.getenv("TRAVIS") == "true") { - sg.setHost("MOCK_HOST"); + sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); } From 5c0780e356082ae63de92d21cd77b4c7111d8231 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 27 May 2016 19:00:17 -0700 Subject: [PATCH 022/439] Fixing Travis logic --- src/test/java/com/sendgrid/SendGridTest.java | 426 +++++++++---------- 1 file changed, 213 insertions(+), 213 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index c9191e3c..aceac1fe 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -73,7 +73,7 @@ public void testHost() { public void test_access_settings_activity_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -93,7 +93,7 @@ public void test_access_settings_activity_get() throws IOException { public void test_access_settings_whitelist_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -111,7 +111,7 @@ public void test_access_settings_whitelist_post() throws IOException { public void test_access_settings_whitelist_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -128,7 +128,7 @@ public void test_access_settings_whitelist_get() throws IOException { public void test_access_settings_whitelist_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -146,7 +146,7 @@ public void test_access_settings_whitelist_delete() throws IOException { public void test_access_settings_whitelist__rule_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -163,7 +163,7 @@ public void test_access_settings_whitelist__rule_id__get() throws IOException { public void test_access_settings_whitelist__rule_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -180,7 +180,7 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException public void test_api_keys_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -198,7 +198,7 @@ public void test_api_keys_post() throws IOException { public void test_api_keys_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -215,7 +215,7 @@ public void test_api_keys_get() throws IOException { public void test_api_keys__api_key_id__put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -233,7 +233,7 @@ public void test_api_keys__api_key_id__put() throws IOException { public void test_api_keys__api_key_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -251,7 +251,7 @@ public void test_api_keys__api_key_id__patch() throws IOException { public void test_api_keys__api_key_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -268,7 +268,7 @@ public void test_api_keys__api_key_id__get() throws IOException { public void test_api_keys__api_key_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -285,7 +285,7 @@ public void test_api_keys__api_key_id__delete() throws IOException { public void test_asm_groups_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -303,7 +303,7 @@ public void test_asm_groups_post() throws IOException { public void test_asm_groups_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -320,7 +320,7 @@ public void test_asm_groups_get() throws IOException { public void test_asm_groups__group_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -338,7 +338,7 @@ public void test_asm_groups__group_id__patch() throws IOException { public void test_asm_groups__group_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -355,7 +355,7 @@ public void test_asm_groups__group_id__get() throws IOException { public void test_asm_groups__group_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -372,7 +372,7 @@ public void test_asm_groups__group_id__delete() throws IOException { public void test_asm_groups__group_id__suppressions_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -390,7 +390,7 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { public void test_asm_groups__group_id__suppressions_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -407,7 +407,7 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { public void test_asm_groups__group_id__suppressions__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -424,7 +424,7 @@ public void test_asm_groups__group_id__suppressions__email__delete() throws IOEx public void test_asm_suppressions_global_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -442,7 +442,7 @@ public void test_asm_suppressions_global_post() throws IOException { public void test_asm_suppressions_global__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -459,7 +459,7 @@ public void test_asm_suppressions_global__email__get() throws IOException { public void test_asm_suppressions_global__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -476,7 +476,7 @@ public void test_asm_suppressions_global__email__delete() throws IOException { public void test_browsers_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -501,7 +501,7 @@ public void test_browsers_stats_get() throws IOException { public void test_campaigns_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -519,7 +519,7 @@ public void test_campaigns_post() throws IOException { public void test_campaigns_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -540,7 +540,7 @@ public void test_campaigns_get() throws IOException { public void test_campaigns__campaign_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -558,7 +558,7 @@ public void test_campaigns__campaign_id__patch() throws IOException { public void test_campaigns__campaign_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -575,7 +575,7 @@ public void test_campaigns__campaign_id__get() throws IOException { public void test_campaigns__campaign_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -592,7 +592,7 @@ public void test_campaigns__campaign_id__delete() throws IOException { public void test_campaigns__campaign_id__schedules_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -610,7 +610,7 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { public void test_campaigns__campaign_id__schedules_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -628,7 +628,7 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { public void test_campaigns__campaign_id__schedules_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -645,7 +645,7 @@ public void test_campaigns__campaign_id__schedules_get() throws IOException { public void test_campaigns__campaign_id__schedules_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -662,7 +662,7 @@ public void test_campaigns__campaign_id__schedules_delete() throws IOException { public void test_campaigns__campaign_id__schedules_now_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -679,7 +679,7 @@ public void test_campaigns__campaign_id__schedules_now_post() throws IOException public void test_campaigns__campaign_id__schedules_test_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -697,7 +697,7 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio public void test_categories_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -719,7 +719,7 @@ public void test_categories_get() throws IOException { public void test_categories_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -744,7 +744,7 @@ public void test_categories_stats_get() throws IOException { public void test_categories_stats_sums_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -770,7 +770,7 @@ public void test_categories_stats_sums_get() throws IOException { public void test_clients_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -792,7 +792,7 @@ public void test_clients_stats_get() throws IOException { public void test_clients__client_type__stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -814,7 +814,7 @@ public void test_clients__client_type__stats_get() throws IOException { public void test_contactdb_custom_fields_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -832,7 +832,7 @@ public void test_contactdb_custom_fields_post() throws IOException { public void test_contactdb_custom_fields_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -849,7 +849,7 @@ public void test_contactdb_custom_fields_get() throws IOException { public void test_contactdb_custom_fields__custom_field_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -866,7 +866,7 @@ public void test_contactdb_custom_fields__custom_field_id__get() throws IOExcept public void test_contactdb_custom_fields__custom_field_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -883,7 +883,7 @@ public void test_contactdb_custom_fields__custom_field_id__delete() throws IOExc public void test_contactdb_lists_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -901,7 +901,7 @@ public void test_contactdb_lists_post() throws IOException { public void test_contactdb_lists_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -918,7 +918,7 @@ public void test_contactdb_lists_get() throws IOException { public void test_contactdb_lists_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -936,7 +936,7 @@ public void test_contactdb_lists_delete() throws IOException { public void test_contactdb_lists__list_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -957,7 +957,7 @@ public void test_contactdb_lists__list_id__patch() throws IOException { public void test_contactdb_lists__list_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -977,7 +977,7 @@ public void test_contactdb_lists__list_id__get() throws IOException { public void test_contactdb_lists__list_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -997,7 +997,7 @@ public void test_contactdb_lists__list_id__delete() throws IOException { public void test_contactdb_lists__list_id__recipients_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1015,7 +1015,7 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException public void test_contactdb_lists__list_id__recipients_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1037,7 +1037,7 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { public void test_contactdb_lists__list_id__recipients__recipient_id__post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1054,7 +1054,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__post() thro public void test_contactdb_lists__list_id__recipients__recipient_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1075,7 +1075,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th public void test_contactdb_recipients_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1093,7 +1093,7 @@ public void test_contactdb_recipients_patch() throws IOException { public void test_contactdb_recipients_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1111,7 +1111,7 @@ public void test_contactdb_recipients_post() throws IOException { public void test_contactdb_recipients_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1132,7 +1132,7 @@ public void test_contactdb_recipients_get() throws IOException { public void test_contactdb_recipients_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1150,7 +1150,7 @@ public void test_contactdb_recipients_delete() throws IOException { public void test_contactdb_recipients_billable_count_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1167,7 +1167,7 @@ public void test_contactdb_recipients_billable_count_get() throws IOException { public void test_contactdb_recipients_count_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1184,7 +1184,7 @@ public void test_contactdb_recipients_count_get() throws IOException { public void test_contactdb_recipients_search_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1204,7 +1204,7 @@ public void test_contactdb_recipients_search_get() throws IOException { public void test_contactdb_recipients__recipient_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1221,7 +1221,7 @@ public void test_contactdb_recipients__recipient_id__get() throws IOException { public void test_contactdb_recipients__recipient_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1238,7 +1238,7 @@ public void test_contactdb_recipients__recipient_id__delete() throws IOException public void test_contactdb_recipients__recipient_id__lists_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1255,7 +1255,7 @@ public void test_contactdb_recipients__recipient_id__lists_get() throws IOExcept public void test_contactdb_reserved_fields_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1272,7 +1272,7 @@ public void test_contactdb_reserved_fields_get() throws IOException { public void test_contactdb_segments_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1290,7 +1290,7 @@ public void test_contactdb_segments_post() throws IOException { public void test_contactdb_segments_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1307,7 +1307,7 @@ public void test_contactdb_segments_get() throws IOException { public void test_contactdb_segments__segment_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1328,7 +1328,7 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { public void test_contactdb_segments__segment_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1348,7 +1348,7 @@ public void test_contactdb_segments__segment_id__get() throws IOException { public void test_contactdb_segments__segment_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1368,7 +1368,7 @@ public void test_contactdb_segments__segment_id__delete() throws IOException { public void test_contactdb_segments__segment_id__recipients_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1389,7 +1389,7 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep public void test_devices_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1413,7 +1413,7 @@ public void test_devices_stats_get() throws IOException { public void test_geo_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1438,7 +1438,7 @@ public void test_geo_stats_get() throws IOException { public void test_ips_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1462,7 +1462,7 @@ public void test_ips_get() throws IOException { public void test_ips_assigned_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1479,7 +1479,7 @@ public void test_ips_assigned_get() throws IOException { public void test_ips_pools_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1497,7 +1497,7 @@ public void test_ips_pools_post() throws IOException { public void test_ips_pools_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1514,7 +1514,7 @@ public void test_ips_pools_get() throws IOException { public void test_ips_pools__pool_name__put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1532,7 +1532,7 @@ public void test_ips_pools__pool_name__put() throws IOException { public void test_ips_pools__pool_name__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1549,7 +1549,7 @@ public void test_ips_pools__pool_name__get() throws IOException { public void test_ips_pools__pool_name__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1566,7 +1566,7 @@ public void test_ips_pools__pool_name__delete() throws IOException { public void test_ips_pools__pool_name__ips_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1584,7 +1584,7 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1601,7 +1601,7 @@ public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { public void test_ips_warmup_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1619,7 +1619,7 @@ public void test_ips_warmup_post() throws IOException { public void test_ips_warmup_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1636,7 +1636,7 @@ public void test_ips_warmup_get() throws IOException { public void test_ips_warmup__ip_address__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1653,7 +1653,7 @@ public void test_ips_warmup__ip_address__get() throws IOException { public void test_ips_warmup__ip_address__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1670,7 +1670,7 @@ public void test_ips_warmup__ip_address__delete() throws IOException { public void test_ips__ip_address__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1687,7 +1687,7 @@ public void test_ips__ip_address__get() throws IOException { public void test_mail_batch_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1704,7 +1704,7 @@ public void test_mail_batch_post() throws IOException { public void test_mail_batch__batch_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1721,7 +1721,7 @@ public void test_mail_batch__batch_id__get() throws IOException { public void test_mail_send_beta_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1739,7 +1739,7 @@ public void test_mail_send_beta_post() throws IOException { public void test_mail_settings_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1760,7 +1760,7 @@ public void test_mail_settings_get() throws IOException { public void test_mail_settings_address_whitelist_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1778,7 +1778,7 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { public void test_mail_settings_address_whitelist_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1795,7 +1795,7 @@ public void test_mail_settings_address_whitelist_get() throws IOException { public void test_mail_settings_bcc_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1813,7 +1813,7 @@ public void test_mail_settings_bcc_patch() throws IOException { public void test_mail_settings_bcc_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1830,7 +1830,7 @@ public void test_mail_settings_bcc_get() throws IOException { public void test_mail_settings_bounce_purge_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1848,7 +1848,7 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { public void test_mail_settings_bounce_purge_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1865,7 +1865,7 @@ public void test_mail_settings_bounce_purge_get() throws IOException { public void test_mail_settings_footer_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1883,7 +1883,7 @@ public void test_mail_settings_footer_patch() throws IOException { public void test_mail_settings_footer_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1900,7 +1900,7 @@ public void test_mail_settings_footer_get() throws IOException { public void test_mail_settings_forward_bounce_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1918,7 +1918,7 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { public void test_mail_settings_forward_bounce_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1935,7 +1935,7 @@ public void test_mail_settings_forward_bounce_get() throws IOException { public void test_mail_settings_forward_spam_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1953,7 +1953,7 @@ public void test_mail_settings_forward_spam_patch() throws IOException { public void test_mail_settings_forward_spam_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1970,7 +1970,7 @@ public void test_mail_settings_forward_spam_get() throws IOException { public void test_mail_settings_plain_content_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -1988,7 +1988,7 @@ public void test_mail_settings_plain_content_patch() throws IOException { public void test_mail_settings_plain_content_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2005,7 +2005,7 @@ public void test_mail_settings_plain_content_get() throws IOException { public void test_mail_settings_spam_check_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2023,7 +2023,7 @@ public void test_mail_settings_spam_check_patch() throws IOException { public void test_mail_settings_spam_check_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2040,7 +2040,7 @@ public void test_mail_settings_spam_check_get() throws IOException { public void test_mail_settings_template_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2058,7 +2058,7 @@ public void test_mail_settings_template_patch() throws IOException { public void test_mail_settings_template_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2075,7 +2075,7 @@ public void test_mail_settings_template_get() throws IOException { public void test_mailbox_providers_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2100,7 +2100,7 @@ public void test_mailbox_providers_stats_get() throws IOException { public void test_partner_settings_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2121,7 +2121,7 @@ public void test_partner_settings_get() throws IOException { public void test_partner_settings_new_relic_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2139,7 +2139,7 @@ public void test_partner_settings_new_relic_patch() throws IOException { public void test_partner_settings_new_relic_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2156,7 +2156,7 @@ public void test_partner_settings_new_relic_get() throws IOException { public void test_scopes_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2173,7 +2173,7 @@ public void test_scopes_get() throws IOException { public void test_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2197,7 +2197,7 @@ public void test_stats_get() throws IOException { public void test_subusers_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2215,7 +2215,7 @@ public void test_subusers_post() throws IOException { public void test_subusers_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2237,7 +2237,7 @@ public void test_subusers_get() throws IOException { public void test_subusers_reputations_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2257,7 +2257,7 @@ public void test_subusers_reputations_get() throws IOException { public void test_subusers_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2282,7 +2282,7 @@ public void test_subusers_stats_get() throws IOException { public void test_subusers_stats_monthly_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2307,7 +2307,7 @@ public void test_subusers_stats_monthly_get() throws IOException { public void test_subusers_stats_sums_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2333,7 +2333,7 @@ public void test_subusers_stats_sums_get() throws IOException { public void test_subusers__subuser_name__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2351,7 +2351,7 @@ public void test_subusers__subuser_name__patch() throws IOException { public void test_subusers__subuser_name__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2368,7 +2368,7 @@ public void test_subusers__subuser_name__delete() throws IOException { public void test_subusers__subuser_name__ips_put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2386,7 +2386,7 @@ public void test_subusers__subuser_name__ips_put() throws IOException { public void test_subusers__subuser_name__monitor_put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2404,7 +2404,7 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { public void test_subusers__subuser_name__monitor_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2422,7 +2422,7 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { public void test_subusers__subuser_name__monitor_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2439,7 +2439,7 @@ public void test_subusers__subuser_name__monitor_get() throws IOException { public void test_subusers__subuser_name__monitor_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2456,7 +2456,7 @@ public void test_subusers__subuser_name__monitor_delete() throws IOException { public void test_subusers__subuser_name__stats_monthly_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2480,7 +2480,7 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException public void test_suppression_blocks_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2503,7 +2503,7 @@ public void test_suppression_blocks_get() throws IOException { public void test_suppression_blocks_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2521,7 +2521,7 @@ public void test_suppression_blocks_delete() throws IOException { public void test_suppression_blocks__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2538,7 +2538,7 @@ public void test_suppression_blocks__email__get() throws IOException { public void test_suppression_blocks__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2555,7 +2555,7 @@ public void test_suppression_blocks__email__delete() throws IOException { public void test_suppression_bounces_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2576,7 +2576,7 @@ public void test_suppression_bounces_get() throws IOException { public void test_suppression_bounces_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2594,7 +2594,7 @@ public void test_suppression_bounces_delete() throws IOException { public void test_suppression_bounces__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2611,7 +2611,7 @@ public void test_suppression_bounces__email__get() throws IOException { public void test_suppression_bounces__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2631,7 +2631,7 @@ public void test_suppression_bounces__email__delete() throws IOException { public void test_suppression_invalid_emails_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2654,7 +2654,7 @@ public void test_suppression_invalid_emails_get() throws IOException { public void test_suppression_invalid_emails_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2672,7 +2672,7 @@ public void test_suppression_invalid_emails_delete() throws IOException { public void test_suppression_invalid_emails__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2689,7 +2689,7 @@ public void test_suppression_invalid_emails__email__get() throws IOException { public void test_suppression_invalid_emails__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2706,7 +2706,7 @@ public void test_suppression_invalid_emails__email__delete() throws IOException public void test_suppression_spam_report__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2723,7 +2723,7 @@ public void test_suppression_spam_report__email__get() throws IOException { public void test_suppression_spam_report__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2740,7 +2740,7 @@ public void test_suppression_spam_report__email__delete() throws IOException { public void test_suppression_spam_reports_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2763,7 +2763,7 @@ public void test_suppression_spam_reports_get() throws IOException { public void test_suppression_spam_reports_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2781,7 +2781,7 @@ public void test_suppression_spam_reports_delete() throws IOException { public void test_suppression_unsubscribes_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2804,7 +2804,7 @@ public void test_suppression_unsubscribes_get() throws IOException { public void test_templates_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2822,7 +2822,7 @@ public void test_templates_post() throws IOException { public void test_templates_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2839,7 +2839,7 @@ public void test_templates_get() throws IOException { public void test_templates__template_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2857,7 +2857,7 @@ public void test_templates__template_id__patch() throws IOException { public void test_templates__template_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2874,7 +2874,7 @@ public void test_templates__template_id__get() throws IOException { public void test_templates__template_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2891,7 +2891,7 @@ public void test_templates__template_id__delete() throws IOException { public void test_templates__template_id__versions_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2909,7 +2909,7 @@ public void test_templates__template_id__versions_post() throws IOException { public void test_templates__template_id__versions__version_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2927,7 +2927,7 @@ public void test_templates__template_id__versions__version_id__patch() throws IO public void test_templates__template_id__versions__version_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2944,7 +2944,7 @@ public void test_templates__template_id__versions__version_id__get() throws IOEx public void test_templates__template_id__versions__version_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2961,7 +2961,7 @@ public void test_templates__template_id__versions__version_id__delete() throws I public void test_templates__template_id__versions__version_id__activate_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2978,7 +2978,7 @@ public void test_templates__template_id__versions__version_id__activate_post() t public void test_tracking_settings_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -2999,7 +2999,7 @@ public void test_tracking_settings_get() throws IOException { public void test_tracking_settings_click_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3017,7 +3017,7 @@ public void test_tracking_settings_click_patch() throws IOException { public void test_tracking_settings_click_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3034,7 +3034,7 @@ public void test_tracking_settings_click_get() throws IOException { public void test_tracking_settings_google_analytics_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3052,7 +3052,7 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { public void test_tracking_settings_google_analytics_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3069,7 +3069,7 @@ public void test_tracking_settings_google_analytics_get() throws IOException { public void test_tracking_settings_open_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3087,7 +3087,7 @@ public void test_tracking_settings_open_patch() throws IOException { public void test_tracking_settings_open_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3104,7 +3104,7 @@ public void test_tracking_settings_open_get() throws IOException { public void test_tracking_settings_subscription_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3122,7 +3122,7 @@ public void test_tracking_settings_subscription_patch() throws IOException { public void test_tracking_settings_subscription_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3139,7 +3139,7 @@ public void test_tracking_settings_subscription_get() throws IOException { public void test_user_account_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3156,7 +3156,7 @@ public void test_user_account_get() throws IOException { public void test_user_credits_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3173,7 +3173,7 @@ public void test_user_credits_get() throws IOException { public void test_user_email_put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3191,7 +3191,7 @@ public void test_user_email_put() throws IOException { public void test_user_email_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3208,7 +3208,7 @@ public void test_user_email_get() throws IOException { public void test_user_password_put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3226,7 +3226,7 @@ public void test_user_password_put() throws IOException { public void test_user_profile_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3244,7 +3244,7 @@ public void test_user_profile_patch() throws IOException { public void test_user_profile_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3261,7 +3261,7 @@ public void test_user_profile_get() throws IOException { public void test_user_scheduled_sends_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3279,7 +3279,7 @@ public void test_user_scheduled_sends_post() throws IOException { public void test_user_scheduled_sends_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3296,7 +3296,7 @@ public void test_user_scheduled_sends_get() throws IOException { public void test_user_scheduled_sends__batch_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3314,7 +3314,7 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { public void test_user_scheduled_sends__batch_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3331,7 +3331,7 @@ public void test_user_scheduled_sends__batch_id__get() throws IOException { public void test_user_scheduled_sends__batch_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3348,7 +3348,7 @@ public void test_user_scheduled_sends__batch_id__delete() throws IOException { public void test_user_settings_enforced_tls_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3366,7 +3366,7 @@ public void test_user_settings_enforced_tls_patch() throws IOException { public void test_user_settings_enforced_tls_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3383,7 +3383,7 @@ public void test_user_settings_enforced_tls_get() throws IOException { public void test_user_username_put() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3401,7 +3401,7 @@ public void test_user_username_put() throws IOException { public void test_user_username_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3418,7 +3418,7 @@ public void test_user_username_get() throws IOException { public void test_user_webhooks_event_settings_patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3436,7 +3436,7 @@ public void test_user_webhooks_event_settings_patch() throws IOException { public void test_user_webhooks_event_settings_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3453,7 +3453,7 @@ public void test_user_webhooks_event_settings_get() throws IOException { public void test_user_webhooks_event_test_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3471,7 +3471,7 @@ public void test_user_webhooks_event_test_post() throws IOException { public void test_user_webhooks_parse_settings_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3488,7 +3488,7 @@ public void test_user_webhooks_parse_settings_get() throws IOException { public void test_user_webhooks_parse_stats_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3512,7 +3512,7 @@ public void test_user_webhooks_parse_stats_get() throws IOException { public void test_whitelabel_domains_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3530,7 +3530,7 @@ public void test_whitelabel_domains_post() throws IOException { public void test_whitelabel_domains_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3554,7 +3554,7 @@ public void test_whitelabel_domains_get() throws IOException { public void test_whitelabel_domains_default_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3571,7 +3571,7 @@ public void test_whitelabel_domains_default_get() throws IOException { public void test_whitelabel_domains_subuser_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3588,7 +3588,7 @@ public void test_whitelabel_domains_subuser_get() throws IOException { public void test_whitelabel_domains_subuser_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3605,7 +3605,7 @@ public void test_whitelabel_domains_subuser_delete() throws IOException { public void test_whitelabel_domains__domain_id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3623,7 +3623,7 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { public void test_whitelabel_domains__domain_id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3640,7 +3640,7 @@ public void test_whitelabel_domains__domain_id__get() throws IOException { public void test_whitelabel_domains__domain_id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3657,7 +3657,7 @@ public void test_whitelabel_domains__domain_id__delete() throws IOException { public void test_whitelabel_domains__domain_id__subuser_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3675,7 +3675,7 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio public void test_whitelabel_domains__id__ips_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3693,7 +3693,7 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3710,7 +3710,7 @@ public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { public void test_whitelabel_domains__id__validate_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3727,7 +3727,7 @@ public void test_whitelabel_domains__id__validate_post() throws IOException { public void test_whitelabel_ips_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3745,7 +3745,7 @@ public void test_whitelabel_ips_post() throws IOException { public void test_whitelabel_ips_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3767,7 +3767,7 @@ public void test_whitelabel_ips_get() throws IOException { public void test_whitelabel_ips__id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3784,7 +3784,7 @@ public void test_whitelabel_ips__id__get() throws IOException { public void test_whitelabel_ips__id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3801,7 +3801,7 @@ public void test_whitelabel_ips__id__delete() throws IOException { public void test_whitelabel_ips__id__validate_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3818,7 +3818,7 @@ public void test_whitelabel_ips__id__validate_post() throws IOException { public void test_whitelabel_links_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3840,7 +3840,7 @@ public void test_whitelabel_links_post() throws IOException { public void test_whitelabel_links_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3860,7 +3860,7 @@ public void test_whitelabel_links_get() throws IOException { public void test_whitelabel_links_default_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3880,7 +3880,7 @@ public void test_whitelabel_links_default_get() throws IOException { public void test_whitelabel_links_subuser_get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3900,7 +3900,7 @@ public void test_whitelabel_links_subuser_get() throws IOException { public void test_whitelabel_links_subuser_delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3920,7 +3920,7 @@ public void test_whitelabel_links_subuser_delete() throws IOException { public void test_whitelabel_links__id__patch() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3938,7 +3938,7 @@ public void test_whitelabel_links__id__patch() throws IOException { public void test_whitelabel_links__id__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3955,7 +3955,7 @@ public void test_whitelabel_links__id__get() throws IOException { public void test_whitelabel_links__id__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3972,7 +3972,7 @@ public void test_whitelabel_links__id__delete() throws IOException { public void test_whitelabel_links__id__validate_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); @@ -3989,7 +3989,7 @@ public void test_whitelabel_links__id__validate_post() throws IOException { public void test_whitelabel_links__link_id__subuser_post() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); - if(System.getenv("TRAVIS") == "true") { + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg.setHost(System.getenv("MOCK_HOST")); } else { sg.setHost("localhost:4010"); From 0cb5a92d51199cadf65dcbad4eab184bb5ed0b67 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 27 May 2016 21:05:59 -0700 Subject: [PATCH 023/439] Update USAGE.md to contain all v3 Web API endpoints --- USAGE.md | 5993 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 5977 insertions(+), 16 deletions(-) diff --git a/USAGE.md b/USAGE.md index 5922b054..1a18d5ca 100644 --- a/USAGE.md +++ b/USAGE.md @@ -1,4 +1,8 @@ -```java +This documentation is based on our [OAI specification](https://github.com/sendgrid/sendgrid-oai). + +# INITIALIZATION + +```ruby import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -12,19 +16,5976 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - -Request request = new Request(); -try { - Request request = new Request; - // Populate the request object, see [Example.java]() for an example. - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); -} catch (IOException ex) { - throw ex; -} finally { - request.queryParams = null; + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + // Add the example code here + } } -``` \ No newline at end of file +``` + +# Table of Contents + +* [ACCESS SETTINGS](#access_settings) +* [API KEYS](#api_keys) +* [ASM](#asm) +* [BROWSERS](#browsers) +* [CAMPAIGNS](#campaigns) +* [CATEGORIES](#categories) +* [CLIENTS](#clients) +* [CONTACTDB](#contactdb) +* [DEVICES](#devices) +* [GEO](#geo) +* [IPS](#ips) +* [MAIL](#mail) +* [MAIL SETTINGS](#mail_settings) +* [MAILBOX PROVIDERS](#mailbox_providers) +* [PARTNER SETTINGS](#partner_settings) +* [SCOPES](#scopes) +* [STATS](#stats) +* [SUBUSERS](#subusers) +* [SUPPRESSION](#suppression) +* [TEMPLATES](#templates) +* [TRACKING SETTINGS](#tracking_settings) +* [USER](#user) +* [WHITELABEL](#whitelabel) + + + +# ACCESS SETTINGS + +## Retrieve all recent access attempts + +**This endpoint allows you to retrieve a list of all of the IP addresses that recently attempted to access your account either through the User Interface or the API.** + +IP Access Management allows you to control which IP addresses can be used to access your account, either through the User Interface or the API. There is no limit to the number of IP addresses that you can add to your whitelist. It is possible to remove your own IP address from the whitelist, thus preventing yourself from accessing your account. + +For more information, please see our [User Guide](http://sendgrid.com/docs/User_Guide/Settings/ip_access_management.html). + +### GET /access_settings/activity + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "access_settings/activity/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Add one or more IPs to the whitelist + +**This endpoint allows you to add one or more IP addresses to your IP whitelist.** + +When adding an IP to your whitelist, include the IP address in an array. You can whitelist one IP at a time, or you can whitelist multiple IPs at once. + +IP Access Management allows you to control which IP addresses can be used to access your account, either through the User Interface or the API. There is no limit to the number of IP addresses that you can add to your whitelist. It is possible to remove your own IP address from the whitelist, thus preventing yourself from accessing your account. + +For more information, please see our [User Guide](http://sendgrid.com/docs/User_Guide/Settings/ip_access_management.html). + +### POST /access_settings/whitelist + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "access_settings/whitelist/"; + request.requestBody = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a list of currently whitelisted IPs + +**This endpoint allows you to retrieve a list of IP addresses that are currently whitelisted.** + +IP Access Management allows you to control which IP addresses can be used to access your account, either through the User Interface or the API. There is no limit to the number of IP addresses that you can add to your whitelist. It is possible to remove your own IP address from the whitelist, thus preventing yourself from accessing your account. + +For more information, please see our [User Guide](http://sendgrid.com/docs/User_Guide/Settings/ip_access_management.html). + +### GET /access_settings/whitelist + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "access_settings/whitelist/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Remove one or more IPs from the whitelist + +**This endpoint allows you to remove one or more IPs from your IP whitelist.** + +You can remove one IP at a time, or you can remove multiple IP addresses. + +IP Access Management allows you to control which IP addresses can be used to access your account, either through the User Interface or the API. There is no limit to the number of IP addresses that you can add to your whitelist. It is possible to remove your own IP address from the whitelist, thus preventing yourself from accessing your account. + +For more information, please see our [User Guide](http://sendgrid.com/docs/User_Guide/Settings/ip_access_management.html). + +### DELETE /access_settings/whitelist + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "access_settings/whitelist/"; + request.requestBody = "{\"ids\":[1,2,3]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a specific whitelisted IP + +**This endpoint allows you to retreive a specific IP address that has been whitelisted.** + +You must include the ID for the specific IP address you want to retrieve in your call. + +IP Access Management allows you to control which IP addresses can be used to access your account, either through the User Interface or the API. There is no limit to the number of IP addresses that you can add to your whitelist. It is possible to remove your own IP address from the whitelist, thus preventing yourself from accessing your account. + +For more information, please see our [User Guide](http://sendgrid.com/docs/User_Guide/Settings/ip_access_management.html). + +### GET /access_settings/whitelist/{rule_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "access_settings/whitelist/{rule_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Remove a specific IP from the whitelist + +**This endpoint allows you to remove a specific IP address from your IP whitelist.** + +When removing a specific IP address from your whitelist, you must include the ID in your call. + +IP Access Management allows you to control which IP addresses can be used to access your account, either through the User Interface or the API. There is no limit to the number of IP addresses that you can add to your whitelist. It is possible to remove your own IP address from the whitelist, thus preventing yourself from accessing your account. + +For more information, please see our [User Guide](http://sendgrid.com/docs/User_Guide/Settings/ip_access_management.html). + +### DELETE /access_settings/whitelist/{rule_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "access_settings/whitelist/{rule_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# API KEYS + +## Create API keys + +**This enpoint allows you to create a new random API Key for the user.** + +A JSON request body containing a "name" property is required. If number of maximum keys is reached, HTTP 403 will be returned. + +There is a limit of 100 API Keys on your account. + +The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). + +See the [API Key Permissions List](https://sendgrid.com/docs/API_Reference/Web_API_v3/API_Keys/api_key_permissions_list.html) for a list of all available scopes. + +### POST /api_keys + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "api_keys/"; + request.requestBody = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all API Keys belonging to the authenticated user + +**This endpoint allows you to retrieve all API Keys that belong to the authenticated user.** + +The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). + +### GET /api_keys + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "api_keys/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update the name & scopes of an API Key + +**This endpoint allows you to update the name and scopes of a given API key.** + +A JSON request body with a "name" property is required. +Most provide the list of all the scopes an api key should have. + +The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). + + +### PUT /api_keys/{api_key_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "api_keys/{api_key_id}/"; + request.requestBody = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update API keys + +**This endpoint allows you to update the name of an existing API Key.** + +A JSON request body with a "name" property is required. + +The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). + +## URI Parameters + +| URI Parameter | Type | Required? | Description | +|---|---|---|---| +|api_key_id |string | required | The ID of the API Key you are updating.| + +### PATCH /api_keys/{api_key_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "api_keys/{api_key_id}/"; + request.requestBody = "{\"name\":\"A New Hope\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve an existing API Key + +**This endpoint allows you to retrieve a single api key.** + +If the API Key ID does not exist an HTTP 404 will be returned. + +### GET /api_keys/{api_key_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "api_keys/{api_key_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete API keys + +**This endpoint allows you to revoke an existing API Key** + +Authentications using this API Key will fail after this request is made, with some small propogation delay.If the API Key ID does not exist an HTTP 404 will be returned. + +The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). + +## URI Parameters + +| URI Parameter | Type | Required? | Description | +|---|---|---|---| +|api_key_id |string | required | The ID of the API Key you are deleting.| + +### DELETE /api_keys/{api_key_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "api_keys/{api_key_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# ASM + +## Create a Group + +**This endoint allows you to create a new suppression group.** + +Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. + +The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. + +Each user can create up to 25 different suppression groups. + +### POST /asm/groups + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/groups/"; + request.requestBody = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all suppression groups associated with the user. + +**This endpoint allows you to retrieve a list of all suppression groups created by this user.** + +Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. + +The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. + +Each user can create up to 25 different suppression groups. + +### GET /asm/groups + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/groups/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update a suppression group. + +**This endpoint allows you to update or change a suppression group.** + +Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. + +The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. + +Each user can create up to 25 different suppression groups. + +### PATCH /asm/groups/{group_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "asm/groups/{group_id}/"; + request.requestBody = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Get information on a single suppression group. + +**This endpoint allows you to retrieve a single suppression group.** + +Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. + +The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. + +Each user can create up to 25 different suppression groups. + +### GET /asm/groups/{group_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/groups/{group_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a suppression group. + +**This endpoint allows you to delete a suppression group.** + +You can only delete groups that have not been attached to sent mail in the last 60 days. If a recipient uses the "one-click unsubscribe" option on an email associated with a deleted group, that recipient will be added to the global suppression list. + +Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. + +The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. + +Each user can create up to 25 different suppression groups. + +### DELETE /asm/groups/{group_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "asm/groups/{group_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Add suppressions to a suppression group + +**This endpoint allows you to add email addresses to an unsubscribe group.** + +If you attempt to add suppressions to a group that has been deleted or does not exist, the suppressions will be added to the global suppressions list. + +Suppressions are recipient email addresses that are added to [unsubscribe groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html). Once a recipient's address is on the suppressions list for an unsubscribe group, they will not receive any emails that are tagged with that unsubscribe group. + +### POST /asm/groups/{group_id}/suppressions + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/groups/{group_id}/suppressions/"; + request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all suppressions for a suppression group + +**This endpoint allows you to retrieve all suppressed email addresses belonging to the given group.** + +Suppressions are recipient email addresses that are added to [unsubscribe groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html). Once a recipient's address is on the suppressions list for an unsubscribe group, they will not receive any emails that are tagged with that unsubscribe group. + +### GET /asm/groups/{group_id}/suppressions + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/groups/{group_id}/suppressions/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a suppression from a suppression group + +**This endpoint allows you to remove a suppressed email address from the given suppression group.** + +Suppressions are recipient email addresses that are added to [unsubscribe groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html). Once a recipient's address is on the suppressions list for an unsubscribe group, they will not receive any emails that are tagged with that unsubscribe group. + +### DELETE /asm/groups/{group_id}/suppressions/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "asm/groups/{group_id}/suppressions/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Add recipient addresses to the global suppression group. + +**This endpoint allows you to add one or more email addresses to the global suppressions group.** + +A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). + +### POST /asm/suppressions/global + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/suppressions/global/"; + request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a Global Suppression + +**This endpoint allows you to retrieve a global suppression. You can also use this endpoint to confirm if an email address is already globally suppresed.** + +If the email address you include in the URL path parameter `{email}` is alreayd globally suppressed, the response will include that email address. If the address you enter for `{email}` is not globally suppressed, an empty JSON object `{}` will be returned. + +A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). + +### GET /asm/suppressions/global/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/suppressions/global/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a Global Suppression + +**This endpoint allows you to remove an email address from the global suppressions group.** + +A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). + +### DELETE /asm/suppressions/global/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "asm/suppressions/global/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# BROWSERS + +## Retrieve email statistics by browser. + +**This endpoint allows you to retrieve your email statistics segmented by browser type.** + +**We only store up to 7 days of email activity in our database.** By default, 500 items will be returned per request via the Advanced Stats API endpoints. + +Advanced Stats provide a more in-depth view of your email statistics and the actions taken by your recipients. You can segment these statistics by geographic location, device type, client type, browser, and mailbox provider. For more information about statistics, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/index.html). + +### GET /browsers/stats + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "browsers/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("browsers", "test_string"); + queryParams.put("limit", "test_string"); + queryParams.put("offset", "test_string"); + queryParams.put("start_date", "2016-01-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# CAMPAIGNS + +## Create a Campaign + +**This endpoint allows you to create a campaign.** + +Our Marketing Campaigns API lets you create, manage, send, and schedule campaigns. + +Note: In order to send or schedule the campaign, you will be required to provide a subject, sender ID, content (we suggest both html and plain text), and at least one list or segment ID. This information is not required when you create a campaign. + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### POST /campaigns + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/"; + request.requestBody = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all Campaigns + +**This endpoint allows you to retrieve a list of all of your campaigns.** + +Returns campaigns in reverse order they were created (newest first). + +Returns an empty array if no campaigns exist. + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### GET /campaigns + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "campaigns/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "0"); + queryParams.put("offset", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update a Campaign + +Update a campaign. This is especially useful if you only set up the campaign using POST /campaigns, but didn't set many of the parameters. + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### PATCH /campaigns/{campaign_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "campaigns/{campaign_id}/"; + request.requestBody = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a single campaign + +**This endpoint allows you to retrieve a specific campaign.** + +Our Marketing Campaigns API lets you create, manage, send, and schedule campaigns. + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### GET /campaigns/{campaign_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "campaigns/{campaign_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a Campaign + +**This endpoint allows you to delete a specific campaign.** + +Our Marketing Campaigns API lets you create, manage, send, and schedule campaigns. + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### DELETE /campaigns/{campaign_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "campaigns/{campaign_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update a Scheduled Campaign + +**This endpoint allows to you change the scheduled time and date for a campaign to be sent.** + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### PATCH /campaigns/{campaign_id}/schedules + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.requestBody = "{\"send_at\":1489451436}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Schedule a Campaign + +**This endpoint allows you to schedule a specific date and time for your campaign to be sent.** + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### POST /campaigns/{campaign_id}/schedules + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.requestBody = "{\"send_at\":1489771528}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## View Scheduled Time of a Campaign + +**This endpoint allows you to retrieve the date and time that the given campaign has been scheduled to be sent.** + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### GET /campaigns/{campaign_id}/schedules + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "campaigns/{campaign_id}/schedules/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Unschedule a Scheduled Campaign + +**This endpoint allows you to unschedule a campaign that has already been scheduled to be sent.** + +A successful unschedule will return a 204. +If the specified campaign is in the process of being sent, the only option is to cancel (a different method). + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### DELETE /campaigns/{campaign_id}/schedules + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "campaigns/{campaign_id}/schedules/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Send a Campaign + +**This endpoint allows you to immediately send a campaign at the time you make the API call.** + +Normally a POST would have a request body, but since this endpoint is telling us to send a resource that is already created, a request body is not needed. + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### POST /campaigns/{campaign_id}/schedules/now + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/{campaign_id}/schedules/now/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Send a Test Campaign + +**This endpoint allows you to send a test campaign.** + +To send to multiple addresses, use an array for the JSON "to" value ["one@address","two@address"] + +For more information: + +* [User Guide > Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) + +### POST /campaigns/{campaign_id}/schedules/test + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/{campaign_id}/schedules/test/"; + request.requestBody = "{\"to\":\"your.email@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# CATEGORIES + +## Retrieve all categories + +**This endpoint allows you to retrieve a list of all of your categories.** + +Categories can help organize your email analytics by enabling you to tag emails by type or broad topic. You can define your own custom categories. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/categories.html). + +### GET /categories + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "categories/"; + Map queryParams = new HashMap(); + queryParams.put("category", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve Email Statistics for Categories + +**This endpoint allows you to retrieve all of your email statistics for each of your categories.** + +If you do not define any query parameters, this endpoint will return a sum for each category in groups of 10. + +Categories allow you to group your emails together according to broad topics that you define. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/categories.html). + +### GET /categories/stats + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "categories/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("categories", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] + +**This endpoint allows you to retrieve the total sum of each email statistic for every category over the given date range.** + +If you do not define any query parameters, this endpoint will return a sum for each category in groups of 10. + +Categories allow you to group your emails together according to broad topics that you define. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/categories.html). + +### GET /categories/stats/sums + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "categories/stats/sums/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# CLIENTS + +## Retrieve email statistics by client type. + +**This endpoint allows you to retrieve your email statistics segmented by client type.** + +**We only store up to 7 days of email activity in our database.** By default, 500 items will be returned per request via the Advanced Stats API endpoints. + +Advanced Stats provide a more in-depth view of your email statistics and the actions taken by your recipients. You can segment these statistics by geographic location, device type, client type, browser, and mailbox provider. For more information about statistics, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/index.html). + +### GET /clients/stats + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "clients/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve stats by a specific client type. + +**This endpoint allows you to retrieve your email statistics segmented by a specific client type.** + +**We only store up to 7 days of email activity in our database.** By default, 500 items will be returned per request via the Advanced Stats API endpoints. + +## Available Client Types +- phone +- tablet +- webmail +- desktop + +Advanced Stats provide a more in-depth view of your email statistics and the actions taken by your recipients. You can segment these statistics by geographic location, device type, client type, browser, and mailbox provider. For more information about statistics, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/index.html). + +### GET /clients/{client_type}/stats + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "clients/{client_type}/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# CONTACTDB + +## Create a Custom Field + +**This endpoint allows you to create a custom field.** + +The contactdb is a database of your contacts for [SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). + +### POST /contactdb/custom_fields + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/custom_fields/"; + request.requestBody = "{\"type\":\"text\",\"name\":\"pet\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all custom fields + +**This endpoint allows you to retrieve all custom fields.** + +The contactdb is a database of your contacts for [SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). + +### GET /contactdb/custom_fields + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/custom_fields/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a Custom Field + +**This endpoint allows you to retrieve a custom field by ID.** + +The contactdb is a database of your contacts for [SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). + +### GET /contactdb/custom_fields/{custom_field_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a Custom Field + +**This endpoint allows you to delete a custom field by ID.** + +The contactdb is a database of your contacts for [SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). + +### DELETE /contactdb/custom_fields/{custom_field_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Create a List + +**This endpoint allows you to create a list for your recipients.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### POST /contactdb/lists + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/lists/"; + request.requestBody = "{\"name\":\"your list name\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all lists + +**This endpoint allows you to retrieve all of your recipient lists. If you don't have any lists, an empty array will be returned.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### GET /contactdb/lists + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/lists/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete Multiple lists + +**This endpoint allows you to delete multiple recipient lists.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### DELETE /contactdb/lists + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/lists/"; + request.requestBody = "[1,2,3,4]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update a List + +**This endpoint allows you to update the name of one of your recipient lists.** + + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### PATCH /contactdb/lists/{list_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "contactdb/lists/{list_id}/"; + request.requestBody = "{\"name\":\"newlistname\"}"; + Map queryParams = new HashMap(); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a single list + +This endpoint allows you to retrieve a single recipient list. + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### GET /contactdb/lists/{list_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/lists/{list_id}/"; + Map queryParams = new HashMap(); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a List + +**This endpoint allows you to delete a specific recipient list with the given ID.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### DELETE /contactdb/lists/{list_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/lists/{list_id}/"; + Map queryParams = new HashMap(); + queryParams.put("delete_contacts", "true"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Add Multiple Recipients to a List + +**This endpoint allows you to add multiple recipients to a list.** + +Adds existing recipients to a list, passing in the recipient IDs to add. Recipient IDs should be passed exactly as they are returned from recipient endpoints. + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### POST /contactdb/lists/{list_id}/recipients + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/lists/{list_id}/recipients/"; + request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all recipients on a List + +**This endpoint allows you to retrieve all recipients on the list with the given ID.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### GET /contactdb/lists/{list_id}/recipients + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/lists/{list_id}/recipients/"; + Map queryParams = new HashMap(); + queryParams.put("page", "1"); + queryParams.put("page_size", "1"); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Add a Single Recipient to a List + +**This endpoint allows you to add a single recipient to a list.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### POST /contactdb/lists/{list_id}/recipients/{recipient_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a Single Recipient from a Single List + +**This endpoint allows you to delete a single recipient from a list.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + Map queryParams = new HashMap(); + queryParams.put("recipient_id", "0"); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update Recipient + +**This endpoint allows you to update one or more recipients.** + +The body of an API call to this endpoint must include an array of one or more recipient objects. + +It is of note that you can add custom field data as parameters on recipient objects. We have provided an example using some of the default custom fields SendGrid provides. + +The contactdb is a database of your contacts for [SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). + +### PATCH /contactdb/recipients + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "contactdb/recipients/"; + request.requestBody = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Add recipients + +**This endpoint allows you to add a Marketing Campaigns recipient.** + +It is of note that you can add custom field data as a parameter on this endpoint. We have provided an example using some of the default custom fields SendGrid provides. + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### POST /contactdb/recipients + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/recipients/"; + request.requestBody = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve recipients + +**This endpoint allows you to retrieve all of your Marketing Campaigns recipients.** + +Batch deletion of a page makes it possible to receive an empty page of recipients before reaching the end of +the list of recipients. To avoid this issue; iterate over pages until a 404 is retrieved. + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### GET /contactdb/recipients + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/"; + Map queryParams = new HashMap(); + queryParams.put("page", "1"); + queryParams.put("page_size", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete Recipient + +**This endpoint allows you to deletes one or more recipients.** + +The body of an API call to this endpoint must include an array of recipient IDs of the recipients you want to delete. + +The contactdb is a database of your contacts for [SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). + +### DELETE /contactdb/recipients + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/recipients/"; + request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve the count of billable recipients + +**This endpoint allows you to retrieve the number of Marketing Campaigns recipients that you will be billed for.** + +You are billed for marketing campaigns based on the highest number of recipients you have had in your account at one time. This endpoint will allow you to know the current billable count value. + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### GET /contactdb/recipients/billable_count + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/billable_count/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a Count of Recipients + +**This endpoint allows you to retrieve the total number of Marketing Campaigns recipients.** + +The contactdb is a database of your contacts for [SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). + +### GET /contactdb/recipients/count + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/count/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve recipients matching search criteria + +**This endpoint allows you to perform a search on all of your Marketing Campaigns recipients.** + +field_name: + +* is a variable that is substituted for your actual custom field name from your recipient. +* Text fields must be url-encoded. Date fields are searchable only by unix timestamp (e.g. 2/2/2015 becomes 1422835200) +* If field_name is a 'reserved' date field, such as created_at or updated_at, the system will internally convert +your epoch time to a date range encompassing the entire day. For example, an epoch time of 1422835600 converts to +Mon, 02 Feb 2015 00:06:40 GMT, but internally the system will search from Mon, 02 Feb 2015 00:00:00 GMT through +Mon, 02 Feb 2015 23:59:59 GMT. + +The contactdb is a database of your contacts for [SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). + +### GET /contactdb/recipients/search + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/search/"; + Map queryParams = new HashMap(); + queryParams.put("{field_name}", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a single recipient + +**This endpoint allows you to retrieve a single recipient by ID from your contact database.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### GET /contactdb/recipients/{recipient_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/{recipient_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a Recipient + +**This endpoint allows you to delete a single recipient with the given ID from your contact database.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### DELETE /contactdb/recipients/{recipient_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/recipients/{recipient_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve the lists that a recipient is on + +**This endpoint allows you to retrieve the lists that a given recipient belongs to.** + +Each recipient can be on many lists. This endpoint gives you all of the lists that any one recipient has been added to. + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +### GET /contactdb/recipients/{recipient_id}/lists + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/{recipient_id}/lists/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve reserved fields + +**This endpoint allows you to list all fields that are reserved and can't be used for custom field names.** + +The contactdb is a database of your contacts for [SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). + +### GET /contactdb/reserved_fields + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/reserved_fields/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Create a Segment + +**This endpoint allows you to create a segment.** + +All recipients in your contactdb will be added or removed automatically depending on whether they match the criteria for this segment. + +List Id: + +* Send this to segment from an existing list +* Don't send this in order to segment from your entire contactdb. + +Valid operators for create and update depend on the type of the field you are segmenting: + +* **Dates:** "eq", "ne", "lt" (before), "gt" (after) +* **Text:** "contains", "eq" (is - matches the full field), "ne" (is not - matches any field where the entire field is not the condition value) +* **Numbers:** "eq", "lt", "gt" +* **Email Clicks and Opens:** "eq" (opened), "ne" (not opened) + +Segment conditions using "eq" or "ne" for email clicks and opens should provide a "field" of either *clicks.campaign_identifier* or *opens.campaign_identifier*. The condition value should be a string containing the id of a completed campaign. + +Segments may contain multiple condtions, joined by an "and" or "or" in the "and_or" field. The first condition in the conditions list must have an empty "and_or", and subsequent conditions must all specify an "and_or". + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +For more information about segments in Marketing Campaigns, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/lists.html#-Create-a-Segment). + +### POST /contactdb/segments + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/segments/"; + request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all segments + +**This endpoint allows you to retrieve all of your segments.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +For more information about segments in Marketing Campaigns, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/lists.html#-Create-a-Segment). + +### GET /contactdb/segments + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/segments/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update a segment + +**This endpoint allows you to update a segment.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +For more information about segments in Marketing Campaigns, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/lists.html#-Create-a-Segment). + +### PATCH /contactdb/segments/{segment_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "contactdb/segments/{segment_id}/"; + request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; + Map queryParams = new HashMap(); + queryParams.put("segment_id", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a segment + +**This endpoint allows you to retrieve a single segment with the given ID.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +For more information about segments in Marketing Campaigns, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/lists.html#-Create-a-Segment). + +### GET /contactdb/segments/{segment_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/segments/{segment_id}/"; + Map queryParams = new HashMap(); + queryParams.put("segment_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a segment + +**This endpoint allows you to delete a segment from your recipients database.** + +You also have the option to delete all the contacts from your Marketing Campaigns recipient database who were in this segment. + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +For more information about segments in Marketing Campaigns, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/lists.html#-Create-a-Segment). + +### DELETE /contactdb/segments/{segment_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/segments/{segment_id}/"; + Map queryParams = new HashMap(); + queryParams.put("delete_contacts", "true"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve recipients on a segment + +**This endpoint allows you to retrieve all of the recipients in a segment with the given ID.** + +The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. + +For more information about segments in Marketing Campaigns, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/lists.html#-Create-a-Segment). + +### GET /contactdb/segments/{segment_id}/recipients + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/segments/{segment_id}/recipients/"; + Map queryParams = new HashMap(); + queryParams.put("page", "1"); + queryParams.put("page_size", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# DEVICES + +## Retrieve email statistics by device type. + +**This endpoint allows you to retrieve your email statistics segmented by the device type.** + +**We only store up to 7 days of email activity in our database.** By default, 500 items will be returned per request via the Advanced Stats API endpoints. + +## Available Device Types +| **Device** | **Description** | **Example** | +|---|---|---| +| Desktop | Email software on desktop computer. | I.E., Outlook, Sparrow, or Apple Mail. | +| Webmail | A web-based email client. | I.E., Yahoo, Google, AOL, or Outlook.com. | +| Phone | A smart phone. | iPhone, Android, Blackberry, etc. +| Tablet | A tablet computer. | iPad, android based tablet, etc. | +| Other | An unrecognized device. | + +Advanced Stats provide a more in-depth view of your email statistics and the actions taken by your recipients. You can segment these statistics by geographic location, device type, client type, browser, and mailbox provider. For more information about statistics, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/index.html). + +### GET /devices/stats + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "devices/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# GEO + +## Retrieve email statistics by country and state/province. + +**This endpoint allows you to retrieve your email statistics segmented by country and state/province.** + +**We only store up to 7 days of email activity in our database.** By default, 500 items will be returned per request via the Advanced Stats API endpoints. + +Advanced Stats provide a more in-depth view of your email statistics and the actions taken by your recipients. You can segment these statistics by geographic location, device type, client type, browser, and mailbox provider. For more information about statistics, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/index.html). + +### GET /geo/stats + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "geo/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("country", "US"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# IPS + +## Retrieve all IP addresses + +**This endpoint allows you to retrieve a list of all assigned and unassigned IPs.** + +Response includes warm up status, pools, assigned subusers, and whitelabel info. The start_date field corresponds to when warmup started for that IP. + +A single IP address or a range of IP addresses may be dedicated to an account in order to send email for multiple domains. The reputation of this IP is based on the aggregate performance of all the senders who use it. + +### GET /ips + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/"; + Map queryParams = new HashMap(); + queryParams.put("subuser", "test_string"); + queryParams.put("ip", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("exclude_whitelabels", "true"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all assigned IPs + +**This endpoint allows you to retrieve only assigned IP addresses.** + +A single IP address or a range of IP addresses may be dedicated to an account in order to send email for multiple domains. The reputation of this IP is based on the aggregate performance of all the senders who use it. + +### GET /ips/assigned + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/assigned/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Create an IP pool. + +**This endpoint allows you to create an IP pool.** + +**Each user can create up to 10 different IP pools.** + +IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. + +IP pools can only be used with whitelabeled IP addresses. + +If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. + +### POST /ips/pools + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "ips/pools/"; + request.requestBody = "{\"name\":\"marketing\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all IP pools. + +**This endpoint allows you to retreive all of your IP pools.** + +IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. + +IP pools can only be used with whitelabeled IP addresses. + +If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. + +### GET /ips/pools + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/pools/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update an IP pools name. + +**This endpoint allows you to update the name of an IP pool.** + +IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. + +IP pools can only be used with whitelabeled IP addresses. + +If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. + +### PUT /ips/pools/{pool_name} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "ips/pools/{pool_name}/"; + request.requestBody = "{\"name\":\"new_pool_name\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all IPs in a specified pool. + +**This endpoint allows you to list all of the IP addresses that are in a specific IP pool.** + +IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. + +IP pools can only be used with whitelabeled IP addresses. + +If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. + +### GET /ips/pools/{pool_name} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/pools/{pool_name}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete an IP pool. + +**This endpoint allows you to delete an IP pool.** + +IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. + +IP pools can only be used with whitelabeled IP addresses. + +If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. + +### DELETE /ips/pools/{pool_name} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "ips/pools/{pool_name}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Add an IP address to a pool + +**This endpoint allows you to add an IP address to an IP pool.** + +You can add the same IP address to multiple pools. It may take up to 60 seconds for your IP address to be added to a pool after your request is made. + +A single IP address or a range of IP addresses may be dedicated to an account in order to send email for multiple domains. The reputation of this IP is based on the aggregate performance of all the senders who use it. + +### POST /ips/pools/{pool_name}/ips + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "ips/pools/{pool_name}/ips/"; + request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Remove an IP address from a pool. + +**This endpoint allows you to remove an IP address from an IP pool.** + +The same IP address can be added to multiple IP pools. + +A single IP address or a range of IP addresses may be dedicated to an account in order to send email for multiple domains. The reputation of this IP is based on the aggregate performance of all the senders who use it. + +### DELETE /ips/pools/{pool_name}/ips/{ip} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "ips/pools/{pool_name}/ips/{ip}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Add an IP to warmup + +**This endpoint allows you to enter an IP address into warmup mode.** + +SendGrid can automatically warm up dedicated IP addresses by limiting the amount of mail that can be sent through them per hour, with the limit determined by how long the IP address has been in warmup. See the [warmup schedule](https://sendgrid.com/docs/API_Reference/Web_API_v3/IP_Management/ip_warmup_schedule.html) for more details on how SendGrid limits your email traffic for IPs in warmup. + +For more general information about warming up IPs, please see our [Classroom](https://sendgrid.com/docs/Classroom/Deliver/Delivery_Introduction/warming_up_ips.html). + +### POST /ips/warmup + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "ips/warmup/"; + request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all IPs currently in warmup + +**This endpoint allows you to retrieve all of your IP addresses that are currently warming up.** + +SendGrid can automatically warm up dedicated IP addresses by limiting the amount of mail that can be sent through them per hour, with the limit determined by how long the IP address has been in warmup. See the [warmup schedule](https://sendgrid.com/docs/API_Reference/Web_API_v3/IP_Management/ip_warmup_schedule.html) for more details on how SendGrid limits your email traffic for IPs in warmup. + +For more general information about warming up IPs, please see our [Classroom](https://sendgrid.com/docs/Classroom/Deliver/Delivery_Introduction/warming_up_ips.html). + +### GET /ips/warmup + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/warmup/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve warmup status for a specific IP address + +**This endpoint allows you to retrieve the warmup status for a specific IP address.** + +SendGrid can automatically warm up dedicated IP addresses by limiting the amount of mail that can be sent through them per hour, with the limit determined by how long the IP address has been in warmup. See the [warmup schedule](https://sendgrid.com/docs/API_Reference/Web_API_v3/IP_Management/ip_warmup_schedule.html) for more details on how SendGrid limits your email traffic for IPs in warmup. + +For more general information about warming up IPs, please see our [Classroom](https://sendgrid.com/docs/Classroom/Deliver/Delivery_Introduction/warming_up_ips.html). + +### GET /ips/warmup/{ip_address} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/warmup/{ip_address}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Remove an IP from warmup + +**This endpoint allows you to remove an IP address from warmup mode.** + +SendGrid can automatically warm up dedicated IP addresses by limiting the amount of mail that can be sent through them per hour, with the limit determined by how long the IP address has been in warmup. See the [warmup schedule](https://sendgrid.com/docs/API_Reference/Web_API_v3/IP_Management/ip_warmup_schedule.html) for more details on how SendGrid limits your email traffic for IPs in warmup. + +For more general information about warming up IPs, please see our [Classroom](https://sendgrid.com/docs/Classroom/Deliver/Delivery_Introduction/warming_up_ips.html). + +### DELETE /ips/warmup/{ip_address} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "ips/warmup/{ip_address}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all IP pools an IP address belongs to + +**This endpoint allows you to see which IP pools a particular IP address has been added to.** + +The same IP address can be added to multiple IP pools. + +A single IP address or a range of IP addresses may be dedicated to an account in order to send email for multiple domains. The reputation of this IP is based on the aggregate performance of all the senders who use it. + +### GET /ips/{ip_address} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/{ip_address}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# MAIL + +## Create a batch ID + +**This endpoint allows you to generate a new batch ID. This batch ID can be associated with scheduled sends via the mail/send endpoint.** + +If you set the SMTPAPI header `batch_id`, it allows you to then associate multiple scheduled mail/send requests together with the same ID. Then at anytime up to 10 minutes before the schedule date, you can cancel all of the mail/send requests that have this batch ID by calling the Cancel Scheduled Send endpoint. + +More Information: + +* [Scheduling Parameters > Batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) + +### POST /mail/batch + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "mail/batch/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Validate batch ID + +**This endpoint allows you to validate a batch ID.** + +If you set the SMTPAPI header `batch_id`, it allows you to then associate multiple scheduled mail/send requests together with the same ID. Then at anytime up to 10 minutes before the schedule date, you can cancel all of the mail/send requests that have this batch ID by calling the Cancel Scheduled Send endpoint. + +More Information: + +* [Scheduling Parameters > Batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) + +### GET /mail/batch/{batch_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail/batch/{batch_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## v3 Mail Send Beta + +This endpoint allows you to send email over SendGrids v3 Web API, the most recent version of our API. If you are looking for documentation about the v2 Mail Send endpoint, please see our [v2 API Reference](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). + +* Top level parameters are referred to as "global". +* Individual fields within the personalizations array will override any other global, or message level, parameters that are defined outside of personalizations. + +For an overview of the v3 Mail Send endpoint, please visit our [v3 API Reference](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html) + +For more detailed information about how to use the v3 Mail Send endpoint, please visit our [Classroom](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/index.html). + +### POST /mail/send/beta + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "mail/send/beta/"; + request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# MAIL SETTINGS + +## Retrieve all mail settings + +**This endpoint allows you to retrieve a list of all mail settings.** + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### GET /mail_settings + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update address whitelist mail settings + +**This endpoint allows you to update your current email address whitelist settings.** + +The address whitelist setting whitelists a specified email address or domain for which mail should never be suppressed. For example, you own the domain example.com, and one or more of your recipients use email@example.com addresses, by placing example.com in the address whitelist setting, all bounces, blocks, and unsubscribes logged for that domain will be ignored and sent as if under normal sending conditions. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### PATCH /mail_settings/address_whitelist + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/address_whitelist/"; + request.requestBody = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve address whitelist mail settings + +**This endpoint allows you to retrieve your current email address whitelist settings.** + +The address whitelist setting whitelists a specified email address or domain for which mail should never be suppressed. For example, you own the domain example.com, and one or more of your recipients use email@example.com addresses, by placing example.com in the address whitelist setting, all bounces, blocks, and unsubscribes logged for that domain will be ignored and sent as if under normal sending conditions. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### GET /mail_settings/address_whitelist + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/address_whitelist/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update BCC mail settings + +**This endpoint allows you to update your current BCC mail settings.** + +When the BCC mail setting is enabled, SendGrid will automatically send a blind carbon copy (BCC) to an address for every email sent without adding that address to the header. Please note that only one email address may be entered in this field, if you wish to distribute BCCs to multiple addresses you will need to create a distribution group or use forwarding rules. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### PATCH /mail_settings/bcc + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/bcc/"; + request.requestBody = "{\"enabled\":false,\"email\":\"email@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all BCC mail settings + +**This endpoint allows you to retrieve your current BCC mail settings.** + +When the BCC mail setting is enabled, SendGrid will automatically send a blind carbon copy (BCC) to an address for every email sent without adding that address to the header. Please note that only one email address may be entered in this field, if you wish to distribute BCCs to multiple addresses you will need to create a distribution group or use forwarding rules. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### GET /mail_settings/bcc + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/bcc/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update bounce purge mail settings + +**This endpoint allows you to update your current bounce purge settings.** + +This setting allows you to set a schedule for SendGrid to automatically delete contacts from your soft and hard bounce suppression lists. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### PATCH /mail_settings/bounce_purge + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/bounce_purge/"; + request.requestBody = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve bounce purge mail settings + +**This endpoint allows you to retrieve your current bounce purge settings.** + +This setting allows you to set a schedule for SendGrid to automatically delete contacts from your soft and hard bounce suppression lists. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### GET /mail_settings/bounce_purge + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/bounce_purge/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update footer mail settings + +**This endpoint allows you to update your current Footer mail settings.** + +The footer setting will insert a custom footer at the bottom of the text and HTML bodies. Use the embedded HTML editor and plain text entry fields to create the content of the footers to be inserted into your emails. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### PATCH /mail_settings/footer + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/footer/"; + request.requestBody = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve footer mail settings + +**This endpoint allows you to retrieve your current Footer mail settings.** + +The footer setting will insert a custom footer at the bottom of the text and HTML bodies. Use the embedded HTML editor and plain text entry fields to create the content of the footers to be inserted into your emails. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### GET /mail_settings/footer + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/footer/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update forward bounce mail settings + +**This endpoint allows you to update your current bounce forwarding mail settings.** + +Activating this setting allows you to specify an email address to which bounce reports are forwarded. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### PATCH /mail_settings/forward_bounce + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/forward_bounce/"; + request.requestBody = "{\"enabled\":true,\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve forward bounce mail settings + +**This endpoint allows you to retrieve your current bounce forwarding mail settings.** + +Activating this setting allows you to specify an email address to which bounce reports are forwarded. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### GET /mail_settings/forward_bounce + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/forward_bounce/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update forward spam mail settings + +**This endpoint allows you to update your current Forward Spam mail settings.** + +Enabling the forward spam setting allows you to specify an email address to which spam reports will be forwarded. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### PATCH /mail_settings/forward_spam + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/forward_spam/"; + request.requestBody = "{\"enabled\":false,\"email\":\"\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve forward spam mail settings + +**This endpoint allows you to retrieve your current Forward Spam mail settings.** + +Enabling the forward spam setting allows you to specify an email address to which spam reports will be forwarded. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### GET /mail_settings/forward_spam + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/forward_spam/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update plain content mail settings + +**This endpoint allows you to update your current Plain Content mail settings.** + +The plain content setting will automatically convert any plain text emails that you send to HTML before sending. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### PATCH /mail_settings/plain_content + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/plain_content/"; + request.requestBody = "{\"enabled\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve plain content mail settings + +**This endpoint allows you to retrieve your current Plain Content mail settings.** + +The plain content setting will automatically convert any plain text emails that you send to HTML before sending. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### GET /mail_settings/plain_content + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/plain_content/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update spam check mail settings + +**This endpoint allows you to update your current spam checker mail settings.** + +The spam checker filter notifies you when emails are detected that exceed a predefined spam threshold. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### PATCH /mail_settings/spam_check + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/spam_check/"; + request.requestBody = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve spam check mail settings + +**This endpoint allows you to retrieve your current Spam Checker mail settings.** + +The spam checker filter notifies you when emails are detected that exceed a predefined spam threshold. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### GET /mail_settings/spam_check + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/spam_check/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update template mail settings + +**This endpoint allows you to update your current legacy email template settings.** + +This setting refers to our original email templates. We currently support more fully featured [transactional templates](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +The legacy email template setting wraps an HTML template around your email content. This can be useful for sending out marketing email and/or other HTML formatted messages. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### PATCH /mail_settings/template + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/template/"; + request.requestBody = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve legacy template mail settings + +**This endpoint allows you to retrieve your current legacy email template settings.** + +This setting refers to our original email templates. We currently support more fully featured [transactional templates](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +The legacy email template setting wraps an HTML template around your email content. This can be useful for sending out marketing email and/or other HTML formatted messages. + +Mail settings allow you to tell SendGrid specific things to do to every email that you send to your recipients over SendGrids [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). + +### GET /mail_settings/template + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/template/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# MAILBOX PROVIDERS + +## Retrieve email statistics by mailbox provider. + +**This endpoint allows you to retrieve your email statistics segmented by recipient mailbox provider.** + +**We only store up to 7 days of email activity in our database.** By default, 500 items will be returned per request via the Advanced Stats API endpoints. + +Advanced Stats provide a more in-depth view of your email statistics and the actions taken by your recipients. You can segment these statistics by geographic location, device type, client type, browser, and mailbox provider. For more information about statistics, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/index.html). + +### GET /mailbox_providers/stats + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mailbox_providers/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("mailbox_providers", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# PARTNER SETTINGS + +## Returns a list of all partner settings. + +**This endpoint allows you to retrieve a list of all partner settings that you can enable.** + +Our partner settings allow you to integrate your SendGrid account with our partners to increase your SendGrid experience and functionality. For more information about our partners, and how you can begin integrating with them, please visit our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/partners.html). + +### GET /partner_settings + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "partner_settings/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Updates New Relic partner settings. + +**This endpoint allows you to update or change your New Relic partner settings.** + +Our partner settings allow you to integrate your SendGrid account with our partners to increase your SendGrid experience and functionality. For more information about our partners, and how you can begin integrating with them, please visit our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/partners.html). + +By integrating with New Relic, you can send your SendGrid email statistics to your New Relic Dashboard. If you enable this setting, your stats will be sent to New Relic every 5 minutes. You will need your New Relic License Key to enable this setting. For more information, please see our [Classroom](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/new_relic.html). + +### PATCH /partner_settings/new_relic + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "partner_settings/new_relic/"; + request.requestBody = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Returns all New Relic partner settings. + +**This endpoint allows you to retrieve your current New Relic partner settings.** + +Our partner settings allow you to integrate your SendGrid account with our partners to increase your SendGrid experience and functionality. For more information about our partners, and how you can begin integrating with them, please visit our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/partners.html). + +By integrating with New Relic, you can send your SendGrid email statistics to your New Relic Dashboard. If you enable this setting, your stats will be sent to New Relic every 5 minutes. You will need your New Relic License Key to enable this setting. For more information, please see our [Classroom](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/new_relic.html). + +### GET /partner_settings/new_relic + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "partner_settings/new_relic/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# SCOPES + +## Retrieve a list of scopes for which this user has access. + +**This endpoint returns a list of all scopes that this user has access to.** + +API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html), or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). API Keys may be assigned certain permissions, or scopes, that limit which API endpoints they are able to access. For a more detailed explanation of how you can use API Key permissios, please visit our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/api_keys.html#-API-Key-Permissions) or [Classroom](https://sendgrid.com/docs/Classroom/Basics/API/api_key_permissions.html). + +### GET /scopes + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "scopes/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# STATS + +## Retrieve global email statistics + +**This endpoint allows you to retrieve all of your global email statistics between a given date range.** + +Parent accounts will see aggregated stats for their account and all subuser accounts. Subuser accounts will only see their own stats. + +### GET /stats + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# SUBUSERS + +## Create Subuser + +This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. + +For more information about Subusers: + +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) + +### POST /subusers + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "subusers/"; + request.requestBody = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## List all Subusers + +This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. + +For more information about Subusers: + +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) + +### GET /subusers + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + queryParams.put("limit", "0"); + queryParams.put("offset", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve Subuser Reputations + +Subuser sender reputations give a good idea how well a sender is doing with regards to how recipients and recipient servers react to the mail that is being received. When a bounce, spam report, or other negative action happens on a sent email, it will effect your sender rating. + +This endpoint allows you to request the reputations for your subusers. + +### GET /subusers/reputations + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/reputations/"; + Map queryParams = new HashMap(); + queryParams.put("usernames", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve email statistics for your subusers. + +**This endpoint allows you to retrieve the email statistics for the given subusers.** + +You may retrieve statistics for up to 10 different subusers by including an additional _subusers_ parameter for each additional subuser. + +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. + +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). + +### GET /subusers/stats + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("subusers", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve monthly stats for all subusers + +**This endpoint allows you to retrieve the monthly email statistics for all subusers over the given date range.** + +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. + +When using the `sort_by_metric` to sort your stats by a specific metric, you can not sort by the following metrics: +`bounce_drops`, `deferred`, `invalid_emails`, `processed`, `spam_report_drops`, `spam_reports`, or `unsubscribe_drops`. + +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). + +### GET /subusers/stats/monthly + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/stats/monthly/"; + Map queryParams = new HashMap(); + queryParams.put("subuser", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("date", "test_string"); + queryParams.put("sort_by_direction", "asc"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve the totals for each email statistic metric for all subusers. + +**This endpoint allows you to retrieve the total sums of each email statistic metric for all subusers over the given date range.** + + +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. + +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). + +### GET /subusers/stats/sums + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/stats/sums/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Enable/disable a subuser + +This endpoint allows you to enable or disable a subuser. + +For more information about Subusers: + +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) + +### PATCH /subusers/{subuser_name} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "subusers/{subuser_name}/"; + request.requestBody = "{\"disabled\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a subuser + +This endpoint allows you to delete a subuser. This is a permanent action, once deleted a subuser cannot be retrieved. + +For more information about Subusers: + +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) + +### DELETE /subusers/{subuser_name} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "subusers/{subuser_name}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update IPs assigned to a subuser + +Each subuser should be assigned to an IP address, from which all of this subuser's mail will be sent. Often, this is the same IP as the parent account, but each subuser can have their own, or multiple, IP addresses as well. + +More information: + +* [How to request more IPs](https://sendgrid.com/docs/Classroom/Basics/Account/adding_an_additional_dedicated_ip_to_your_account.html) +* [IPs can be whitelabeled](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/ips.html) + +### PUT /subusers/{subuser_name}/ips + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "subusers/{subuser_name}/ips/"; + request.requestBody = "[\"127.0.0.1\"]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update Monitor Settings for a subuser + +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. + +### PUT /subusers/{subuser_name}/monitor + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "subusers/{subuser_name}/monitor/"; + request.requestBody = "{\"frequency\":500,\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Create monitor settings + +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. + +### POST /subusers/{subuser_name}/monitor + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "subusers/{subuser_name}/monitor/"; + request.requestBody = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve monitor settings for a subuser + +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. + +### GET /subusers/{subuser_name}/monitor + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/{subuser_name}/monitor/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete monitor settings + +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. + +### DELETE /subusers/{subuser_name}/monitor + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "subusers/{subuser_name}/monitor/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve the monthly email statistics for a single subuser + +**This endpoint allows you to retrive the monthly email statistics for a specific subuser.** + +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. + +When using the `sort_by_metric` to sort your stats by a specific metric, you can not sort by the following metrics: +`bounce_drops`, `deferred`, `invalid_emails`, `processed`, `spam_report_drops`, `spam_reports`, or `unsubscribe_drops`. + +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). + +### GET /subusers/{subuser_name}/stats/monthly + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/{subuser_name}/stats/monthly/"; + Map queryParams = new HashMap(); + queryParams.put("date", "test_string"); + queryParams.put("sort_by_direction", "asc"); + queryParams.put("limit", "0"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# SUPPRESSION + +## Retrieve all blocks + +**This endpoint allows you to retrieve a list of all email addresses that are currently on your blocks list.** + +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). + +### GET /suppression/blocks + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/blocks/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete blocks + +**This endpoint allows you to delete all email addresses on your blocks list.** + +There are two options for deleting blocked emails: + +1. You can delete all blocked emails by setting `delete_all` to true in the request body. +2. You can delete some blocked emails by specifying the email addresses in an array in the request body. + +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). + +### DELETE /suppression/blocks + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/blocks/"; + request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a specific block + +**This endpoint allows you to retrieve a specific email address from your blocks list.** + +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). + +### GET /suppression/blocks/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/blocks/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a specific block + +**This endpoint allows you to delete a specific email address from your blocks list.** + +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). + +### DELETE /suppression/blocks/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/blocks/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all bounces + +**This endpoint allows you to retrieve all of your bounces.** + +Bounces are messages that are returned to the server that sent it. + +For more information see: + +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) + +### GET /suppression/bounces + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/bounces/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "0"); + queryParams.put("end_time", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete bounces + +**This endpoint allows you to delete all of your bounces. You can also use this endpoint to remove a specific email address from your bounce list.** + +Bounces are messages that are returned to the server that sent it. + +For more information see: + +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) + +Note: the `delete_all` and `emails` parameters should be used independently of each other as they have different purposes. + +### DELETE /suppression/bounces + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/bounces/"; + request.requestBody = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a Bounce + +**This endpoint allows you to retrieve a specific bounce for a given email address.** + +Bounces are messages that are returned to the server that sent it. + +For more information see: + +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) + +### GET /suppression/bounces/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/bounces/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a bounce + +**This endpoint allows you to remove an email address from your bounce list.** + +Bounces are messages that are returned to the server that sent it. This endpoint allows you to delete a single email addresses from your bounce list. + +For more information see: + +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) + +### DELETE /suppression/bounces/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/bounces/{email}/"; + Map queryParams = new HashMap(); + queryParams.put("email_address", "example@example.com"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all invalid emails + +**This endpoint allows you to retrieve a list of all invalid email addresses.** + +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. + +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). + +### GET /suppression/invalid_emails + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/invalid_emails/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete invalid emails + +**This endpoint allows you to remove email addresses from your invalid email address list.** + +There are two options for deleting invalid email addresses: + +1) You can delete all invalid email addresses by setting `delete_all` to true in the request body. +2) You can delete some invalid email addresses by specifying certain addresses in an array in the request body. + +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. + +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). + +### DELETE /suppression/invalid_emails + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/invalid_emails/"; + request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a specific invalid email + +**This endpoint allows you to retrieve a specific invalid email addresses.** + +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. + +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). + +### GET /suppression/invalid_emails/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/invalid_emails/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a specific invalid email + +**This endpoint allows you to remove a specific email address from the invalid email address list.** + +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. + +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). + +### DELETE /suppression/invalid_emails/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/invalid_emails/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a specific spam report + +**This endpoint allows you to retrieve a specific spam report.** + +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). + +### GET /suppression/spam_report/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/spam_report/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a specific spam report + +**This endpoint allows you to delete a specific spam report.** + +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). + +### DELETE /suppression/spam_report/{email} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/spam_report/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all spam reports + +**This endpoint allows you to retrieve all spam reports.** + +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). + +### GET /suppression/spam_reports + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/spam_reports/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete spam reports + +**This endpoint allows you to delete your spam reports.** + +There are two options for deleting spam reports: + +1) You can delete all spam reports by setting "delete_all" to true in the request body. +2) You can delete some spam reports by specifying the email addresses in an array in the request body. + +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). + +### DELETE /suppression/spam_reports + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/spam_reports/"; + request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all global suppressions + +**This endpoint allows you to retrieve a list of all email address that are globally suppressed.** + +A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). + +### GET /suppression/unsubscribes + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/unsubscribes/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# TEMPLATES + +## Create a transactional template. + +**This endpoint allows you to create a transactional template.** + +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. + +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +### POST /templates + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "templates/"; + request.requestBody = "{\"name\":\"example_name\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all transactional templates. + +**This endpoint allows you to retrieve all transactional templates.** + +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. + +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +### GET /templates + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "templates/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Edit a transactional template. + +**This endpoint allows you to edit a transactional template.** + +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. + +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + + +### PATCH /templates/{template_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "templates/{template_id}/"; + request.requestBody = "{\"name\":\"new_example_name\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a single transactional template. + +**This endpoint allows you to retrieve a single transactional template.** + +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. + +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + + +### GET /templates/{template_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "templates/{template_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a template. + +**This endpoint allows you to delete a transactional template.** + +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. + +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + + +### DELETE /templates/{template_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "templates/{template_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Create a new transactional template version. + +**This endpoint allows you to create a new version of a template.** + +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. + +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + + +### POST /templates/{template_id}/versions + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "templates/{template_id}/versions/"; + request.requestBody = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Edit a transactional template version. + +**This endpoint allows you to edit a version of one of your transactional templates.** + +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. + +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | + +### PATCH /templates/{template_id}/versions/{version_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.requestBody = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a specific transactional template version. + +**This endpoint allows you to retrieve a specific version of a template.** + +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. + +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | + +### GET /templates/{template_id}/versions/{version_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "templates/{template_id}/versions/{version_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a transactional template version. + +**This endpoint allows you to delete one of your transactional template versions.** + +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. + +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | + +### DELETE /templates/{template_id}/versions/{version_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "templates/{template_id}/versions/{version_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Activate a transactional template version. + +**This endpoint allows you to activate a version of one of your templates.** + +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. + + +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | + +### POST /templates/{template_id}/versions/{version_id}/activate + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "templates/{template_id}/versions/{version_id}/activate/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# TRACKING SETTINGS + +## Retrieve Tracking Settings + +**This endpoint allows you to retrieve a list of all tracking settings that you can enable on your account.** + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update Click Tracking Settings + +**This endpoint allows you to change your current click tracking setting. You can enable, or disable, click tracking using this endpoint.** + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### PATCH /tracking_settings/click + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/click/"; + request.requestBody = "{\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve Click Track Settings + +**This endpoint allows you to retrieve your current click tracking setting.** + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings/click + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/click/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update Google Analytics Settings + +**This endpoint allows you to update your current setting for Google Analytics.** + +For more information about using Google Analytics, please refer to [Googles URL Builder](https://support.google.com/analytics/answer/1033867?hl=en) and their article on ["Best Practices for Campaign Building"](https://support.google.com/analytics/answer/1037445). + +We default the settings to Googles recommendations. For more information, see [Google Analytics Demystified](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/google_analytics_demystified_ga_statistics_vs_sg_statistics.html). + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### PATCH /tracking_settings/google_analytics + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/google_analytics/"; + request.requestBody = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve Google Analytics Settings + +**This endpoint allows you to retrieve your current setting for Google Analytics.** + +For more information about using Google Analytics, please refer to [Googles URL Builder](https://support.google.com/analytics/answer/1033867?hl=en) and their article on ["Best Practices for Campaign Building"](https://support.google.com/analytics/answer/1037445). + +We default the settings to Googles recommendations. For more information, see [Google Analytics Demystified](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/google_analytics_demystified_ga_statistics_vs_sg_statistics.html). + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings/google_analytics + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/google_analytics/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update Open Tracking Settings + +**This endpoint allows you to update your current settings for open tracking.** + +Open Tracking adds an invisible image at the end of the email which can track email opens. If the email recipient has images enabled on their email client, a request to SendGrids server for the invisible image is executed and an open event is logged. These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook. + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### PATCH /tracking_settings/open + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/open/"; + request.requestBody = "{\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Get Open Tracking Settings + +**This endpoint allows you to retrieve your current settings for open tracking.** + +Open Tracking adds an invisible image at the end of the email which can track email opens. If the email recipient has images enabled on their email client, a request to SendGrids server for the invisible image is executed and an open event is logged. These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook. + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings/open + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/open/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update Subscription Tracking Settings + +**This endpoint allows you to update your current settings for subscription tracking.** + +Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails. + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### PATCH /tracking_settings/subscription + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/subscription/"; + request.requestBody = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve Subscription Tracking Settings + +**This endpoint allows you to retrieve your current settings for subscription tracking.** + +Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails. + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings/subscription + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/subscription/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# USER + +## Get a user's account information. + +**This endpoint allows you to retrieve your user account details.** + +Your user's account information includes the user's account type and reputation. + +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. + +For more information about your user profile: + +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### GET /user/account + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/account/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve your credit balance + +**This endpoint allows you to retrieve the current credit balance for your account.** + +Your monthly credit allotment limits the number of emails you may send before incurring overage charges. For more information about credits and billing, please visit our [Clssroom](https://sendgrid.com/docs/Classroom/Basics/Billing/billing_info_and_faqs.html). + +### GET /user/credits + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/credits/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update your account email address + +**This endpoint allows you to update the email address currently on file for your account.** + +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. + +For more information about your user profile: + +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### PUT /user/email + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "user/email/"; + request.requestBody = "{\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve your account email address + +**This endpoint allows you to retrieve the email address currently on file for your account.** + +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. + +For more information about your user profile: + +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### GET /user/email + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/email/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update your password + +**This endpoint allows you to update your password.** + +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. + +For more information about your user profile: + +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### PUT /user/password + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "user/password/"; + request.requestBody = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update a user's profile + +**This endpoint allows you to update your current profile details.** + +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. + +For more information about your user profile: + +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +It should be noted that any one or more of the parameters can be updated via the PATCH /user/profile endpoint. The only requirement is that you include at least one when you PATCH. + +### PATCH /user/profile + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/profile/"; + request.requestBody = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Get a user's profile + +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. + +For more information about your user profile: + +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### GET /user/profile + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/profile/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Cancel or pause a scheduled send + +**This endpoint allows you to cancel or pause an email that has been scheduled to be sent.** + +If the maximum number of cancellations/pauses are added, HTTP 400 will +be returned. + +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. + +### POST /user/scheduled_sends + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "user/scheduled_sends/"; + request.requestBody = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all scheduled sends + +**This endpoint allows you to retrieve all cancel/paused scheduled send information.** + +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. + +### GET /user/scheduled_sends + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/scheduled_sends/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update user scheduled send information + +**This endpoint allows you to update the status of a scheduled send for the given `batch_id`.** + +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. + +### PATCH /user/scheduled_sends/{batch_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.requestBody = "{\"status\":\"pause\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve scheduled send + +**This endpoint allows you to retrieve the cancel/paused scheduled send information for a specific `batch_id`.** + +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. + +### GET /user/scheduled_sends/{batch_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/scheduled_sends/{batch_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a cancellation or pause of a scheduled send + +**This endpoint allows you to delete the cancellation/pause of a scheduled send.** + +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. + +### DELETE /user/scheduled_sends/{batch_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "user/scheduled_sends/{batch_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update Enforced TLS settings + +**This endpoint allows you to update your current Enforced TLS settings.** + +The Enforced TLS settings specify whether or not the recipient is required to support TLS or have a valid certificate. See the [SMTP Ports User Guide](https://sendgrid.com/docs/Classroom/Basics/Email_Infrastructure/smtp_ports.html) for more information on opportunistic TLS. + +**Note:** If either setting is enabled and the recipient does not support TLS or have a valid certificate, we drop the message and send a block event with TLS required but not supported as the description. + +### PATCH /user/settings/enforced_tls + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/settings/enforced_tls/"; + request.requestBody = "{\"require_tls\":true,\"require_valid_cert\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve current Enforced TLS settings. + +**This endpoint allows you to retrieve your current Enforced TLS settings.** + +The Enforced TLS settings specify whether or not the recipient is required to support TLS or have a valid certificate. See the [SMTP Ports User Guide](https://sendgrid.com/docs/Classroom/Basics/Email_Infrastructure/smtp_ports.html) for more information on opportunistic TLS. + +**Note:** If either setting is enabled and the recipient does not support TLS or have a valid certificate, we drop the message and send a block event with TLS required but not supported as the description. + +### GET /user/settings/enforced_tls + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/settings/enforced_tls/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update your username + +**This endpoint allows you to update the username for your account.** + +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. + +For more information about your user profile: + +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### PUT /user/username + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "user/username/"; + request.requestBody = "{\"username\":\"test_username\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve your username + +**This endpoint allows you to retrieve your current account username.** + +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. + +For more information about your user profile: + +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### GET /user/username + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/username/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update Event Notification Settings + +**This endpoint allows you to update your current event webhook settings.** + +If an event type is marked as `true`, then the event webhook will include information about that event. + +SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. + +Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. + +### PATCH /user/webhooks/event/settings + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/webhooks/event/settings/"; + request.requestBody = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve Event Webhook settings + +**This endpoint allows you to retrieve your current event webhook settings.** + +If an event type is marked as `true`, then the event webhook will include information about that event. + +SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. + +Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. + +### GET /user/webhooks/event/settings + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/event/settings/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Test Event Notification Settings + +**This endpoint allows you to test your event webhook by sending a fake event notification post to the provided URL.** + +SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. + +Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. + +### POST /user/webhooks/event/test + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "user/webhooks/event/test/"; + request.requestBody = "{\"url\":\"url\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve Parse Webhook settings + +**This endpoint allows you to retrieve your current inbound parse webhook settings.** + +SendGrid can parse the attachments and contents of incoming emails. The Parse API will POST the parsed email to a URL that you specify. For more information, see our Inbound [Parse Webhook documentation](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). + +### GET /user/webhooks/parse/settings + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/parse/settings/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieves Inbound Parse Webhook statistics. + +**This endpoint allows you to retrieve the statistics for your Parse Webhook useage.** + +SendGrid's Inbound Parse Webhook allows you to parse the contents and attachments of incomming emails. The Parse API can then POST the parsed emails to a URL that you specify. The Inbound Parse Webhook cannot parse messages greater than 20MB in size, including all attachments. + +There are a number of pre-made integrations for the SendGrid Parse Webhook which make processing events easy. You can find these integrations in the [Library Index](https://sendgrid.com/docs/Integrate/libraries.html#-Webhook-Libraries). + +### GET /user/webhooks/parse/stats + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/parse/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "test_string"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + +# WHITELABEL + +## Create a domain whitelabel. + +**This endpoint allows you to create a whitelabel for one of your domains.** + +If you are creating a domain whitelabel that you would like a subuser to use, you have two options: +1. Use the "username" parameter. This allows you to create a whitelabel on behalf of your subuser. This means the subuser is able to see and modify the created whitelabel. +2. Use the Association workflow (see Associate Domain section). This allows you to assign a whitelabel created by the parent to a subuser. This means the subuser will default to the assigned whitelabel, but will not be able to see or modify that whitelabel. However, if the subuser creates their own whitelabel it will overwrite the assigned whitelabel. + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + +### POST /whitelabel/domains + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/"; + request.requestBody = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## List all domain whitelabels. + +**This endpoint allows you to retrieve a list of all domain whitelabels you have created.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + + +### GET /whitelabel/domains + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + queryParams.put("domain", "test_string"); + queryParams.put("exclude_subusers", "true"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Get the default domain whitelabel. + +**This endpoint allows you to retrieve the default whitelabel for a domain.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| domain | string |The domain to find a default domain whitelabel for. | + +### GET /whitelabel/domains/default + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/default/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## List the domain whitelabel associated with the given user. + +**This endpoint allows you to retrieve all of the whitelabels that have been assigned to a specific subuser.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| username | string | Username of the subuser to find associated whitelabels for. | + +### GET /whitelabel/domains/subuser + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/subuser/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Disassociate a domain whitelabel from a given user. + +**This endpoint allows you to disassociate a specific whitelabel from a subuser.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + +## URI Parameters +| URI Parameter | Type | Required? | Description | +|---|---|---|---| +| username | string | required | Username for the subuser to find associated whitelabels for. | + +### DELETE /whitelabel/domains/subuser + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/domains/subuser/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update a domain whitelabel. + +**This endpoint allows you to update the settings for a domain whitelabel.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + +### PATCH /whitelabel/domains/{domain_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "whitelabel/domains/{domain_id}/"; + request.requestBody = "{\"default\":false,\"custom_spf\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a domain whitelabel. + +**This endpoint allows you to retrieve a specific domain whitelabel.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + + +### GET /whitelabel/domains/{domain_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/{domain_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a domain whitelabel. + +**This endpoint allows you to delete a domain whitelabel.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + +### DELETE /whitelabel/domains/{domain_id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/domains/{domain_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Associate a domain whitelabel with a given user. + +**This endpoint allows you to associate a specific domain whitelabel with a subuser.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| domain_id | integer | ID of the domain whitelabel to associate with the subuser. | + +### POST /whitelabel/domains/{domain_id}/subuser + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/{domain_id}/subuser/"; + request.requestBody = "{\"username\":\"jane@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Add an IP to a domain whitelabel. + +**This endpoint allows you to add an IP address to a domain whitelabel.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| id | integer | ID of the domain to which you are adding an IP | + +### POST /whitelabel/domains/{id}/ips + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/{id}/ips/"; + request.requestBody = "{\"ip\":\"192.168.0.1\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Remove an IP from a domain whitelabel. + +**This endpoint allows you to remove a domain's IP address from that domain's whitelabel.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| id | integer | ID of the domain whitelabel to delete the IP from. | +| ip | string | IP to remove from the domain whitelabel. | + +### DELETE /whitelabel/domains/{id}/ips/{ip} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/domains/{id}/ips/{ip}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Validate a domain whitelabel. + +**This endpoint allows you to validate a domain whitelabel. If it fails, it will return an error message describing why the whitelabel could not be validated.** + +A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| id | integer |ID of the domain whitelabel to validate. | + +### POST /whitelabel/domains/{id}/validate + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/{id}/validate/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Create an IP whitelabel + +**This endpoint allows you to create an IP whitelabel.** + +When creating an IP whitelable, you should use the same subdomain that you used when you created a domain whitelabel. + +A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). + +### POST /whitelabel/ips + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/ips/"; + request.requestBody = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all IP whitelabels + +**This endpoint allows you to retrieve all of the IP whitelabels that have been createdy by this account.** + +You may include a search key by using the "ip" parameter. This enables you to perform a prefix search for a given IP segment (e.g. "192."). + +A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). + +### GET /whitelabel/ips + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/ips/"; + Map queryParams = new HashMap(); + queryParams.put("ip", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve an IP whitelabel + +**This endpoint allows you to retrieve an IP whitelabel.** + +A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). + +### GET /whitelabel/ips/{id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/ips/{id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete an IP whitelabel + +**This endpoint allows you to delete an IP whitelabel.** + +A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). + +### DELETE /whitelabel/ips/{id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/ips/{id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Validate an IP whitelabel + +**This endpoint allows you to validate an IP whitelabel.** + +A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). + +### POST /whitelabel/ips/{id}/validate + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/ips/{id}/validate/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Create a Link Whitelabel + +**This endpoint allows you to create a new link whitelabel.** + +Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). + +### POST /whitelabel/links + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/links/"; + request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all link whitelabels + +**This endpoint allows you to retrieve all link whitelabels.** + +Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). + +### GET /whitelabel/links + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a Default Link Whitelabel + +**This endpoint allows you to retrieve the default link whitelabel.** + +Default link whitelabel is the actual link whitelabel to be used when sending messages. If there are multiple link whitelabels, the default is determined by the following order: +
      +
    • Validated link whitelabels marked as "default"
    • +
    • Legacy link whitelabels (migrated from the whitelabel wizard)
    • +
    • Default SendGrid link whitelabel (i.e. 100.ct.sendgrid.net)
    • +
    + +Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). + +### GET /whitelabel/links/default + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/default/"; + Map queryParams = new HashMap(); + queryParams.put("domain", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve Associated Link Whitelabel + +**This endpoint allows you to retrieve the associated link whitelabel for a subuser.** + +Link whitelables can be associated with subusers from the parent account. This functionality allows +subusers to send mail using their parent's linke whitelabels. To associate a link whitelabel, the parent account +must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. + +Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). + +### GET /whitelabel/links/subuser + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/subuser/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Disassociate a Link Whitelabel + +**This endpoint allows you to disassociate a link whitelabel from a subuser.** + +Link whitelables can be associated with subusers from the parent account. This functionality allows +subusers to send mail using their parent's linke whitelabels. To associate a link whitelabel, the parent account +must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. + +Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). + +### DELETE /whitelabel/links/subuser + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/links/subuser/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Update a Link Whitelabel + +**This endpoint allows you to update a specific link whitelabel. You can use this endpoint to change a link whitelabel's default status.** + +Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). + +### PATCH /whitelabel/links/{id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "whitelabel/links/{id}/"; + request.requestBody = "{\"default\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a Link Whitelabel + +**This endpoint allows you to retrieve a specific link whitelabel.** + +Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). + +### GET /whitelabel/links/{id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/{id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a Link Whitelabel + +**This endpoint allows you to delete a link whitelabel.** + +Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). + +### DELETE /whitelabel/links/{id} + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/links/{id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Validate a Link Whitelabel + +**This endpoint allows you to validate a link whitelabel.** + +Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). + +### POST /whitelabel/links/{id}/validate + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/links/{id}/validate/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` +## Associate a Link Whitelabel + +**This endpoint allows you to associate a link whitelabel with a subuser account.** + +Link whitelables can be associated with subusers from the parent account. This functionality allows +subusers to send mail using their parent's linke whitelabels. To associate a link whitelabel, the parent account +must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. + +Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. + +For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). + +### POST /whitelabel/links/{link_id}/subuser + +```java + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/links/{link_id}/subuser/"; + request.requestBody = "{\"username\":\"jane@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + ``` + From 9017301e9f31cad8b6ecf06052f315655c2600c7 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 27 May 2016 22:29:35 -0700 Subject: [PATCH 024/439] Added examples for all v3 Web API endpoints --- examples/Mail/mail.java | 75 ++ examples/accesssettings/accesssettings.java | 148 ++++ examples/apikeys/apikeys.java | 146 ++++ examples/asm/asm.java | 262 ++++++ examples/browsers/browsers.java | 36 + examples/campaigns/campaigns.java | 267 ++++++ examples/categories/categories.java | 96 +++ examples/clients/clients.java | 61 ++ examples/contactdb/contactdb.java | 766 ++++++++++++++++++ examples/devices/devices.java | 35 + examples/geo/geo.java | 36 + examples/ips/ips.java | 338 ++++++++ .../mailboxproviders/mailboxproviders.java | 36 + examples/mailsettings/mailsettings.java | 455 +++++++++++ examples/partnersettings/partnersettings.java | 79 ++ examples/scopes/scopes.java | 28 + examples/stats/stats.java | 35 + examples/subusers/subusers.java | 372 +++++++++ examples/suppression/suppression.java | 431 ++++++++++ examples/templates/templates.java | 239 ++++++ .../trackingsettings/trackingsettings.java | 220 +++++ examples/user/user.java | 504 ++++++++++++ examples/whitelabel/whitelabel.java | 662 +++++++++++++++ 23 files changed, 5327 insertions(+) create mode 100644 examples/Mail/mail.java create mode 100644 examples/accesssettings/accesssettings.java create mode 100644 examples/apikeys/apikeys.java create mode 100644 examples/asm/asm.java create mode 100644 examples/browsers/browsers.java create mode 100644 examples/campaigns/campaigns.java create mode 100644 examples/categories/categories.java create mode 100644 examples/clients/clients.java create mode 100644 examples/contactdb/contactdb.java create mode 100644 examples/devices/devices.java create mode 100644 examples/geo/geo.java create mode 100644 examples/ips/ips.java create mode 100644 examples/mailboxproviders/mailboxproviders.java create mode 100644 examples/mailsettings/mailsettings.java create mode 100644 examples/partnersettings/partnersettings.java create mode 100644 examples/scopes/scopes.java create mode 100644 examples/stats/stats.java create mode 100644 examples/subusers/subusers.java create mode 100644 examples/suppression/suppression.java create mode 100644 examples/templates/templates.java create mode 100644 examples/trackingsettings/trackingsettings.java create mode 100644 examples/user/user.java create mode 100644 examples/whitelabel/whitelabel.java diff --git a/examples/Mail/mail.java b/examples/Mail/mail.java new file mode 100644 index 00000000..b9183a3f --- /dev/null +++ b/examples/Mail/mail.java @@ -0,0 +1,75 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Create a batch ID # +# POST /mail/batch # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "mail/batch/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Validate batch ID # +# GET /mail/batch/{batch_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail/batch/{batch_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# v3 Mail Send Beta # +# POST /mail/send/beta # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "mail/send/beta/"; + request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/accesssettings/accesssettings.java b/examples/accesssettings/accesssettings.java new file mode 100644 index 00000000..ddc7c1b3 --- /dev/null +++ b/examples/accesssettings/accesssettings.java @@ -0,0 +1,148 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve all recent access attempts # +# GET /access_settings/activity # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "access_settings/activity/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Add one or more IPs to the whitelist # +# POST /access_settings/whitelist # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "access_settings/whitelist/"; + request.requestBody = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a list of currently whitelisted IPs # +# GET /access_settings/whitelist # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "access_settings/whitelist/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Remove one or more IPs from the whitelist # +# DELETE /access_settings/whitelist # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "access_settings/whitelist/"; + request.requestBody = "{\"ids\":[1,2,3]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a specific whitelisted IP # +# GET /access_settings/whitelist/{rule_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "access_settings/whitelist/{rule_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Remove a specific IP from the whitelist # +# DELETE /access_settings/whitelist/{rule_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "access_settings/whitelist/{rule_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/apikeys/apikeys.java b/examples/apikeys/apikeys.java new file mode 100644 index 00000000..1a96a0fc --- /dev/null +++ b/examples/apikeys/apikeys.java @@ -0,0 +1,146 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Create API keys # +# POST /api_keys # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "api_keys/"; + request.requestBody = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all API Keys belonging to the authenticated user # +# GET /api_keys # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "api_keys/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update the name & scopes of an API Key # +# PUT /api_keys/{api_key_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "api_keys/{api_key_id}/"; + request.requestBody = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update API keys # +# PATCH /api_keys/{api_key_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "api_keys/{api_key_id}/"; + request.requestBody = "{\"name\":\"A New Hope\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve an existing API Key # +# GET /api_keys/{api_key_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "api_keys/{api_key_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete API keys # +# DELETE /api_keys/{api_key_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "api_keys/{api_key_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/asm/asm.java b/examples/asm/asm.java new file mode 100644 index 00000000..7e31ad4b --- /dev/null +++ b/examples/asm/asm.java @@ -0,0 +1,262 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Create a Group # +# POST /asm/groups # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/groups/"; + request.requestBody = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all suppression groups associated with the user. # +# GET /asm/groups # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/groups/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update a suppression group. # +# PATCH /asm/groups/{group_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "asm/groups/{group_id}/"; + request.requestBody = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Get information on a single suppression group. # +# GET /asm/groups/{group_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/groups/{group_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a suppression group. # +# DELETE /asm/groups/{group_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "asm/groups/{group_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Add suppressions to a suppression group # +# POST /asm/groups/{group_id}/suppressions # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/groups/{group_id}/suppressions/"; + request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all suppressions for a suppression group # +# GET /asm/groups/{group_id}/suppressions # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/groups/{group_id}/suppressions/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a suppression from a suppression group # +# DELETE /asm/groups/{group_id}/suppressions/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "asm/groups/{group_id}/suppressions/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Add recipient addresses to the global suppression group. # +# POST /asm/suppressions/global # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/suppressions/global/"; + request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a Global Suppression # +# GET /asm/suppressions/global/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/suppressions/global/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a Global Suppression # +# DELETE /asm/suppressions/global/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "asm/suppressions/global/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/browsers/browsers.java b/examples/browsers/browsers.java new file mode 100644 index 00000000..e0889d98 --- /dev/null +++ b/examples/browsers/browsers.java @@ -0,0 +1,36 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve email statistics by browser. # +# GET /browsers/stats # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "browsers/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("browsers", "test_string"); + queryParams.put("limit", "test_string"); + queryParams.put("offset", "test_string"); + queryParams.put("start_date", "2016-01-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/campaigns/campaigns.java b/examples/campaigns/campaigns.java new file mode 100644 index 00000000..52ac1241 --- /dev/null +++ b/examples/campaigns/campaigns.java @@ -0,0 +1,267 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Create a Campaign # +# POST /campaigns # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/"; + request.requestBody = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all Campaigns # +# GET /campaigns # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "campaigns/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "0"); + queryParams.put("offset", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update a Campaign # +# PATCH /campaigns/{campaign_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "campaigns/{campaign_id}/"; + request.requestBody = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a single campaign # +# GET /campaigns/{campaign_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "campaigns/{campaign_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a Campaign # +# DELETE /campaigns/{campaign_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "campaigns/{campaign_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update a Scheduled Campaign # +# PATCH /campaigns/{campaign_id}/schedules # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.requestBody = "{\"send_at\":1489451436}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Schedule a Campaign # +# POST /campaigns/{campaign_id}/schedules # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.requestBody = "{\"send_at\":1489771528}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# View Scheduled Time of a Campaign # +# GET /campaigns/{campaign_id}/schedules # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "campaigns/{campaign_id}/schedules/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Unschedule a Scheduled Campaign # +# DELETE /campaigns/{campaign_id}/schedules # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "campaigns/{campaign_id}/schedules/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Send a Campaign # +# POST /campaigns/{campaign_id}/schedules/now # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/{campaign_id}/schedules/now/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Send a Test Campaign # +# POST /campaigns/{campaign_id}/schedules/test # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "campaigns/{campaign_id}/schedules/test/"; + request.requestBody = "{\"to\":\"your.email@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/categories/categories.java b/examples/categories/categories.java new file mode 100644 index 00000000..42a70d25 --- /dev/null +++ b/examples/categories/categories.java @@ -0,0 +1,96 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve all categories # +# GET /categories # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "categories/"; + Map queryParams = new HashMap(); + queryParams.put("category", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve Email Statistics for Categories # +# GET /categories/stats # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "categories/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("categories", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] # +# GET /categories/stats/sums # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "categories/stats/sums/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/clients/clients.java b/examples/clients/clients.java new file mode 100644 index 00000000..cb3be0c2 --- /dev/null +++ b/examples/clients/clients.java @@ -0,0 +1,61 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve email statistics by client type. # +# GET /clients/stats # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "clients/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve stats by a specific client type. # +# GET /clients/{client_type}/stats # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "clients/{client_type}/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java new file mode 100644 index 00000000..f4b0aa67 --- /dev/null +++ b/examples/contactdb/contactdb.java @@ -0,0 +1,766 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Create a Custom Field # +# POST /contactdb/custom_fields # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/custom_fields/"; + request.requestBody = "{\"type\":\"text\",\"name\":\"pet\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all custom fields # +# GET /contactdb/custom_fields # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/custom_fields/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a Custom Field # +# GET /contactdb/custom_fields/{custom_field_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a Custom Field # +# DELETE /contactdb/custom_fields/{custom_field_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Create a List # +# POST /contactdb/lists # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/lists/"; + request.requestBody = "{\"name\":\"your list name\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all lists # +# GET /contactdb/lists # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/lists/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete Multiple lists # +# DELETE /contactdb/lists # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/lists/"; + request.requestBody = "[1,2,3,4]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update a List # +# PATCH /contactdb/lists/{list_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "contactdb/lists/{list_id}/"; + request.requestBody = "{\"name\":\"newlistname\"}"; + Map queryParams = new HashMap(); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a single list # +# GET /contactdb/lists/{list_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/lists/{list_id}/"; + Map queryParams = new HashMap(); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a List # +# DELETE /contactdb/lists/{list_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/lists/{list_id}/"; + Map queryParams = new HashMap(); + queryParams.put("delete_contacts", "true"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Add Multiple Recipients to a List # +# POST /contactdb/lists/{list_id}/recipients # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/lists/{list_id}/recipients/"; + request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all recipients on a List # +# GET /contactdb/lists/{list_id}/recipients # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/lists/{list_id}/recipients/"; + Map queryParams = new HashMap(); + queryParams.put("page", "1"); + queryParams.put("page_size", "1"); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Add a Single Recipient to a List # +# POST /contactdb/lists/{list_id}/recipients/{recipient_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a Single Recipient from a Single List # +# DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + Map queryParams = new HashMap(); + queryParams.put("recipient_id", "0"); + queryParams.put("list_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update Recipient # +# PATCH /contactdb/recipients # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "contactdb/recipients/"; + request.requestBody = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Add recipients # +# POST /contactdb/recipients # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/recipients/"; + request.requestBody = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve recipients # +# GET /contactdb/recipients # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/"; + Map queryParams = new HashMap(); + queryParams.put("page", "1"); + queryParams.put("page_size", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete Recipient # +# DELETE /contactdb/recipients # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/recipients/"; + request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve the count of billable recipients # +# GET /contactdb/recipients/billable_count # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/billable_count/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a Count of Recipients # +# GET /contactdb/recipients/count # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/count/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve recipients matching search criteria # +# GET /contactdb/recipients/search # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/search/"; + Map queryParams = new HashMap(); + queryParams.put("{field_name}", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a single recipient # +# GET /contactdb/recipients/{recipient_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/{recipient_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a Recipient # +# DELETE /contactdb/recipients/{recipient_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/recipients/{recipient_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve the lists that a recipient is on # +# GET /contactdb/recipients/{recipient_id}/lists # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/recipients/{recipient_id}/lists/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve reserved fields # +# GET /contactdb/reserved_fields # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/reserved_fields/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Create a Segment # +# POST /contactdb/segments # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "contactdb/segments/"; + request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all segments # +# GET /contactdb/segments # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/segments/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update a segment # +# PATCH /contactdb/segments/{segment_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "contactdb/segments/{segment_id}/"; + request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; + Map queryParams = new HashMap(); + queryParams.put("segment_id", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a segment # +# GET /contactdb/segments/{segment_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/segments/{segment_id}/"; + Map queryParams = new HashMap(); + queryParams.put("segment_id", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a segment # +# DELETE /contactdb/segments/{segment_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "contactdb/segments/{segment_id}/"; + Map queryParams = new HashMap(); + queryParams.put("delete_contacts", "true"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve recipients on a segment # +# GET /contactdb/segments/{segment_id}/recipients # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "contactdb/segments/{segment_id}/recipients/"; + Map queryParams = new HashMap(); + queryParams.put("page", "1"); + queryParams.put("page_size", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/devices/devices.java b/examples/devices/devices.java new file mode 100644 index 00000000..587c63c5 --- /dev/null +++ b/examples/devices/devices.java @@ -0,0 +1,35 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve email statistics by device type. # +# GET /devices/stats # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "devices/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/geo/geo.java b/examples/geo/geo.java new file mode 100644 index 00000000..b2412f0b --- /dev/null +++ b/examples/geo/geo.java @@ -0,0 +1,36 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve email statistics by country and state/province. # +# GET /geo/stats # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "geo/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("country", "US"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/ips/ips.java b/examples/ips/ips.java new file mode 100644 index 00000000..340d784f --- /dev/null +++ b/examples/ips/ips.java @@ -0,0 +1,338 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve all IP addresses # +# GET /ips # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/"; + Map queryParams = new HashMap(); + queryParams.put("subuser", "test_string"); + queryParams.put("ip", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("exclude_whitelabels", "true"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all assigned IPs # +# GET /ips/assigned # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/assigned/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Create an IP pool. # +# POST /ips/pools # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "ips/pools/"; + request.requestBody = "{\"name\":\"marketing\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all IP pools. # +# GET /ips/pools # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/pools/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update an IP pools name. # +# PUT /ips/pools/{pool_name} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "ips/pools/{pool_name}/"; + request.requestBody = "{\"name\":\"new_pool_name\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all IPs in a specified pool. # +# GET /ips/pools/{pool_name} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/pools/{pool_name}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete an IP pool. # +# DELETE /ips/pools/{pool_name} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "ips/pools/{pool_name}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Add an IP address to a pool # +# POST /ips/pools/{pool_name}/ips # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "ips/pools/{pool_name}/ips/"; + request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Remove an IP address from a pool. # +# DELETE /ips/pools/{pool_name}/ips/{ip} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "ips/pools/{pool_name}/ips/{ip}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Add an IP to warmup # +# POST /ips/warmup # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "ips/warmup/"; + request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all IPs currently in warmup # +# GET /ips/warmup # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/warmup/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve warmup status for a specific IP address # +# GET /ips/warmup/{ip_address} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/warmup/{ip_address}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Remove an IP from warmup # +# DELETE /ips/warmup/{ip_address} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "ips/warmup/{ip_address}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all IP pools an IP address belongs to # +# GET /ips/{ip_address} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "ips/{ip_address}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/mailboxproviders/mailboxproviders.java b/examples/mailboxproviders/mailboxproviders.java new file mode 100644 index 00000000..eb72272d --- /dev/null +++ b/examples/mailboxproviders/mailboxproviders.java @@ -0,0 +1,36 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve email statistics by mailbox provider. # +# GET /mailbox_providers/stats # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mailbox_providers/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("mailbox_providers", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java new file mode 100644 index 00000000..89d3f4fb --- /dev/null +++ b/examples/mailsettings/mailsettings.java @@ -0,0 +1,455 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve all mail settings # +# GET /mail_settings # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update address whitelist mail settings # +# PATCH /mail_settings/address_whitelist # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/address_whitelist/"; + request.requestBody = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve address whitelist mail settings # +# GET /mail_settings/address_whitelist # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/address_whitelist/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update BCC mail settings # +# PATCH /mail_settings/bcc # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/bcc/"; + request.requestBody = "{\"enabled\":false,\"email\":\"email@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all BCC mail settings # +# GET /mail_settings/bcc # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/bcc/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update bounce purge mail settings # +# PATCH /mail_settings/bounce_purge # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/bounce_purge/"; + request.requestBody = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve bounce purge mail settings # +# GET /mail_settings/bounce_purge # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/bounce_purge/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update footer mail settings # +# PATCH /mail_settings/footer # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/footer/"; + request.requestBody = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve footer mail settings # +# GET /mail_settings/footer # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/footer/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update forward bounce mail settings # +# PATCH /mail_settings/forward_bounce # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/forward_bounce/"; + request.requestBody = "{\"enabled\":true,\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve forward bounce mail settings # +# GET /mail_settings/forward_bounce # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/forward_bounce/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update forward spam mail settings # +# PATCH /mail_settings/forward_spam # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/forward_spam/"; + request.requestBody = "{\"enabled\":false,\"email\":\"\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve forward spam mail settings # +# GET /mail_settings/forward_spam # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/forward_spam/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update plain content mail settings # +# PATCH /mail_settings/plain_content # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/plain_content/"; + request.requestBody = "{\"enabled\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve plain content mail settings # +# GET /mail_settings/plain_content # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/plain_content/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update spam check mail settings # +# PATCH /mail_settings/spam_check # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/spam_check/"; + request.requestBody = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve spam check mail settings # +# GET /mail_settings/spam_check # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/spam_check/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update template mail settings # +# PATCH /mail_settings/template # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "mail_settings/template/"; + request.requestBody = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve legacy template mail settings # +# GET /mail_settings/template # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail_settings/template/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/partnersettings/partnersettings.java b/examples/partnersettings/partnersettings.java new file mode 100644 index 00000000..70ae66af --- /dev/null +++ b/examples/partnersettings/partnersettings.java @@ -0,0 +1,79 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Returns a list of all partner settings. # +# GET /partner_settings # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "partner_settings/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Updates New Relic partner settings. # +# PATCH /partner_settings/new_relic # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "partner_settings/new_relic/"; + request.requestBody = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Returns all New Relic partner settings. # +# GET /partner_settings/new_relic # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "partner_settings/new_relic/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/scopes/scopes.java b/examples/scopes/scopes.java new file mode 100644 index 00000000..aa331a7a --- /dev/null +++ b/examples/scopes/scopes.java @@ -0,0 +1,28 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve a list of scopes for which this user has access. # +# GET /scopes # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "scopes/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/stats/stats.java b/examples/stats/stats.java new file mode 100644 index 00000000..ea51be84 --- /dev/null +++ b/examples/stats/stats.java @@ -0,0 +1,35 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve global email statistics # +# GET /stats # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java new file mode 100644 index 00000000..62e41041 --- /dev/null +++ b/examples/subusers/subusers.java @@ -0,0 +1,372 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Create Subuser # +# POST /subusers # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "subusers/"; + request.requestBody = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# List all Subusers # +# GET /subusers # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + queryParams.put("limit", "0"); + queryParams.put("offset", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve Subuser Reputations # +# GET /subusers/reputations # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/reputations/"; + Map queryParams = new HashMap(); + queryParams.put("usernames", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve email statistics for your subusers. # +# GET /subusers/stats # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/stats/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("subusers", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve monthly stats for all subusers # +# GET /subusers/stats/monthly # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/stats/monthly/"; + Map queryParams = new HashMap(); + queryParams.put("subuser", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("date", "test_string"); + queryParams.put("sort_by_direction", "asc"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve the totals for each email statistic metric for all subusers. # +# GET /subusers/stats/sums # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/stats/sums/"; + Map queryParams = new HashMap(); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Enable/disable a subuser # +# PATCH /subusers/{subuser_name} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "subusers/{subuser_name}/"; + request.requestBody = "{\"disabled\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a subuser # +# DELETE /subusers/{subuser_name} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "subusers/{subuser_name}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update IPs assigned to a subuser # +# PUT /subusers/{subuser_name}/ips # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "subusers/{subuser_name}/ips/"; + request.requestBody = "[\"127.0.0.1\"]"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update Monitor Settings for a subuser # +# PUT /subusers/{subuser_name}/monitor # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "subusers/{subuser_name}/monitor/"; + request.requestBody = "{\"frequency\":500,\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Create monitor settings # +# POST /subusers/{subuser_name}/monitor # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "subusers/{subuser_name}/monitor/"; + request.requestBody = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve monitor settings for a subuser # +# GET /subusers/{subuser_name}/monitor # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/{subuser_name}/monitor/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete monitor settings # +# DELETE /subusers/{subuser_name}/monitor # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "subusers/{subuser_name}/monitor/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve the monthly email statistics for a single subuser # +# GET /subusers/{subuser_name}/stats/monthly # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "subusers/{subuser_name}/stats/monthly/"; + Map queryParams = new HashMap(); + queryParams.put("date", "test_string"); + queryParams.put("sort_by_direction", "asc"); + queryParams.put("limit", "0"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java new file mode 100644 index 00000000..609223a8 --- /dev/null +++ b/examples/suppression/suppression.java @@ -0,0 +1,431 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve all blocks # +# GET /suppression/blocks # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/blocks/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete blocks # +# DELETE /suppression/blocks # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/blocks/"; + request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a specific block # +# GET /suppression/blocks/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/blocks/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a specific block # +# DELETE /suppression/blocks/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/blocks/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all bounces # +# GET /suppression/bounces # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/bounces/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "0"); + queryParams.put("end_time", "0"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete bounces # +# DELETE /suppression/bounces # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/bounces/"; + request.requestBody = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a Bounce # +# GET /suppression/bounces/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/bounces/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a bounce # +# DELETE /suppression/bounces/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/bounces/{email}/"; + Map queryParams = new HashMap(); + queryParams.put("email_address", "example@example.com"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all invalid emails # +# GET /suppression/invalid_emails # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/invalid_emails/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete invalid emails # +# DELETE /suppression/invalid_emails # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/invalid_emails/"; + request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a specific invalid email # +# GET /suppression/invalid_emails/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/invalid_emails/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a specific invalid email # +# DELETE /suppression/invalid_emails/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/invalid_emails/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a specific spam report # +# GET /suppression/spam_report/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/spam_report/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a specific spam report # +# DELETE /suppression/spam_report/{email} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/spam_report/{email}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all spam reports # +# GET /suppression/spam_reports # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/spam_reports/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete spam reports # +# DELETE /suppression/spam_reports # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "suppression/spam_reports/"; + request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all global suppressions # +# GET /suppression/unsubscribes # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "suppression/unsubscribes/"; + Map queryParams = new HashMap(); + queryParams.put("start_time", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/templates/templates.java b/examples/templates/templates.java new file mode 100644 index 00000000..18a14963 --- /dev/null +++ b/examples/templates/templates.java @@ -0,0 +1,239 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Create a transactional template. # +# POST /templates # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "templates/"; + request.requestBody = "{\"name\":\"example_name\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all transactional templates. # +# GET /templates # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "templates/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Edit a transactional template. # +# PATCH /templates/{template_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "templates/{template_id}/"; + request.requestBody = "{\"name\":\"new_example_name\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a single transactional template. # +# GET /templates/{template_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "templates/{template_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a template. # +# DELETE /templates/{template_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "templates/{template_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Create a new transactional template version. # +# POST /templates/{template_id}/versions # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "templates/{template_id}/versions/"; + request.requestBody = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Edit a transactional template version. # +# PATCH /templates/{template_id}/versions/{version_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.requestBody = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a specific transactional template version. # +# GET /templates/{template_id}/versions/{version_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "templates/{template_id}/versions/{version_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a transactional template version. # +# DELETE /templates/{template_id}/versions/{version_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "templates/{template_id}/versions/{version_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Activate a transactional template version. # +# POST /templates/{template_id}/versions/{version_id}/activate # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "templates/{template_id}/versions/{version_id}/activate/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/trackingsettings/trackingsettings.java b/examples/trackingsettings/trackingsettings.java new file mode 100644 index 00000000..eb2aeb15 --- /dev/null +++ b/examples/trackingsettings/trackingsettings.java @@ -0,0 +1,220 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Retrieve Tracking Settings # +# GET /tracking_settings # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update Click Tracking Settings # +# PATCH /tracking_settings/click # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/click/"; + request.requestBody = "{\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve Click Track Settings # +# GET /tracking_settings/click # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/click/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update Google Analytics Settings # +# PATCH /tracking_settings/google_analytics # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/google_analytics/"; + request.requestBody = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve Google Analytics Settings # +# GET /tracking_settings/google_analytics # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/google_analytics/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update Open Tracking Settings # +# PATCH /tracking_settings/open # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/open/"; + request.requestBody = "{\"enabled\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Get Open Tracking Settings # +# GET /tracking_settings/open # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/open/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update Subscription Tracking Settings # +# PATCH /tracking_settings/subscription # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "tracking_settings/subscription/"; + request.requestBody = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve Subscription Tracking Settings # +# GET /tracking_settings/subscription # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "tracking_settings/subscription/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/user/user.java b/examples/user/user.java new file mode 100644 index 00000000..da3e8147 --- /dev/null +++ b/examples/user/user.java @@ -0,0 +1,504 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Get a user's account information. # +# GET /user/account # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/account/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve your credit balance # +# GET /user/credits # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/credits/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update your account email address # +# PUT /user/email # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "user/email/"; + request.requestBody = "{\"email\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve your account email address # +# GET /user/email # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/email/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update your password # +# PUT /user/password # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "user/password/"; + request.requestBody = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update a user's profile # +# PATCH /user/profile # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/profile/"; + request.requestBody = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Get a user's profile # +# GET /user/profile # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/profile/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Cancel or pause a scheduled send # +# POST /user/scheduled_sends # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "user/scheduled_sends/"; + request.requestBody = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all scheduled sends # +# GET /user/scheduled_sends # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/scheduled_sends/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update user scheduled send information # +# PATCH /user/scheduled_sends/{batch_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.requestBody = "{\"status\":\"pause\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve scheduled send # +# GET /user/scheduled_sends/{batch_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/scheduled_sends/{batch_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a cancellation or pause of a scheduled send # +# DELETE /user/scheduled_sends/{batch_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "user/scheduled_sends/{batch_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update Enforced TLS settings # +# PATCH /user/settings/enforced_tls # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/settings/enforced_tls/"; + request.requestBody = "{\"require_tls\":true,\"require_valid_cert\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve current Enforced TLS settings. # +# GET /user/settings/enforced_tls # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/settings/enforced_tls/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update your username # +# PUT /user/username # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PUT; + request.endpoint = "user/username/"; + request.requestBody = "{\"username\":\"test_username\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve your username # +# GET /user/username # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/username/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update Event Notification Settings # +# PATCH /user/webhooks/event/settings # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/webhooks/event/settings/"; + request.requestBody = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve Event Webhook settings # +# GET /user/webhooks/event/settings # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/event/settings/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Test Event Notification Settings # +# POST /user/webhooks/event/test # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "user/webhooks/event/test/"; + request.requestBody = "{\"url\":\"url\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve Parse Webhook settings # +# GET /user/webhooks/parse/settings # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/parse/settings/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieves Inbound Parse Webhook statistics. # +# GET /user/webhooks/parse/stats # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/parse/stats/"; + Map queryParams = new HashMap(); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "test_string"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java new file mode 100644 index 00000000..b689b4c5 --- /dev/null +++ b/examples/whitelabel/whitelabel.java @@ -0,0 +1,662 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Create a domain whitelabel. # +# POST /whitelabel/domains # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/"; + request.requestBody = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# List all domain whitelabels. # +# GET /whitelabel/domains # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + queryParams.put("domain", "test_string"); + queryParams.put("exclude_subusers", "true"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Get the default domain whitelabel. # +# GET /whitelabel/domains/default # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/default/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# List the domain whitelabel associated with the given user. # +# GET /whitelabel/domains/subuser # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/subuser/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Disassociate a domain whitelabel from a given user. # +# DELETE /whitelabel/domains/subuser # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/domains/subuser/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update a domain whitelabel. # +# PATCH /whitelabel/domains/{domain_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "whitelabel/domains/{domain_id}/"; + request.requestBody = "{\"default\":false,\"custom_spf\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a domain whitelabel. # +# GET /whitelabel/domains/{domain_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/domains/{domain_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a domain whitelabel. # +# DELETE /whitelabel/domains/{domain_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/domains/{domain_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Associate a domain whitelabel with a given user. # +# POST /whitelabel/domains/{domain_id}/subuser # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/{domain_id}/subuser/"; + request.requestBody = "{\"username\":\"jane@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Add an IP to a domain whitelabel. # +# POST /whitelabel/domains/{id}/ips # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/{id}/ips/"; + request.requestBody = "{\"ip\":\"192.168.0.1\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Remove an IP from a domain whitelabel. # +# DELETE /whitelabel/domains/{id}/ips/{ip} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/domains/{id}/ips/{ip}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Validate a domain whitelabel. # +# POST /whitelabel/domains/{id}/validate # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/domains/{id}/validate/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Create an IP whitelabel # +# POST /whitelabel/ips # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/ips/"; + request.requestBody = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all IP whitelabels # +# GET /whitelabel/ips # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/ips/"; + Map queryParams = new HashMap(); + queryParams.put("ip", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve an IP whitelabel # +# GET /whitelabel/ips/{id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/ips/{id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete an IP whitelabel # +# DELETE /whitelabel/ips/{id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/ips/{id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Validate an IP whitelabel # +# POST /whitelabel/ips/{id}/validate # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/ips/{id}/validate/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Create a Link Whitelabel # +# POST /whitelabel/links # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/links/"; + request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve all link whitelabels # +# GET /whitelabel/links # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a Default Link Whitelabel # +# GET /whitelabel/links/default # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/default/"; + Map queryParams = new HashMap(); + queryParams.put("domain", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve Associated Link Whitelabel # +# GET /whitelabel/links/subuser # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/subuser/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Disassociate a Link Whitelabel # +# DELETE /whitelabel/links/subuser # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/links/subuser/"; + Map queryParams = new HashMap(); + queryParams.put("username", "test_string"); + request.queryParams = queryParams; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Update a Link Whitelabel # +# PATCH /whitelabel/links/{id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "whitelabel/links/{id}/"; + request.requestBody = "{\"default\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Retrieve a Link Whitelabel # +# GET /whitelabel/links/{id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "whitelabel/links/{id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Delete a Link Whitelabel # +# DELETE /whitelabel/links/{id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "whitelabel/links/{id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Validate a Link Whitelabel # +# POST /whitelabel/links/{id}/validate # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/links/{id}/validate/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Associate a Link Whitelabel # +# POST /whitelabel/links/{link_id}/subuser # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "whitelabel/links/{link_id}/subuser/"; + request.requestBody = "{\"username\":\"jane@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + From 3ee3022d6fd06b919559e19669da028d6be80867 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 28 May 2016 10:15:47 -0700 Subject: [PATCH 025/439] Re-organizing the examples folder --- examples/Example.java | 118 ------------------ .../jackson-annotations-2.7.0.jar | Bin .../{ => dependencies}/jackson-core-2.7.3.jar | Bin .../jackson-databind-2.7.3.jar | Bin examples/{Mail => helpers/mail}/Example.java | 0 5 files changed, 118 deletions(-) delete mode 100644 examples/Example.java rename examples/{ => dependencies}/jackson-annotations-2.7.0.jar (100%) rename examples/{ => dependencies}/jackson-core-2.7.3.jar (100%) rename examples/{ => dependencies}/jackson-databind-2.7.3.jar (100%) rename examples/{Mail => helpers/mail}/Example.java (100%) diff --git a/examples/Example.java b/examples/Example.java deleted file mode 100644 index 86424ed0..00000000 --- a/examples/Example.java +++ /dev/null @@ -1,118 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -public class Example { - public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.addRequestHeader("X-Test", "test"); - - // GET - Request request = new Request(); - try { - request.method = Method.GET; - request.endpoint = "api_keys"; - Map queryParams = new HashMap(); - queryParams.put("limit", "100"); - queryParams.put("offset", "0"); - request.queryParams = queryParams; - - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); - } catch (IOException ex) { - throw ex; - } finally { - request.queryParams = null; - } - - // POST - String apiKeyId = ""; - try { - request.method = Method.POST; - request.endpoint = "api_keys"; - request.requestBody = "{\"name\": \"My api Key\",\"scopes\": [\"mail.send\",\"alerts.create\",\"alerts.read\"]}"; - - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); - try { - ObjectMapper mapper = new ObjectMapper(); - JsonNode json = mapper.readTree(response.responseBody); - apiKeyId = json.path("api_key_id").asText(); - } catch (IOException ex) { - throw ex; - } - } catch (IOException ex) { - throw ex; - } finally { - request.requestBody = ""; - } - - // GET Single - request.method = Method.GET; - request.endpoint = "api_keys/" + apiKeyId; - - try { - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); - } catch (IOException ex) { - throw ex; - } - - // PATCH - request.method = Method.PATCH; - request.requestBody = "{\"name\": \"A New Hope\"}"; - - try { - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); - } catch (IOException ex) { - throw ex; - } finally { - request.requestBody = ""; - } - - // PUT - request.method = Method.PUT; - request.requestBody = - "{\"name\": \"A New Hope\",\"scopes\": [\"user.profile.read\",\"user.profile.update\"]}"; - - try { - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); - } catch (IOException ex) { - throw ex; - } finally { - request.requestBody = ""; - } - - // DELETE - request.method = Method.DELETE; - - try { - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseHeaders); - } catch (IOException ex) { - throw ex; - } - } -} \ No newline at end of file diff --git a/examples/jackson-annotations-2.7.0.jar b/examples/dependencies/jackson-annotations-2.7.0.jar similarity index 100% rename from examples/jackson-annotations-2.7.0.jar rename to examples/dependencies/jackson-annotations-2.7.0.jar diff --git a/examples/jackson-core-2.7.3.jar b/examples/dependencies/jackson-core-2.7.3.jar similarity index 100% rename from examples/jackson-core-2.7.3.jar rename to examples/dependencies/jackson-core-2.7.3.jar diff --git a/examples/jackson-databind-2.7.3.jar b/examples/dependencies/jackson-databind-2.7.3.jar similarity index 100% rename from examples/jackson-databind-2.7.3.jar rename to examples/dependencies/jackson-databind-2.7.3.jar diff --git a/examples/Mail/Example.java b/examples/helpers/mail/Example.java similarity index 100% rename from examples/Mail/Example.java rename to examples/helpers/mail/Example.java From 3b2acf93727ba73ee1b44eacf05037e439dcd99f Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 28 May 2016 10:21:26 -0700 Subject: [PATCH 026/439] Reorganizing --- examples/Mail/mail.java | 75 ----------------------------------------- 1 file changed, 75 deletions(-) delete mode 100644 examples/Mail/mail.java diff --git a/examples/Mail/mail.java b/examples/Mail/mail.java deleted file mode 100644 index b9183a3f..00000000 --- a/examples/Mail/mail.java +++ /dev/null @@ -1,75 +0,0 @@ -require 'sendgrid-ruby' - - -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) - -################################################## -# Create a batch ID # -# POST /mail/batch # - -public class Example { - public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.method = Method.POST; - request.endpoint = "mail/batch/"; - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); - } catch (IOException ex) { - throw ex; - } - } -} - -################################################## -# Validate batch ID # -# GET /mail/batch/{batch_id} # - -public class Example { - public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail/batch/{batch_id}/"; - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); - } catch (IOException ex) { - throw ex; - } - } -} - -################################################## -# v3 Mail Send Beta # -# POST /mail/send/beta # - -public class Example { - public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.method = Method.POST; - request.endpoint = "mail/send/beta/"; - request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); - } catch (IOException ex) { - throw ex; - } - } -} - From 5d61c73387c13cab58a01dc07a914bce1de0f92c Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 28 May 2016 10:21:48 -0700 Subject: [PATCH 027/439] Reorganizing --- examples/mail/mail.java | 75 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 examples/mail/mail.java diff --git a/examples/mail/mail.java b/examples/mail/mail.java new file mode 100644 index 00000000..b9183a3f --- /dev/null +++ b/examples/mail/mail.java @@ -0,0 +1,75 @@ +require 'sendgrid-ruby' + + +sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) + +################################################## +# Create a batch ID # +# POST /mail/batch # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "mail/batch/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# Validate batch ID # +# GET /mail/batch/{batch_id} # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "mail/batch/{batch_id}/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + +################################################## +# v3 Mail Send Beta # +# POST /mail/send/beta # + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "mail/send/beta/"; + request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} + From db29ebeb0b6193797205338230c6b2406033ec96 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 28 May 2016 10:26:35 -0700 Subject: [PATCH 028/439] Fixed headers --- examples/accesssettings/accesssettings.java | 12 ++++++++++-- examples/apikeys/apikeys.java | 12 ++++++++++-- examples/asm/asm.java | 12 ++++++++++-- examples/browsers/browsers.java | 12 ++++++++++-- examples/campaigns/campaigns.java | 12 ++++++++++-- examples/categories/categories.java | 12 ++++++++++-- examples/clients/clients.java | 12 ++++++++++-- examples/contactdb/contactdb.java | 16 ++++++++++++---- examples/devices/devices.java | 12 ++++++++++-- examples/geo/geo.java | 12 ++++++++++-- examples/ips/ips.java | 12 ++++++++++-- examples/mail/mail.java | 12 ++++++++++-- examples/mailboxproviders/mailboxproviders.java | 12 ++++++++++-- examples/mailsettings/mailsettings.java | 16 ++++++++++++---- examples/partnersettings/partnersettings.java | 12 ++++++++++-- examples/scopes/scopes.java | 12 ++++++++++-- examples/stats/stats.java | 12 ++++++++++-- examples/subusers/subusers.java | 12 ++++++++++-- examples/suppression/suppression.java | 16 ++++++++++++---- examples/templates/templates.java | 16 ++++++++++++---- examples/trackingsettings/trackingsettings.java | 16 ++++++++++++---- examples/user/user.java | 16 ++++++++++++---- examples/whitelabel/whitelabel.java | 16 ++++++++++++---- 23 files changed, 244 insertions(+), 60 deletions(-) diff --git a/examples/accesssettings/accesssettings.java b/examples/accesssettings/accesssettings.java index ddc7c1b3..43ba72f5 100644 --- a/examples/accesssettings/accesssettings.java +++ b/examples/accesssettings/accesssettings.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve all recent access attempts # diff --git a/examples/apikeys/apikeys.java b/examples/apikeys/apikeys.java index 1a96a0fc..16503750 100644 --- a/examples/apikeys/apikeys.java +++ b/examples/apikeys/apikeys.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Create API keys # diff --git a/examples/asm/asm.java b/examples/asm/asm.java index 7e31ad4b..03f21a7a 100644 --- a/examples/asm/asm.java +++ b/examples/asm/asm.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Create a Group # diff --git a/examples/browsers/browsers.java b/examples/browsers/browsers.java index e0889d98..4eaa937d 100644 --- a/examples/browsers/browsers.java +++ b/examples/browsers/browsers.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve email statistics by browser. # diff --git a/examples/campaigns/campaigns.java b/examples/campaigns/campaigns.java index 52ac1241..071eb659 100644 --- a/examples/campaigns/campaigns.java +++ b/examples/campaigns/campaigns.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Create a Campaign # diff --git a/examples/categories/categories.java b/examples/categories/categories.java index 42a70d25..aa5ecbe2 100644 --- a/examples/categories/categories.java +++ b/examples/categories/categories.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve all categories # diff --git a/examples/clients/clients.java b/examples/clients/clients.java index cb3be0c2..9b015685 100644 --- a/examples/clients/clients.java +++ b/examples/clients/clients.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve email statistics by client type. # diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java index f4b0aa67..2101d351 100644 --- a/examples/contactdb/contactdb.java +++ b/examples/contactdb/contactdb.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' - - -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Create a Custom Field # diff --git a/examples/devices/devices.java b/examples/devices/devices.java index 587c63c5..227a20f1 100644 --- a/examples/devices/devices.java +++ b/examples/devices/devices.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve email statistics by device type. # diff --git a/examples/geo/geo.java b/examples/geo/geo.java index b2412f0b..fdeb627a 100644 --- a/examples/geo/geo.java +++ b/examples/geo/geo.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve email statistics by country and state/province. # diff --git a/examples/ips/ips.java b/examples/ips/ips.java index 340d784f..7b72945d 100644 --- a/examples/ips/ips.java +++ b/examples/ips/ips.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve all IP addresses # diff --git a/examples/mail/mail.java b/examples/mail/mail.java index b9183a3f..52432a25 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Create a batch ID # diff --git a/examples/mailboxproviders/mailboxproviders.java b/examples/mailboxproviders/mailboxproviders.java index eb72272d..19128b0f 100644 --- a/examples/mailboxproviders/mailboxproviders.java +++ b/examples/mailboxproviders/mailboxproviders.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve email statistics by mailbox provider. # diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java index 89d3f4fb..76074acb 100644 --- a/examples/mailsettings/mailsettings.java +++ b/examples/mailsettings/mailsettings.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' - - -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve all mail settings # diff --git a/examples/partnersettings/partnersettings.java b/examples/partnersettings/partnersettings.java index 70ae66af..e0baa4b0 100644 --- a/examples/partnersettings/partnersettings.java +++ b/examples/partnersettings/partnersettings.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Returns a list of all partner settings. # diff --git a/examples/scopes/scopes.java b/examples/scopes/scopes.java index aa331a7a..c73488e0 100644 --- a/examples/scopes/scopes.java +++ b/examples/scopes/scopes.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve a list of scopes for which this user has access. # diff --git a/examples/stats/stats.java b/examples/stats/stats.java index ea51be84..c7ff2449 100644 --- a/examples/stats/stats.java +++ b/examples/stats/stats.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve global email statistics # diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java index 62e41041..07f78967 100644 --- a/examples/subusers/subusers.java +++ b/examples/subusers/subusers.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Create Subuser # diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java index 609223a8..a3aa719a 100644 --- a/examples/suppression/suppression.java +++ b/examples/suppression/suppression.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' - - -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve all blocks # diff --git a/examples/templates/templates.java b/examples/templates/templates.java index 18a14963..38822351 100644 --- a/examples/templates/templates.java +++ b/examples/templates/templates.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' - - -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Create a transactional template. # diff --git a/examples/trackingsettings/trackingsettings.java b/examples/trackingsettings/trackingsettings.java index eb2aeb15..405b1903 100644 --- a/examples/trackingsettings/trackingsettings.java +++ b/examples/trackingsettings/trackingsettings.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' - - -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Retrieve Tracking Settings # diff --git a/examples/user/user.java b/examples/user/user.java index da3e8147..847d77e3 100644 --- a/examples/user/user.java +++ b/examples/user/user.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' - - -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Get a user's account information. # diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java index b689b4c5..c8ab44fe 100644 --- a/examples/whitelabel/whitelabel.java +++ b/examples/whitelabel/whitelabel.java @@ -1,7 +1,15 @@ -require 'sendgrid-ruby' - - -sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; ################################################## # Create a domain whitelabel. # From 491ccccbb160253f8333b269932838d262a9f938 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 28 May 2016 13:58:35 -0700 Subject: [PATCH 029/439] Fixed duplicates in Examples --- examples/Example.java | 32 ++++++++++ examples/accesssettings/accesssettings.java | 12 ---- examples/apikeys/apikeys.java | 12 ---- examples/asm/asm.java | 22 ------- examples/browsers/browsers.java | 2 - examples/campaigns/campaigns.java | 22 ------- examples/categories/categories.java | 6 -- examples/clients/clients.java | 4 -- examples/contactdb/contactdb.java | 62 ------------------- examples/devices/devices.java | 2 - examples/geo/geo.java | 2 - examples/ips/ips.java | 28 --------- examples/mail/mail.java | 6 -- .../mailboxproviders/mailboxproviders.java | 2 - examples/mailsettings/mailsettings.java | 38 ------------ examples/partnersettings/partnersettings.java | 6 -- examples/scopes/scopes.java | 2 - examples/stats/stats.java | 2 - examples/subusers/subusers.java | 28 --------- examples/suppression/suppression.java | 34 ---------- examples/templates/templates.java | 20 ------ .../trackingsettings/trackingsettings.java | 18 ------ examples/user/user.java | 42 ------------- examples/whitelabel/whitelabel.java | 54 ---------------- 24 files changed, 32 insertions(+), 426 deletions(-) create mode 100644 examples/Example.java diff --git a/examples/Example.java b/examples/Example.java new file mode 100644 index 00000000..395fe75f --- /dev/null +++ b/examples/Example.java @@ -0,0 +1,32 @@ + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.Client; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "api_keys/"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.responseBody); + System.out.println(response.responseHeaders); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/accesssettings/accesssettings.java b/examples/accesssettings/accesssettings.java index 43ba72f5..54fecc6d 100644 --- a/examples/accesssettings/accesssettings.java +++ b/examples/accesssettings/accesssettings.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -43,8 +41,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -67,8 +63,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -90,8 +84,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -114,8 +106,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -137,8 +127,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/apikeys/apikeys.java b/examples/apikeys/apikeys.java index 16503750..43f9dc48 100644 --- a/examples/apikeys/apikeys.java +++ b/examples/apikeys/apikeys.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -41,8 +39,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -64,8 +60,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -88,8 +82,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -112,8 +104,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -135,8 +125,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/asm/asm.java b/examples/asm/asm.java index 03f21a7a..0d730f53 100644 --- a/examples/asm/asm.java +++ b/examples/asm/asm.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -41,8 +39,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -64,8 +60,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -88,8 +82,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -111,8 +103,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -134,8 +124,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -158,8 +146,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -181,8 +167,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -204,8 +188,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -228,8 +210,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -251,8 +231,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/browsers/browsers.java b/examples/browsers/browsers.java index 4eaa937d..824aea39 100644 --- a/examples/browsers/browsers.java +++ b/examples/browsers/browsers.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/campaigns/campaigns.java b/examples/campaigns/campaigns.java index 071eb659..bf5f35ac 100644 --- a/examples/campaigns/campaigns.java +++ b/examples/campaigns/campaigns.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -41,8 +39,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -68,8 +64,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -92,8 +86,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -115,8 +107,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -138,8 +128,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -162,8 +150,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -186,8 +172,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -209,8 +193,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -232,8 +214,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -255,8 +235,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/categories/categories.java b/examples/categories/categories.java index aa5ecbe2..d20c89dc 100644 --- a/examples/categories/categories.java +++ b/examples/categories/categories.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -45,8 +43,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -76,8 +72,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/clients/clients.java b/examples/clients/clients.java index 9b015685..78abd909 100644 --- a/examples/clients/clients.java +++ b/examples/clients/clients.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -45,8 +43,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java index 2101d351..25b821a3 100644 --- a/examples/contactdb/contactdb.java +++ b/examples/contactdb/contactdb.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -41,8 +39,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -64,8 +60,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -87,8 +81,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -110,8 +102,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -134,8 +124,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -157,8 +145,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -181,8 +167,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -208,8 +192,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -234,8 +216,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -260,8 +240,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -284,8 +262,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -312,8 +288,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -335,8 +309,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -362,8 +334,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -386,8 +356,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -410,8 +378,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -437,8 +403,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -461,8 +425,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -484,8 +446,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -507,8 +467,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -533,8 +491,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -556,8 +512,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -579,8 +533,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -602,8 +554,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -625,8 +575,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -649,8 +597,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -672,8 +618,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -699,8 +643,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -725,8 +667,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -751,8 +691,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/devices/devices.java b/examples/devices/devices.java index 227a20f1..a5420add 100644 --- a/examples/devices/devices.java +++ b/examples/devices/devices.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/geo/geo.java b/examples/geo/geo.java index fdeb627a..762c5378 100644 --- a/examples/geo/geo.java +++ b/examples/geo/geo.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/ips/ips.java b/examples/ips/ips.java index 7b72945d..96a9fba9 100644 --- a/examples/ips/ips.java +++ b/examples/ips/ips.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -47,8 +45,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -70,8 +66,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -94,8 +88,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -117,8 +109,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -141,8 +131,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -164,8 +152,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -187,8 +173,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -211,8 +195,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -234,8 +216,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -258,8 +238,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -281,8 +259,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -304,8 +280,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -327,8 +301,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/mail/mail.java b/examples/mail/mail.java index 52432a25..f78e3114 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -40,8 +38,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -63,8 +59,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/mailboxproviders/mailboxproviders.java b/examples/mailboxproviders/mailboxproviders.java index 19128b0f..cd0ab136 100644 --- a/examples/mailboxproviders/mailboxproviders.java +++ b/examples/mailboxproviders/mailboxproviders.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java index 76074acb..a3434e26 100644 --- a/examples/mailsettings/mailsettings.java +++ b/examples/mailsettings/mailsettings.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -44,8 +42,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -68,8 +64,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -91,8 +85,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -115,8 +107,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -138,8 +128,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -162,8 +150,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -185,8 +171,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -209,8 +193,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -232,8 +214,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -256,8 +236,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -279,8 +257,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -303,8 +279,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -326,8 +300,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -350,8 +322,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -373,8 +343,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -397,8 +365,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -420,8 +386,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -444,8 +408,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/partnersettings/partnersettings.java b/examples/partnersettings/partnersettings.java index e0baa4b0..3984229b 100644 --- a/examples/partnersettings/partnersettings.java +++ b/examples/partnersettings/partnersettings.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -44,8 +42,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -68,8 +64,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/scopes/scopes.java b/examples/scopes/scopes.java index c73488e0..baa174ef 100644 --- a/examples/scopes/scopes.java +++ b/examples/scopes/scopes.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/stats/stats.java b/examples/stats/stats.java index c7ff2449..a1461bd9 100644 --- a/examples/stats/stats.java +++ b/examples/stats/stats.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java index 07f78967..8be34f1d 100644 --- a/examples/subusers/subusers.java +++ b/examples/subusers/subusers.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -41,8 +39,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -69,8 +65,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -95,8 +89,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -126,8 +118,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -157,8 +147,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -189,8 +177,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -213,8 +199,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -236,8 +220,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -260,8 +242,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -284,8 +264,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -308,8 +286,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -331,8 +307,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -354,8 +328,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java index a3aa719a..d834bd85 100644 --- a/examples/suppression/suppression.java +++ b/examples/suppression/suppression.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -46,8 +44,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -70,8 +66,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -93,8 +87,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -116,8 +108,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -143,8 +133,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -167,8 +155,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -190,8 +176,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -216,8 +200,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -245,8 +227,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -269,8 +249,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -292,8 +270,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -315,8 +291,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -338,8 +312,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -361,8 +333,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -390,8 +360,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -414,8 +382,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/templates/templates.java b/examples/templates/templates.java index 38822351..8d9dbe75 100644 --- a/examples/templates/templates.java +++ b/examples/templates/templates.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -41,8 +39,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -64,8 +60,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -88,8 +82,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -111,8 +103,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -134,8 +124,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -158,8 +146,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -182,8 +168,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -205,8 +189,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -228,8 +210,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/trackingsettings/trackingsettings.java b/examples/trackingsettings/trackingsettings.java index 405b1903..ecf00f6a 100644 --- a/examples/trackingsettings/trackingsettings.java +++ b/examples/trackingsettings/trackingsettings.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -44,8 +42,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -68,8 +64,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -91,8 +85,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -115,8 +107,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -138,8 +128,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -162,8 +150,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -185,8 +171,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -209,8 +193,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/user/user.java b/examples/user/user.java index 847d77e3..1b950c35 100644 --- a/examples/user/user.java +++ b/examples/user/user.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -40,8 +38,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -63,8 +59,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -87,8 +81,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -110,8 +102,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -134,8 +124,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -158,8 +146,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -181,8 +167,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -205,8 +189,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -228,8 +210,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -252,8 +232,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -275,8 +253,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -298,8 +274,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -322,8 +296,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -345,8 +317,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -369,8 +339,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -392,8 +360,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -416,8 +382,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -439,8 +403,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -463,8 +425,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -486,8 +446,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java index c8ab44fe..2d67ee5e 100644 --- a/examples/whitelabel/whitelabel.java +++ b/examples/whitelabel/whitelabel.java @@ -17,8 +17,6 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -41,8 +39,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -71,8 +67,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -94,8 +88,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -117,8 +109,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -140,8 +130,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -164,8 +152,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -187,8 +173,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -210,8 +194,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -234,8 +216,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -258,8 +238,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -281,8 +259,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -304,8 +280,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -328,8 +302,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -356,8 +328,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -379,8 +349,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -402,8 +370,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -425,8 +391,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -453,8 +417,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -479,8 +441,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -505,8 +465,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -531,8 +489,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -557,8 +513,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -581,8 +535,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -604,8 +556,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -627,8 +577,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -650,8 +598,6 @@ public static void main(String[] args) throws IOException { public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); From f91158ea1bd7665abc925815cd6f6c51a3747271 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 28 May 2016 14:18:07 -0700 Subject: [PATCH 030/439] Remove trailing slash in endpoints --- .gitignore | 3 +- README.md | 13 +- USAGE.md | 426 +++++++++--------- examples/Example.java | 3 +- examples/accesssettings/accesssettings.java | 12 +- examples/apikeys/apikeys.java | 12 +- examples/asm/asm.java | 22 +- examples/browsers/browsers.java | 2 +- examples/campaigns/campaigns.java | 22 +- examples/categories/categories.java | 6 +- examples/clients/clients.java | 4 +- examples/contactdb/contactdb.java | 62 +-- examples/devices/devices.java | 2 +- examples/geo/geo.java | 2 +- examples/ips/ips.java | 28 +- examples/mail/mail.java | 6 +- .../mailboxproviders/mailboxproviders.java | 2 +- examples/mailsettings/mailsettings.java | 38 +- examples/partnersettings/partnersettings.java | 6 +- examples/scopes/scopes.java | 2 +- examples/stats/stats.java | 2 +- examples/subusers/subusers.java | 28 +- examples/suppression/suppression.java | 34 +- examples/templates/templates.java | 20 +- .../trackingsettings/trackingsettings.java | 18 +- examples/user/user.java | 42 +- examples/whitelabel/whitelabel.java | 54 +-- src/test/java/com/sendgrid/SendGridTest.java | 426 +++++++++--------- 28 files changed, 652 insertions(+), 645 deletions(-) diff --git a/.gitignore b/.gitignore index 7ca3c861..1d9351de 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ out repo gradle.properties target -*.class \ No newline at end of file +*.class +examples/Example.java \ No newline at end of file diff --git a/README.md b/README.md index d0a3d4c0..48a86698 100644 --- a/README.md +++ b/README.md @@ -54,8 +54,8 @@ cd sendgrid-java * Update the to and from [emails](https://github.com/sendgrid/sendgrid-java/blob/v3beta/examples/Mail/Example.java#L35). ```bash -cd examples/mail -javac -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-databind-2.7.3.jar:../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-databind-2.7.3.jar:../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.0.0-jar.jar:. Example +cd examples/helpers/mail +javac -classpath ../../examples/dependencies/jackson-annotations-2.7.0.jar:../../examples/dependencies/jackson-databind-2.7.3.jar:../../examples/dependencies/jackson-core-2.7.3.jar:../../../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ../../examples/dependencies/jackson-annotations-2.7.0.jar:../../examples/dependencies/jackson-databind-2.7.3.jar:../../examples/dependencies/jackson-core-2.7.3.jar:../../../build/libs/sendgrid-3.0.0-jar.jar:. Example ``` ## TRYING OUT THE V3 BETA WEB API @@ -69,7 +69,13 @@ git clone -b v3beta --single-branch https://github.com/sendgrid/sendgrid-java.gi ```bash cd examples -javac -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example +touch Example.java +``` + +Add the example you want to test to Example.java, including the headers at the top of the file. + +``` bash +javac -classpath ./dependencies/jackson-annotations-2.7.0.jar:./dependencies/jackson-databind-2.7.3.jar:./dependencies/jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ./dependencies/jackson-annotations-2.7.0.jar:./dependencies/jackson-databind-2.7.3.jar:./dependencies/jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example ``` * Check out the documentation for [Web API v3 /mail/send/beta endpoint](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html). @@ -175,6 +181,7 @@ try { # Usage - [SendGrid Docs](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) +- [Usage Docs](https://github.com/sendgrid/sendgrid-java/tree/v3beta/USAGE.md) - [Example Code](https://github.com/sendgrid/sendgrid-java/tree/v3beta/examples) ## Roadmap diff --git a/USAGE.md b/USAGE.md index 1a18d5ca..af091acd 100644 --- a/USAGE.md +++ b/USAGE.md @@ -71,7 +71,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "access_settings/activity/"; + request.endpoint = "access_settings/activity"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); request.queryParams = queryParams; @@ -101,7 +101,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "access_settings/whitelist/"; + request.endpoint = "access_settings/whitelist"; request.requestBody = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -127,7 +127,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "access_settings/whitelist/"; + request.endpoint = "access_settings/whitelist"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -154,7 +154,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist/"; + request.endpoint = "access_settings/whitelist"; request.requestBody = "{\"ids\":[1,2,3]}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -182,7 +182,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "access_settings/whitelist/{rule_id}/"; + request.endpoint = "access_settings/whitelist/{rule_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -209,7 +209,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist/{rule_id}/"; + request.endpoint = "access_settings/whitelist/{rule_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -241,7 +241,7 @@ See the [API Key Permissions List](https://sendgrid.com/docs/API_Reference/Web_A SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "api_keys/"; + request.endpoint = "api_keys"; request.requestBody = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -265,7 +265,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "api_keys/"; + request.endpoint = "api_keys"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -292,7 +292,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; request.requestBody = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -324,7 +324,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; request.requestBody = "{\"name\":\"A New Hope\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -348,7 +348,7 @@ If the API Key ID does not exist an HTTP 404 will be returned. SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -379,7 +379,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -409,7 +409,7 @@ Each user can create up to 25 different suppression groups. SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "asm/groups/"; + request.endpoint = "asm/groups"; request.requestBody = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -437,7 +437,7 @@ Each user can create up to 25 different suppression groups. SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/groups/"; + request.endpoint = "asm/groups"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -464,7 +464,7 @@ Each user can create up to 25 different suppression groups. SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "asm/groups/{group_id}/"; + request.endpoint = "asm/groups/{group_id}"; request.requestBody = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -492,7 +492,7 @@ Each user can create up to 25 different suppression groups. SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}/"; + request.endpoint = "asm/groups/{group_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -521,7 +521,7 @@ Each user can create up to 25 different suppression groups. SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}/"; + request.endpoint = "asm/groups/{group_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -546,7 +546,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "asm/groups/{group_id}/suppressions/"; + request.endpoint = "asm/groups/{group_id}/suppressions"; request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -570,7 +570,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}/suppressions/"; + request.endpoint = "asm/groups/{group_id}/suppressions"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -593,7 +593,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}/suppressions/{email}/"; + request.endpoint = "asm/groups/{group_id}/suppressions/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -616,7 +616,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "asm/suppressions/global/"; + request.endpoint = "asm/suppressions/global"; request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -642,7 +642,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/suppressions/global/{email}/"; + request.endpoint = "asm/suppressions/global/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -665,7 +665,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "asm/suppressions/global/{email}/"; + request.endpoint = "asm/suppressions/global/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -693,7 +693,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "browsers/stats/"; + request.endpoint = "browsers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -733,7 +733,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/"; + request.endpoint = "campaigns"; request.requestBody = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -763,7 +763,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "campaigns/"; + request.endpoint = "campaigns"; Map queryParams = new HashMap(); queryParams.put("limit", "0"); queryParams.put("offset", "0"); @@ -792,7 +792,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}/"; + request.endpoint = "campaigns/{campaign_id}"; request.requestBody = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -820,7 +820,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}/"; + request.endpoint = "campaigns/{campaign_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -847,7 +847,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}/"; + request.endpoint = "campaigns/{campaign_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -872,7 +872,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; request.requestBody = "{\"send_at\":1489451436}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -898,7 +898,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; request.requestBody = "{\"send_at\":1489771528}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -924,7 +924,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -952,7 +952,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -979,7 +979,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/now/"; + request.endpoint = "campaigns/{campaign_id}/schedules/now"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1006,7 +1006,7 @@ For more information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/test/"; + request.endpoint = "campaigns/{campaign_id}/schedules/test"; request.requestBody = "{\"to\":\"your.email@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1033,7 +1033,7 @@ Categories can help organize your email analytics by enabling you to tag emails SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "categories/"; + request.endpoint = "categories"; Map queryParams = new HashMap(); queryParams.put("category", "test_string"); queryParams.put("limit", "1"); @@ -1063,7 +1063,7 @@ Categories allow you to group your emails together according to broad topics tha SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "categories/stats/"; + request.endpoint = "categories/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -1096,7 +1096,7 @@ Categories allow you to group your emails together according to broad topics tha SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "categories/stats/sums/"; + request.endpoint = "categories/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -1133,7 +1133,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "clients/stats/"; + request.endpoint = "clients/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("start_date", "2016-01-01"); @@ -1169,7 +1169,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "clients/{client_type}/stats/"; + request.endpoint = "clients/{client_type}/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("start_date", "2016-01-01"); @@ -1200,7 +1200,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/custom_fields/"; + request.endpoint = "contactdb/custom_fields"; request.requestBody = "{\"type\":\"text\",\"name\":\"pet\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1224,7 +1224,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/custom_fields/"; + request.endpoint = "contactdb/custom_fields"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1247,7 +1247,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + request.endpoint = "contactdb/custom_fields/{custom_field_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1270,7 +1270,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + request.endpoint = "contactdb/custom_fields/{custom_field_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1293,7 +1293,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/lists/"; + request.endpoint = "contactdb/lists"; request.requestBody = "{\"name\":\"your list name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1317,7 +1317,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/lists/"; + request.endpoint = "contactdb/lists"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1340,7 +1340,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/lists/"; + request.endpoint = "contactdb/lists"; request.requestBody = "[1,2,3,4]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1365,7 +1365,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "contactdb/lists/{list_id}/"; + request.endpoint = "contactdb/lists/{list_id}"; request.requestBody = "{\"name\":\"newlistname\"}"; Map queryParams = new HashMap(); queryParams.put("list_id", "0"); @@ -1392,7 +1392,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}/"; + request.endpoint = "contactdb/lists/{list_id}"; Map queryParams = new HashMap(); queryParams.put("list_id", "0"); request.queryParams = queryParams; @@ -1418,7 +1418,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}/"; + request.endpoint = "contactdb/lists/{list_id}"; Map queryParams = new HashMap(); queryParams.put("delete_contacts", "true"); request.queryParams = queryParams; @@ -1446,7 +1446,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients/"; + request.endpoint = "contactdb/lists/{list_id}/recipients"; request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1470,7 +1470,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}/recipients/"; + request.endpoint = "contactdb/lists/{list_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); @@ -1498,7 +1498,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1521,7 +1521,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Map queryParams = new HashMap(); queryParams.put("recipient_id", "0"); queryParams.put("list_id", "0"); @@ -1552,7 +1552,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; request.requestBody = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1578,7 +1578,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; request.requestBody = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1605,7 +1605,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); @@ -1634,7 +1634,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1660,7 +1660,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/billable_count/"; + request.endpoint = "contactdb/recipients/billable_count"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1683,7 +1683,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/count/"; + request.endpoint = "contactdb/recipients/count"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1715,7 +1715,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/search/"; + request.endpoint = "contactdb/recipients/search"; Map queryParams = new HashMap(); queryParams.put("{field_name}", "test_string"); request.queryParams = queryParams; @@ -1741,7 +1741,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}/"; + request.endpoint = "contactdb/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1764,7 +1764,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/recipients/{recipient_id}/"; + request.endpoint = "contactdb/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1789,7 +1789,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}/lists/"; + request.endpoint = "contactdb/recipients/{recipient_id}/lists"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1812,7 +1812,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/reserved_fields/"; + request.endpoint = "contactdb/reserved_fields"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1855,7 +1855,7 @@ For more information about segments in Marketing Campaigns, please see our [User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/segments/"; + request.endpoint = "contactdb/segments"; request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1881,7 +1881,7 @@ For more information about segments in Marketing Campaigns, please see our [User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/segments/"; + request.endpoint = "contactdb/segments"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -1906,7 +1906,7 @@ For more information about segments in Marketing Campaigns, please see our [User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "contactdb/segments/{segment_id}/"; + request.endpoint = "contactdb/segments/{segment_id}"; request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; Map queryParams = new HashMap(); queryParams.put("segment_id", "test_string"); @@ -1935,7 +1935,7 @@ For more information about segments in Marketing Campaigns, please see our [User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}/"; + request.endpoint = "contactdb/segments/{segment_id}"; Map queryParams = new HashMap(); queryParams.put("segment_id", "0"); request.queryParams = queryParams; @@ -1965,7 +1965,7 @@ For more information about segments in Marketing Campaigns, please see our [User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/segments/{segment_id}/"; + request.endpoint = "contactdb/segments/{segment_id}"; Map queryParams = new HashMap(); queryParams.put("delete_contacts", "true"); request.queryParams = queryParams; @@ -1993,7 +1993,7 @@ For more information about segments in Marketing Campaigns, please see our [User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}/recipients/"; + request.endpoint = "contactdb/segments/{segment_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); @@ -2034,7 +2034,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "devices/stats/"; + request.endpoint = "devices/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("limit", "1"); @@ -2069,7 +2069,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "geo/stats/"; + request.endpoint = "geo/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("country", "US"); @@ -2105,7 +2105,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/"; + request.endpoint = "ips"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); queryParams.put("ip", "test_string"); @@ -2135,7 +2135,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/assigned/"; + request.endpoint = "ips/assigned"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2164,7 +2164,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "ips/pools/"; + request.endpoint = "ips/pools"; request.requestBody = "{\"name\":\"marketing\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2192,7 +2192,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/pools/"; + request.endpoint = "ips/pools"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2219,7 +2219,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "ips/pools/{pool_name}/"; + request.endpoint = "ips/pools/{pool_name}"; request.requestBody = "{\"name\":\"new_pool_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2247,7 +2247,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/pools/{pool_name}/"; + request.endpoint = "ips/pools/{pool_name}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2274,7 +2274,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}/"; + request.endpoint = "ips/pools/{pool_name}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2299,7 +2299,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "ips/pools/{pool_name}/ips/"; + request.endpoint = "ips/pools/{pool_name}/ips"; request.requestBody = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2325,7 +2325,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}/ips/{ip}/"; + request.endpoint = "ips/pools/{pool_name}/ips/{ip}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2350,7 +2350,7 @@ For more general information about warming up IPs, please see our [Classroom](ht SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "ips/warmup/"; + request.endpoint = "ips/warmup"; request.requestBody = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2376,7 +2376,7 @@ For more general information about warming up IPs, please see our [Classroom](ht SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/warmup/"; + request.endpoint = "ips/warmup"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2401,7 +2401,7 @@ For more general information about warming up IPs, please see our [Classroom](ht SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/warmup/{ip_address}/"; + request.endpoint = "ips/warmup/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2426,7 +2426,7 @@ For more general information about warming up IPs, please see our [Classroom](ht SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "ips/warmup/{ip_address}/"; + request.endpoint = "ips/warmup/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2451,7 +2451,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/{ip_address}/"; + request.endpoint = "ips/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2481,7 +2481,7 @@ More Information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "mail/batch/"; + request.endpoint = "mail/batch"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2508,7 +2508,7 @@ More Information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail/batch/{batch_id}/"; + request.endpoint = "mail/batch/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2536,7 +2536,7 @@ For more detailed information about how to use the v3 Mail Send endpoint, please SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "mail/send/beta/"; + request.endpoint = "mail/send/beta"; request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2563,7 +2563,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/"; + request.endpoint = "mail_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); @@ -2592,7 +2592,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/address_whitelist/"; + request.endpoint = "mail_settings/address_whitelist"; request.requestBody = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2618,7 +2618,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/address_whitelist/"; + request.endpoint = "mail_settings/address_whitelist"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2643,7 +2643,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/bcc/"; + request.endpoint = "mail_settings/bcc"; request.requestBody = "{\"enabled\":false,\"email\":\"email@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2669,7 +2669,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/bcc/"; + request.endpoint = "mail_settings/bcc"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2694,7 +2694,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/bounce_purge/"; + request.endpoint = "mail_settings/bounce_purge"; request.requestBody = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2720,7 +2720,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/bounce_purge/"; + request.endpoint = "mail_settings/bounce_purge"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2745,7 +2745,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/footer/"; + request.endpoint = "mail_settings/footer"; request.requestBody = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2771,7 +2771,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/footer/"; + request.endpoint = "mail_settings/footer"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2796,7 +2796,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_bounce/"; + request.endpoint = "mail_settings/forward_bounce"; request.requestBody = "{\"enabled\":true,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2822,7 +2822,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/forward_bounce/"; + request.endpoint = "mail_settings/forward_bounce"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2847,7 +2847,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_spam/"; + request.endpoint = "mail_settings/forward_spam"; request.requestBody = "{\"enabled\":false,\"email\":\"\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2873,7 +2873,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/forward_spam/"; + request.endpoint = "mail_settings/forward_spam"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2898,7 +2898,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/plain_content/"; + request.endpoint = "mail_settings/plain_content"; request.requestBody = "{\"enabled\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2924,7 +2924,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/plain_content/"; + request.endpoint = "mail_settings/plain_content"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -2949,7 +2949,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/spam_check/"; + request.endpoint = "mail_settings/spam_check"; request.requestBody = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2975,7 +2975,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/spam_check/"; + request.endpoint = "mail_settings/spam_check"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3002,7 +3002,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/template/"; + request.endpoint = "mail_settings/template"; request.requestBody = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3030,7 +3030,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/template/"; + request.endpoint = "mail_settings/template"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3058,7 +3058,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mailbox_providers/stats/"; + request.endpoint = "mailbox_providers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("mailbox_providers", "test_string"); @@ -3092,7 +3092,7 @@ Our partner settings allow you to integrate your SendGrid account with our partn SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "partner_settings/"; + request.endpoint = "partner_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); @@ -3121,7 +3121,7 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "partner_settings/new_relic/"; + request.endpoint = "partner_settings/new_relic"; request.requestBody = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3147,7 +3147,7 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "partner_settings/new_relic/"; + request.endpoint = "partner_settings/new_relic"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3173,7 +3173,7 @@ API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://s SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "scopes/"; + request.endpoint = "scopes"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3199,7 +3199,7 @@ Parent accounts will see aggregated stats for their account and all subuser acco SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "stats/"; + request.endpoint = "stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("limit", "1"); @@ -3235,7 +3235,7 @@ For more information about Subusers: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "subusers/"; + request.endpoint = "subusers"; request.requestBody = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3262,7 +3262,7 @@ For more information about Subusers: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/"; + request.endpoint = "subusers"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); queryParams.put("limit", "0"); @@ -3290,7 +3290,7 @@ This endpoint allows you to request the reputations for your subusers. SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/reputations/"; + request.endpoint = "subusers/reputations"; Map queryParams = new HashMap(); queryParams.put("usernames", "test_string"); request.queryParams = queryParams; @@ -3320,7 +3320,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/stats/"; + request.endpoint = "subusers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -3356,7 +3356,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/stats/monthly/"; + request.endpoint = "subusers/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); queryParams.put("limit", "1"); @@ -3390,7 +3390,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/stats/sums/"; + request.endpoint = "subusers/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -3425,7 +3425,7 @@ For more information about Subusers: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "subusers/{subuser_name}/"; + request.endpoint = "subusers/{subuser_name}"; request.requestBody = "{\"disabled\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3452,7 +3452,7 @@ For more information about Subusers: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}/"; + request.endpoint = "subusers/{subuser_name}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3478,7 +3478,7 @@ More information: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/ips/"; + request.endpoint = "subusers/{subuser_name}/ips"; request.requestBody = "[\"127.0.0.1\"]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3500,7 +3500,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; request.requestBody = "{\"frequency\":500,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3522,7 +3522,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; request.requestBody = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3544,7 +3544,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3565,7 +3565,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3593,7 +3593,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/stats/monthly/"; + request.endpoint = "subusers/{subuser_name}/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("date", "test_string"); queryParams.put("sort_by_direction", "asc"); @@ -3628,7 +3628,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/blocks/"; + request.endpoint = "suppression/blocks"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -3664,7 +3664,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/blocks/"; + request.endpoint = "suppression/blocks"; request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3690,7 +3690,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/blocks/{email}/"; + request.endpoint = "suppression/blocks/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3715,7 +3715,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/blocks/{email}/"; + request.endpoint = "suppression/blocks/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3743,7 +3743,7 @@ For more information see: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/bounces/"; + request.endpoint = "suppression/bounces"; Map queryParams = new HashMap(); queryParams.put("start_time", "0"); queryParams.put("end_time", "0"); @@ -3778,7 +3778,7 @@ Note: the `delete_all` and `emails` parameters should be used independently of e SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/bounces/"; + request.endpoint = "suppression/bounces"; request.requestBody = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3808,7 +3808,7 @@ For more information see: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/bounces/{email}/"; + request.endpoint = "suppression/bounces/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3837,7 +3837,7 @@ For more information see: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/bounces/{email}/"; + request.endpoint = "suppression/bounces/{email}"; Map queryParams = new HashMap(); queryParams.put("email_address", "example@example.com"); request.queryParams = queryParams; @@ -3867,7 +3867,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/invalid_emails/"; + request.endpoint = "suppression/invalid_emails"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -3905,7 +3905,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails/"; + request.endpoint = "suppression/invalid_emails"; request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3933,7 +3933,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/invalid_emails/{email}/"; + request.endpoint = "suppression/invalid_emails/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3960,7 +3960,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails/{email}/"; + request.endpoint = "suppression/invalid_emails/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -3985,7 +3985,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/spam_report/{email}/"; + request.endpoint = "suppression/spam_report/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4010,7 +4010,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/spam_report/{email}/"; + request.endpoint = "suppression/spam_report/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4035,7 +4035,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/spam_reports/"; + request.endpoint = "suppression/spam_reports"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -4071,7 +4071,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/spam_reports/"; + request.endpoint = "suppression/spam_reports"; request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4095,7 +4095,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/unsubscribes/"; + request.endpoint = "suppression/unsubscribes"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -4129,7 +4129,7 @@ Transactional templates are templates created specifically for transactional ema SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "templates/"; + request.endpoint = "templates"; request.requestBody = "{\"name\":\"example_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4155,7 +4155,7 @@ Transactional templates are templates created specifically for transactional ema SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "templates/"; + request.endpoint = "templates"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4181,7 +4181,7 @@ Transactional templates are templates created specifically for transactional ema SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "templates/{template_id}/"; + request.endpoint = "templates/{template_id}"; request.requestBody = "{\"name\":\"new_example_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4208,7 +4208,7 @@ Transactional templates are templates created specifically for transactional ema SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "templates/{template_id}/"; + request.endpoint = "templates/{template_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4234,7 +4234,7 @@ Transactional templates are templates created specifically for transactional ema SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "templates/{template_id}/"; + request.endpoint = "templates/{template_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4260,7 +4260,7 @@ For more information about transactional templates, please see our [User Guide]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions/"; + request.endpoint = "templates/{template_id}/versions"; request.requestBody = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4292,7 +4292,7 @@ For more information about transactional templates, please see our [User Guide]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.endpoint = "templates/{template_id}/versions/{version_id}"; request.requestBody = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4324,7 +4324,7 @@ For more information about transactional templates, please see our [User Guide]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.endpoint = "templates/{template_id}/versions/{version_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4355,7 +4355,7 @@ For more information about transactional templates, please see our [User Guide]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.endpoint = "templates/{template_id}/versions/{version_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4387,7 +4387,7 @@ For more information about transactional templates, please see our [User Guide]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions/{version_id}/activate/"; + request.endpoint = "templates/{template_id}/versions/{version_id}/activate"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4415,7 +4415,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/"; + request.endpoint = "tracking_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); @@ -4444,7 +4444,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/click/"; + request.endpoint = "tracking_settings/click"; request.requestBody = "{\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4470,7 +4470,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/click/"; + request.endpoint = "tracking_settings/click"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4499,7 +4499,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/google_analytics/"; + request.endpoint = "tracking_settings/google_analytics"; request.requestBody = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4529,7 +4529,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/google_analytics/"; + request.endpoint = "tracking_settings/google_analytics"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4556,7 +4556,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/open/"; + request.endpoint = "tracking_settings/open"; request.requestBody = "{\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4584,7 +4584,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/open/"; + request.endpoint = "tracking_settings/open"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4611,7 +4611,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/subscription/"; + request.endpoint = "tracking_settings/subscription"; request.requestBody = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4639,7 +4639,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/subscription/"; + request.endpoint = "tracking_settings/subscription"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4671,7 +4671,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/account/"; + request.endpoint = "user/account"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4694,7 +4694,7 @@ Your monthly credit allotment limits the number of emails you may send before in SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/credits/"; + request.endpoint = "user/credits"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4721,7 +4721,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "user/email/"; + request.endpoint = "user/email"; request.requestBody = "{\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4749,7 +4749,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/email/"; + request.endpoint = "user/email"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4776,7 +4776,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "user/password/"; + request.endpoint = "user/password"; request.requestBody = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4806,7 +4806,7 @@ It should be noted that any one or more of the parameters can be updated via the SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/profile/"; + request.endpoint = "user/profile"; request.requestBody = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4832,7 +4832,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/profile/"; + request.endpoint = "user/profile"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4858,7 +4858,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "user/scheduled_sends/"; + request.endpoint = "user/scheduled_sends"; request.requestBody = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4882,7 +4882,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/scheduled_sends/"; + request.endpoint = "user/scheduled_sends"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4905,7 +4905,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.endpoint = "user/scheduled_sends/{batch_id}"; request.requestBody = "{\"status\":\"pause\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4929,7 +4929,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.endpoint = "user/scheduled_sends/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4952,7 +4952,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.endpoint = "user/scheduled_sends/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -4977,7 +4977,7 @@ The Enforced TLS settings specify whether or not the recipient is required to su SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/settings/enforced_tls/"; + request.endpoint = "user/settings/enforced_tls"; request.requestBody = "{\"require_tls\":true,\"require_valid_cert\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5003,7 +5003,7 @@ The Enforced TLS settings specify whether or not the recipient is required to su SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/settings/enforced_tls/"; + request.endpoint = "user/settings/enforced_tls"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5030,7 +5030,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "user/username/"; + request.endpoint = "user/username"; request.requestBody = "{\"username\":\"test_username\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5058,7 +5058,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/username/"; + request.endpoint = "user/username"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5085,7 +5085,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/webhooks/event/settings/"; + request.endpoint = "user/webhooks/event/settings"; request.requestBody = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5113,7 +5113,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/webhooks/event/settings/"; + request.endpoint = "user/webhooks/event/settings"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5138,7 +5138,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "user/webhooks/event/test/"; + request.endpoint = "user/webhooks/event/test"; request.requestBody = "{\"url\":\"url\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5162,7 +5162,7 @@ SendGrid can parse the attachments and contents of incoming emails. The Parse AP SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/webhooks/parse/settings/"; + request.endpoint = "user/webhooks/parse/settings"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5187,7 +5187,7 @@ There are a number of pre-made integrations for the SendGrid Parse Webhook which SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/webhooks/parse/stats/"; + request.endpoint = "user/webhooks/parse/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("limit", "test_string"); @@ -5226,7 +5226,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/"; + request.endpoint = "whitelabel/domains"; request.requestBody = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5253,7 +5253,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/"; + request.endpoint = "whitelabel/domains"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); queryParams.put("domain", "test_string"); @@ -5290,7 +5290,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/default/"; + request.endpoint = "whitelabel/domains/default"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5322,7 +5322,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/subuser/"; + request.endpoint = "whitelabel/domains/subuser"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5354,7 +5354,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/subuser/"; + request.endpoint = "whitelabel/domains/subuser"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5379,7 +5379,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "whitelabel/domains/{domain_id}/"; + request.endpoint = "whitelabel/domains/{domain_id}"; request.requestBody = "{\"default\":false,\"custom_spf\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5406,7 +5406,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/{domain_id}/"; + request.endpoint = "whitelabel/domains/{domain_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5431,7 +5431,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{domain_id}/"; + request.endpoint = "whitelabel/domains/{domain_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5463,7 +5463,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/{domain_id}/subuser/"; + request.endpoint = "whitelabel/domains/{domain_id}/subuser"; request.requestBody = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5494,7 +5494,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/ips/"; + request.endpoint = "whitelabel/domains/{id}/ips"; request.requestBody = "{\"ip\":\"192.168.0.1\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5526,7 +5526,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{id}/ips/{ip}/"; + request.endpoint = "whitelabel/domains/{id}/ips/{ip}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5556,7 +5556,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/validate/"; + request.endpoint = "whitelabel/domains/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5583,7 +5583,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/ips/"; + request.endpoint = "whitelabel/ips"; request.requestBody = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5611,7 +5611,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/ips/"; + request.endpoint = "whitelabel/ips"; Map queryParams = new HashMap(); queryParams.put("ip", "test_string"); queryParams.put("limit", "1"); @@ -5641,7 +5641,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/ips/{id}/"; + request.endpoint = "whitelabel/ips/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5666,7 +5666,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/ips/{id}/"; + request.endpoint = "whitelabel/ips/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5691,7 +5691,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/ips/{id}/validate/"; + request.endpoint = "whitelabel/ips/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5716,7 +5716,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/links/"; + request.endpoint = "whitelabel/links"; request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); @@ -5746,7 +5746,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/"; + request.endpoint = "whitelabel/links"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); request.queryParams = queryParams; @@ -5781,7 +5781,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/default/"; + request.endpoint = "whitelabel/links/default"; Map queryParams = new HashMap(); queryParams.put("domain", "test_string"); request.queryParams = queryParams; @@ -5813,7 +5813,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/subuser/"; + request.endpoint = "whitelabel/links/subuser"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); request.queryParams = queryParams; @@ -5845,7 +5845,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/links/subuser/"; + request.endpoint = "whitelabel/links/subuser"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); request.queryParams = queryParams; @@ -5873,7 +5873,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "whitelabel/links/{id}/"; + request.endpoint = "whitelabel/links/{id}"; request.requestBody = "{\"default\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5899,7 +5899,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/{id}/"; + request.endpoint = "whitelabel/links/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5924,7 +5924,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/links/{id}/"; + request.endpoint = "whitelabel/links/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5949,7 +5949,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/links/{id}/validate/"; + request.endpoint = "whitelabel/links/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -5978,7 +5978,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/links/{link_id}/subuser/"; + request.endpoint = "whitelabel/links/{link_id}/subuser"; request.requestBody = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/Example.java b/examples/Example.java index 395fe75f..8acf8c72 100644 --- a/examples/Example.java +++ b/examples/Example.java @@ -14,11 +14,10 @@ public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); + sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); request.method = Method.GET; request.endpoint = "api_keys/"; Response response = sg.api(request); diff --git a/examples/accesssettings/accesssettings.java b/examples/accesssettings/accesssettings.java index 54fecc6d..6e83fded 100644 --- a/examples/accesssettings/accesssettings.java +++ b/examples/accesssettings/accesssettings.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "access_settings/activity/"; + request.endpoint = "access_settings/activity"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); request.queryParams = queryParams; @@ -45,7 +45,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "access_settings/whitelist/"; + request.endpoint = "access_settings/whitelist"; request.requestBody = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -67,7 +67,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "access_settings/whitelist/"; + request.endpoint = "access_settings/whitelist"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -88,7 +88,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist/"; + request.endpoint = "access_settings/whitelist"; request.requestBody = "{\"ids\":[1,2,3]}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -110,7 +110,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "access_settings/whitelist/{rule_id}/"; + request.endpoint = "access_settings/whitelist/{rule_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -131,7 +131,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist/{rule_id}/"; + request.endpoint = "access_settings/whitelist/{rule_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/examples/apikeys/apikeys.java b/examples/apikeys/apikeys.java index 43f9dc48..1567449d 100644 --- a/examples/apikeys/apikeys.java +++ b/examples/apikeys/apikeys.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "api_keys/"; + request.endpoint = "api_keys"; request.requestBody = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -43,7 +43,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "api_keys/"; + request.endpoint = "api_keys"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -64,7 +64,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; request.requestBody = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -86,7 +86,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; request.requestBody = "{\"name\":\"A New Hope\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -108,7 +108,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -129,7 +129,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/examples/asm/asm.java b/examples/asm/asm.java index 0d730f53..8dfc4e78 100644 --- a/examples/asm/asm.java +++ b/examples/asm/asm.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "asm/groups/"; + request.endpoint = "asm/groups"; request.requestBody = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -43,7 +43,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/groups/"; + request.endpoint = "asm/groups"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -64,7 +64,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "asm/groups/{group_id}/"; + request.endpoint = "asm/groups/{group_id}"; request.requestBody = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -86,7 +86,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}/"; + request.endpoint = "asm/groups/{group_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -107,7 +107,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}/"; + request.endpoint = "asm/groups/{group_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -128,7 +128,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "asm/groups/{group_id}/suppressions/"; + request.endpoint = "asm/groups/{group_id}/suppressions"; request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -150,7 +150,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}/suppressions/"; + request.endpoint = "asm/groups/{group_id}/suppressions"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -171,7 +171,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}/suppressions/{email}/"; + request.endpoint = "asm/groups/{group_id}/suppressions/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -192,7 +192,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "asm/suppressions/global/"; + request.endpoint = "asm/suppressions/global"; request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -214,7 +214,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/suppressions/global/{email}/"; + request.endpoint = "asm/suppressions/global/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -235,7 +235,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "asm/suppressions/global/{email}/"; + request.endpoint = "asm/suppressions/global/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/examples/browsers/browsers.java b/examples/browsers/browsers.java index 824aea39..c65b0645 100644 --- a/examples/browsers/browsers.java +++ b/examples/browsers/browsers.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "browsers/stats/"; + request.endpoint = "browsers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); diff --git a/examples/campaigns/campaigns.java b/examples/campaigns/campaigns.java index bf5f35ac..c037a477 100644 --- a/examples/campaigns/campaigns.java +++ b/examples/campaigns/campaigns.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/"; + request.endpoint = "campaigns"; request.requestBody = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -43,7 +43,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "campaigns/"; + request.endpoint = "campaigns"; Map queryParams = new HashMap(); queryParams.put("limit", "0"); queryParams.put("offset", "0"); @@ -68,7 +68,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}/"; + request.endpoint = "campaigns/{campaign_id}"; request.requestBody = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -90,7 +90,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}/"; + request.endpoint = "campaigns/{campaign_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -111,7 +111,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}/"; + request.endpoint = "campaigns/{campaign_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -132,7 +132,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; request.requestBody = "{\"send_at\":1489451436}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -154,7 +154,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; request.requestBody = "{\"send_at\":1489771528}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -176,7 +176,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -197,7 +197,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -218,7 +218,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/now/"; + request.endpoint = "campaigns/{campaign_id}/schedules/now"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -239,7 +239,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/test/"; + request.endpoint = "campaigns/{campaign_id}/schedules/test"; request.requestBody = "{\"to\":\"your.email@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/categories/categories.java b/examples/categories/categories.java index d20c89dc..dcfc660a 100644 --- a/examples/categories/categories.java +++ b/examples/categories/categories.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "categories/"; + request.endpoint = "categories"; Map queryParams = new HashMap(); queryParams.put("category", "test_string"); queryParams.put("limit", "1"); @@ -47,7 +47,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "categories/stats/"; + request.endpoint = "categories/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -76,7 +76,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "categories/stats/sums/"; + request.endpoint = "categories/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); diff --git a/examples/clients/clients.java b/examples/clients/clients.java index 78abd909..776e8a85 100644 --- a/examples/clients/clients.java +++ b/examples/clients/clients.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "clients/stats/"; + request.endpoint = "clients/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("start_date", "2016-01-01"); @@ -47,7 +47,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "clients/{client_type}/stats/"; + request.endpoint = "clients/{client_type}/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("start_date", "2016-01-01"); diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java index 25b821a3..47b443d0 100644 --- a/examples/contactdb/contactdb.java +++ b/examples/contactdb/contactdb.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/custom_fields/"; + request.endpoint = "contactdb/custom_fields"; request.requestBody = "{\"type\":\"text\",\"name\":\"pet\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -43,7 +43,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/custom_fields/"; + request.endpoint = "contactdb/custom_fields"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -64,7 +64,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + request.endpoint = "contactdb/custom_fields/{custom_field_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -85,7 +85,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + request.endpoint = "contactdb/custom_fields/{custom_field_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -106,7 +106,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/lists/"; + request.endpoint = "contactdb/lists"; request.requestBody = "{\"name\":\"your list name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -128,7 +128,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/lists/"; + request.endpoint = "contactdb/lists"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -149,7 +149,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/lists/"; + request.endpoint = "contactdb/lists"; request.requestBody = "[1,2,3,4]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -171,7 +171,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "contactdb/lists/{list_id}/"; + request.endpoint = "contactdb/lists/{list_id}"; request.requestBody = "{\"name\":\"newlistname\"}"; Map queryParams = new HashMap(); queryParams.put("list_id", "0"); @@ -196,7 +196,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}/"; + request.endpoint = "contactdb/lists/{list_id}"; Map queryParams = new HashMap(); queryParams.put("list_id", "0"); request.queryParams = queryParams; @@ -220,7 +220,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}/"; + request.endpoint = "contactdb/lists/{list_id}"; Map queryParams = new HashMap(); queryParams.put("delete_contacts", "true"); request.queryParams = queryParams; @@ -244,7 +244,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients/"; + request.endpoint = "contactdb/lists/{list_id}/recipients"; request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -266,7 +266,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}/recipients/"; + request.endpoint = "contactdb/lists/{list_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); @@ -292,7 +292,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -313,7 +313,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Map queryParams = new HashMap(); queryParams.put("recipient_id", "0"); queryParams.put("list_id", "0"); @@ -338,7 +338,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; request.requestBody = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -360,7 +360,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; request.requestBody = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -382,7 +382,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); @@ -407,7 +407,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -429,7 +429,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/billable_count/"; + request.endpoint = "contactdb/recipients/billable_count"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -450,7 +450,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/count/"; + request.endpoint = "contactdb/recipients/count"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -471,7 +471,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/search/"; + request.endpoint = "contactdb/recipients/search"; Map queryParams = new HashMap(); queryParams.put("{field_name}", "test_string"); request.queryParams = queryParams; @@ -495,7 +495,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}/"; + request.endpoint = "contactdb/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -516,7 +516,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/recipients/{recipient_id}/"; + request.endpoint = "contactdb/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -537,7 +537,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}/lists/"; + request.endpoint = "contactdb/recipients/{recipient_id}/lists"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -558,7 +558,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/reserved_fields/"; + request.endpoint = "contactdb/reserved_fields"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -579,7 +579,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/segments/"; + request.endpoint = "contactdb/segments"; request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -601,7 +601,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/segments/"; + request.endpoint = "contactdb/segments"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -622,7 +622,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "contactdb/segments/{segment_id}/"; + request.endpoint = "contactdb/segments/{segment_id}"; request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; Map queryParams = new HashMap(); queryParams.put("segment_id", "test_string"); @@ -647,7 +647,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}/"; + request.endpoint = "contactdb/segments/{segment_id}"; Map queryParams = new HashMap(); queryParams.put("segment_id", "0"); request.queryParams = queryParams; @@ -671,7 +671,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/segments/{segment_id}/"; + request.endpoint = "contactdb/segments/{segment_id}"; Map queryParams = new HashMap(); queryParams.put("delete_contacts", "true"); request.queryParams = queryParams; @@ -695,7 +695,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}/recipients/"; + request.endpoint = "contactdb/segments/{segment_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); diff --git a/examples/devices/devices.java b/examples/devices/devices.java index a5420add..18919803 100644 --- a/examples/devices/devices.java +++ b/examples/devices/devices.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "devices/stats/"; + request.endpoint = "devices/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("limit", "1"); diff --git a/examples/geo/geo.java b/examples/geo/geo.java index 762c5378..74839f7d 100644 --- a/examples/geo/geo.java +++ b/examples/geo/geo.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "geo/stats/"; + request.endpoint = "geo/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("country", "US"); diff --git a/examples/ips/ips.java b/examples/ips/ips.java index 96a9fba9..5e1b209c 100644 --- a/examples/ips/ips.java +++ b/examples/ips/ips.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/"; + request.endpoint = "ips"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); queryParams.put("ip", "test_string"); @@ -49,7 +49,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/assigned/"; + request.endpoint = "ips/assigned"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -70,7 +70,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "ips/pools/"; + request.endpoint = "ips/pools"; request.requestBody = "{\"name\":\"marketing\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -92,7 +92,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/pools/"; + request.endpoint = "ips/pools"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -113,7 +113,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "ips/pools/{pool_name}/"; + request.endpoint = "ips/pools/{pool_name}"; request.requestBody = "{\"name\":\"new_pool_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -135,7 +135,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/pools/{pool_name}/"; + request.endpoint = "ips/pools/{pool_name}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -156,7 +156,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}/"; + request.endpoint = "ips/pools/{pool_name}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -177,7 +177,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "ips/pools/{pool_name}/ips/"; + request.endpoint = "ips/pools/{pool_name}/ips"; request.requestBody = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -199,7 +199,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}/ips/{ip}/"; + request.endpoint = "ips/pools/{pool_name}/ips/{ip}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -220,7 +220,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "ips/warmup/"; + request.endpoint = "ips/warmup"; request.requestBody = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -242,7 +242,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/warmup/"; + request.endpoint = "ips/warmup"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -263,7 +263,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/warmup/{ip_address}/"; + request.endpoint = "ips/warmup/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -284,7 +284,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "ips/warmup/{ip_address}/"; + request.endpoint = "ips/warmup/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -305,7 +305,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/{ip_address}/"; + request.endpoint = "ips/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/examples/mail/mail.java b/examples/mail/mail.java index f78e3114..f79aede0 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "mail/batch/"; + request.endpoint = "mail/batch"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -42,7 +42,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail/batch/{batch_id}/"; + request.endpoint = "mail/batch/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -63,7 +63,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "mail/send/beta/"; + request.endpoint = "mail/send/beta"; request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/mailboxproviders/mailboxproviders.java b/examples/mailboxproviders/mailboxproviders.java index cd0ab136..491b691c 100644 --- a/examples/mailboxproviders/mailboxproviders.java +++ b/examples/mailboxproviders/mailboxproviders.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mailbox_providers/stats/"; + request.endpoint = "mailbox_providers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("mailbox_providers", "test_string"); diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java index a3434e26..f245c81d 100644 --- a/examples/mailsettings/mailsettings.java +++ b/examples/mailsettings/mailsettings.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/"; + request.endpoint = "mail_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); @@ -46,7 +46,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/address_whitelist/"; + request.endpoint = "mail_settings/address_whitelist"; request.requestBody = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -68,7 +68,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/address_whitelist/"; + request.endpoint = "mail_settings/address_whitelist"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -89,7 +89,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/bcc/"; + request.endpoint = "mail_settings/bcc"; request.requestBody = "{\"enabled\":false,\"email\":\"email@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -111,7 +111,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/bcc/"; + request.endpoint = "mail_settings/bcc"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -132,7 +132,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/bounce_purge/"; + request.endpoint = "mail_settings/bounce_purge"; request.requestBody = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -154,7 +154,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/bounce_purge/"; + request.endpoint = "mail_settings/bounce_purge"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -175,7 +175,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/footer/"; + request.endpoint = "mail_settings/footer"; request.requestBody = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -197,7 +197,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/footer/"; + request.endpoint = "mail_settings/footer"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -218,7 +218,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_bounce/"; + request.endpoint = "mail_settings/forward_bounce"; request.requestBody = "{\"enabled\":true,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -240,7 +240,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/forward_bounce/"; + request.endpoint = "mail_settings/forward_bounce"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -261,7 +261,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_spam/"; + request.endpoint = "mail_settings/forward_spam"; request.requestBody = "{\"enabled\":false,\"email\":\"\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -283,7 +283,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/forward_spam/"; + request.endpoint = "mail_settings/forward_spam"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -304,7 +304,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/plain_content/"; + request.endpoint = "mail_settings/plain_content"; request.requestBody = "{\"enabled\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -326,7 +326,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/plain_content/"; + request.endpoint = "mail_settings/plain_content"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -347,7 +347,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/spam_check/"; + request.endpoint = "mail_settings/spam_check"; request.requestBody = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -369,7 +369,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/spam_check/"; + request.endpoint = "mail_settings/spam_check"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -390,7 +390,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/template/"; + request.endpoint = "mail_settings/template"; request.requestBody = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -412,7 +412,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/template/"; + request.endpoint = "mail_settings/template"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/examples/partnersettings/partnersettings.java b/examples/partnersettings/partnersettings.java index 3984229b..bf07ea41 100644 --- a/examples/partnersettings/partnersettings.java +++ b/examples/partnersettings/partnersettings.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "partner_settings/"; + request.endpoint = "partner_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); @@ -46,7 +46,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "partner_settings/new_relic/"; + request.endpoint = "partner_settings/new_relic"; request.requestBody = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -68,7 +68,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "partner_settings/new_relic/"; + request.endpoint = "partner_settings/new_relic"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/examples/scopes/scopes.java b/examples/scopes/scopes.java index baa174ef..fd6ab975 100644 --- a/examples/scopes/scopes.java +++ b/examples/scopes/scopes.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "scopes/"; + request.endpoint = "scopes"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/examples/stats/stats.java b/examples/stats/stats.java index a1461bd9..95616541 100644 --- a/examples/stats/stats.java +++ b/examples/stats/stats.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "stats/"; + request.endpoint = "stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("limit", "1"); diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java index 8be34f1d..68b5f4bb 100644 --- a/examples/subusers/subusers.java +++ b/examples/subusers/subusers.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "subusers/"; + request.endpoint = "subusers"; request.requestBody = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -43,7 +43,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/"; + request.endpoint = "subusers"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); queryParams.put("limit", "0"); @@ -69,7 +69,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/reputations/"; + request.endpoint = "subusers/reputations"; Map queryParams = new HashMap(); queryParams.put("usernames", "test_string"); request.queryParams = queryParams; @@ -93,7 +93,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/stats/"; + request.endpoint = "subusers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -122,7 +122,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/stats/monthly/"; + request.endpoint = "subusers/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); queryParams.put("limit", "1"); @@ -151,7 +151,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/stats/sums/"; + request.endpoint = "subusers/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -181,7 +181,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "subusers/{subuser_name}/"; + request.endpoint = "subusers/{subuser_name}"; request.requestBody = "{\"disabled\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -203,7 +203,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}/"; + request.endpoint = "subusers/{subuser_name}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -224,7 +224,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/ips/"; + request.endpoint = "subusers/{subuser_name}/ips"; request.requestBody = "[\"127.0.0.1\"]"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -246,7 +246,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; request.requestBody = "{\"frequency\":500,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -268,7 +268,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; request.requestBody = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -290,7 +290,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -311,7 +311,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -332,7 +332,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/stats/monthly/"; + request.endpoint = "subusers/{subuser_name}/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("date", "test_string"); queryParams.put("sort_by_direction", "asc"); diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java index d834bd85..db3a2e8a 100644 --- a/examples/suppression/suppression.java +++ b/examples/suppression/suppression.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/blocks/"; + request.endpoint = "suppression/blocks"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -48,7 +48,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/blocks/"; + request.endpoint = "suppression/blocks"; request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -70,7 +70,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/blocks/{email}/"; + request.endpoint = "suppression/blocks/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -91,7 +91,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/blocks/{email}/"; + request.endpoint = "suppression/blocks/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -112,7 +112,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/bounces/"; + request.endpoint = "suppression/bounces"; Map queryParams = new HashMap(); queryParams.put("start_time", "0"); queryParams.put("end_time", "0"); @@ -137,7 +137,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/bounces/"; + request.endpoint = "suppression/bounces"; request.requestBody = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -159,7 +159,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/bounces/{email}/"; + request.endpoint = "suppression/bounces/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -180,7 +180,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/bounces/{email}/"; + request.endpoint = "suppression/bounces/{email}"; Map queryParams = new HashMap(); queryParams.put("email_address", "example@example.com"); request.queryParams = queryParams; @@ -204,7 +204,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/invalid_emails/"; + request.endpoint = "suppression/invalid_emails"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -231,7 +231,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails/"; + request.endpoint = "suppression/invalid_emails"; request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -253,7 +253,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/invalid_emails/{email}/"; + request.endpoint = "suppression/invalid_emails/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -274,7 +274,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails/{email}/"; + request.endpoint = "suppression/invalid_emails/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -295,7 +295,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/spam_report/{email}/"; + request.endpoint = "suppression/spam_report/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -316,7 +316,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/spam_report/{email}/"; + request.endpoint = "suppression/spam_report/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -337,7 +337,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/spam_reports/"; + request.endpoint = "suppression/spam_reports"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -364,7 +364,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/spam_reports/"; + request.endpoint = "suppression/spam_reports"; request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -386,7 +386,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/unsubscribes/"; + request.endpoint = "suppression/unsubscribes"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); diff --git a/examples/templates/templates.java b/examples/templates/templates.java index 8d9dbe75..81922faf 100644 --- a/examples/templates/templates.java +++ b/examples/templates/templates.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "templates/"; + request.endpoint = "templates"; request.requestBody = "{\"name\":\"example_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -43,7 +43,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "templates/"; + request.endpoint = "templates"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -64,7 +64,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "templates/{template_id}/"; + request.endpoint = "templates/{template_id}"; request.requestBody = "{\"name\":\"new_example_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -86,7 +86,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "templates/{template_id}/"; + request.endpoint = "templates/{template_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -107,7 +107,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "templates/{template_id}/"; + request.endpoint = "templates/{template_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -128,7 +128,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions/"; + request.endpoint = "templates/{template_id}/versions"; request.requestBody = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -150,7 +150,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.endpoint = "templates/{template_id}/versions/{version_id}"; request.requestBody = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -172,7 +172,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.endpoint = "templates/{template_id}/versions/{version_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -193,7 +193,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.endpoint = "templates/{template_id}/versions/{version_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -214,7 +214,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions/{version_id}/activate/"; + request.endpoint = "templates/{template_id}/versions/{version_id}/activate"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/examples/trackingsettings/trackingsettings.java b/examples/trackingsettings/trackingsettings.java index ecf00f6a..5e96e387 100644 --- a/examples/trackingsettings/trackingsettings.java +++ b/examples/trackingsettings/trackingsettings.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/"; + request.endpoint = "tracking_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); @@ -46,7 +46,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/click/"; + request.endpoint = "tracking_settings/click"; request.requestBody = "{\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -68,7 +68,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/click/"; + request.endpoint = "tracking_settings/click"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -89,7 +89,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/google_analytics/"; + request.endpoint = "tracking_settings/google_analytics"; request.requestBody = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -111,7 +111,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/google_analytics/"; + request.endpoint = "tracking_settings/google_analytics"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -132,7 +132,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/open/"; + request.endpoint = "tracking_settings/open"; request.requestBody = "{\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -154,7 +154,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/open/"; + request.endpoint = "tracking_settings/open"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -175,7 +175,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/subscription/"; + request.endpoint = "tracking_settings/subscription"; request.requestBody = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -197,7 +197,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/subscription/"; + request.endpoint = "tracking_settings/subscription"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); diff --git a/examples/user/user.java b/examples/user/user.java index 1b950c35..d4fed96b 100644 --- a/examples/user/user.java +++ b/examples/user/user.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/account/"; + request.endpoint = "user/account"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -42,7 +42,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/credits/"; + request.endpoint = "user/credits"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -63,7 +63,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "user/email/"; + request.endpoint = "user/email"; request.requestBody = "{\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -85,7 +85,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/email/"; + request.endpoint = "user/email"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -106,7 +106,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "user/password/"; + request.endpoint = "user/password"; request.requestBody = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -128,7 +128,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/profile/"; + request.endpoint = "user/profile"; request.requestBody = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -150,7 +150,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/profile/"; + request.endpoint = "user/profile"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -171,7 +171,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "user/scheduled_sends/"; + request.endpoint = "user/scheduled_sends"; request.requestBody = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -193,7 +193,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/scheduled_sends/"; + request.endpoint = "user/scheduled_sends"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -214,7 +214,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.endpoint = "user/scheduled_sends/{batch_id}"; request.requestBody = "{\"status\":\"pause\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -236,7 +236,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.endpoint = "user/scheduled_sends/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -257,7 +257,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.endpoint = "user/scheduled_sends/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -278,7 +278,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/settings/enforced_tls/"; + request.endpoint = "user/settings/enforced_tls"; request.requestBody = "{\"require_tls\":true,\"require_valid_cert\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -300,7 +300,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/settings/enforced_tls/"; + request.endpoint = "user/settings/enforced_tls"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -321,7 +321,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PUT; - request.endpoint = "user/username/"; + request.endpoint = "user/username"; request.requestBody = "{\"username\":\"test_username\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -343,7 +343,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/username/"; + request.endpoint = "user/username"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -364,7 +364,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/webhooks/event/settings/"; + request.endpoint = "user/webhooks/event/settings"; request.requestBody = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -386,7 +386,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/webhooks/event/settings/"; + request.endpoint = "user/webhooks/event/settings"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -407,7 +407,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "user/webhooks/event/test/"; + request.endpoint = "user/webhooks/event/test"; request.requestBody = "{\"url\":\"url\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -429,7 +429,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/webhooks/parse/settings/"; + request.endpoint = "user/webhooks/parse/settings"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -450,7 +450,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/webhooks/parse/stats/"; + request.endpoint = "user/webhooks/parse/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("limit", "test_string"); diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java index 2d67ee5e..4033972f 100644 --- a/examples/whitelabel/whitelabel.java +++ b/examples/whitelabel/whitelabel.java @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/"; + request.endpoint = "whitelabel/domains"; request.requestBody = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -43,7 +43,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/"; + request.endpoint = "whitelabel/domains"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); queryParams.put("domain", "test_string"); @@ -71,7 +71,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/default/"; + request.endpoint = "whitelabel/domains/default"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -92,7 +92,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/subuser/"; + request.endpoint = "whitelabel/domains/subuser"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -113,7 +113,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/subuser/"; + request.endpoint = "whitelabel/domains/subuser"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -134,7 +134,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "whitelabel/domains/{domain_id}/"; + request.endpoint = "whitelabel/domains/{domain_id}"; request.requestBody = "{\"default\":false,\"custom_spf\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -156,7 +156,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/{domain_id}/"; + request.endpoint = "whitelabel/domains/{domain_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -177,7 +177,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{domain_id}/"; + request.endpoint = "whitelabel/domains/{domain_id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -198,7 +198,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/{domain_id}/subuser/"; + request.endpoint = "whitelabel/domains/{domain_id}/subuser"; request.requestBody = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -220,7 +220,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/ips/"; + request.endpoint = "whitelabel/domains/{id}/ips"; request.requestBody = "{\"ip\":\"192.168.0.1\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -242,7 +242,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{id}/ips/{ip}/"; + request.endpoint = "whitelabel/domains/{id}/ips/{ip}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -263,7 +263,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/validate/"; + request.endpoint = "whitelabel/domains/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -284,7 +284,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/ips/"; + request.endpoint = "whitelabel/ips"; request.requestBody = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -306,7 +306,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/ips/"; + request.endpoint = "whitelabel/ips"; Map queryParams = new HashMap(); queryParams.put("ip", "test_string"); queryParams.put("limit", "1"); @@ -332,7 +332,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/ips/{id}/"; + request.endpoint = "whitelabel/ips/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -353,7 +353,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/ips/{id}/"; + request.endpoint = "whitelabel/ips/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -374,7 +374,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/ips/{id}/validate/"; + request.endpoint = "whitelabel/ips/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -395,7 +395,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/links/"; + request.endpoint = "whitelabel/links"; request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); @@ -421,7 +421,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/"; + request.endpoint = "whitelabel/links"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); request.queryParams = queryParams; @@ -445,7 +445,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/default/"; + request.endpoint = "whitelabel/links/default"; Map queryParams = new HashMap(); queryParams.put("domain", "test_string"); request.queryParams = queryParams; @@ -469,7 +469,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/subuser/"; + request.endpoint = "whitelabel/links/subuser"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); request.queryParams = queryParams; @@ -493,7 +493,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/links/subuser/"; + request.endpoint = "whitelabel/links/subuser"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); request.queryParams = queryParams; @@ -517,7 +517,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "whitelabel/links/{id}/"; + request.endpoint = "whitelabel/links/{id}"; request.requestBody = "{\"default\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); @@ -539,7 +539,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/{id}/"; + request.endpoint = "whitelabel/links/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -560,7 +560,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/links/{id}/"; + request.endpoint = "whitelabel/links/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -581,7 +581,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/links/{id}/validate/"; + request.endpoint = "whitelabel/links/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -602,7 +602,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/links/{link_id}/subuser/"; + request.endpoint = "whitelabel/links/{link_id}/subuser"; request.requestBody = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index aceac1fe..9e024be5 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -81,7 +81,7 @@ public void test_access_settings_activity_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "access_settings/activity/"; + request.endpoint = "access_settings/activity"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); request.queryParams = queryParams; @@ -101,7 +101,7 @@ public void test_access_settings_whitelist_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "access_settings/whitelist/"; + request.endpoint = "access_settings/whitelist"; request.requestBody = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -119,7 +119,7 @@ public void test_access_settings_whitelist_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "access_settings/whitelist/"; + request.endpoint = "access_settings/whitelist"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -136,7 +136,7 @@ public void test_access_settings_whitelist_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist/"; + request.endpoint = "access_settings/whitelist"; request.requestBody = "{\"ids\":[1,2,3]}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -154,7 +154,7 @@ public void test_access_settings_whitelist__rule_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "access_settings/whitelist/{rule_id}/"; + request.endpoint = "access_settings/whitelist/{rule_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -171,7 +171,7 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist/{rule_id}/"; + request.endpoint = "access_settings/whitelist/{rule_id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -188,7 +188,7 @@ public void test_api_keys_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "api_keys/"; + request.endpoint = "api_keys"; request.requestBody = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -206,7 +206,7 @@ public void test_api_keys_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "api_keys/"; + request.endpoint = "api_keys"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -223,7 +223,7 @@ public void test_api_keys__api_key_id__put() throws IOException { Request request = new Request(); request.method = Method.PUT; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; request.requestBody = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -241,7 +241,7 @@ public void test_api_keys__api_key_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; request.requestBody = "{\"name\":\"A New Hope\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -259,7 +259,7 @@ public void test_api_keys__api_key_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -276,7 +276,7 @@ public void test_api_keys__api_key_id__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "api_keys/{api_key_id}/"; + request.endpoint = "api_keys/{api_key_id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -293,7 +293,7 @@ public void test_asm_groups_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "asm/groups/"; + request.endpoint = "asm/groups"; request.requestBody = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -311,7 +311,7 @@ public void test_asm_groups_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/groups/"; + request.endpoint = "asm/groups"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -328,7 +328,7 @@ public void test_asm_groups__group_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "asm/groups/{group_id}/"; + request.endpoint = "asm/groups/{group_id}"; request.requestBody = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -346,7 +346,7 @@ public void test_asm_groups__group_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}/"; + request.endpoint = "asm/groups/{group_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -363,7 +363,7 @@ public void test_asm_groups__group_id__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}/"; + request.endpoint = "asm/groups/{group_id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -380,7 +380,7 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "asm/groups/{group_id}/suppressions/"; + request.endpoint = "asm/groups/{group_id}/suppressions"; request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -398,7 +398,7 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}/suppressions/"; + request.endpoint = "asm/groups/{group_id}/suppressions"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -415,7 +415,7 @@ public void test_asm_groups__group_id__suppressions__email__delete() throws IOEx Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}/suppressions/{email}/"; + request.endpoint = "asm/groups/{group_id}/suppressions/{email}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -432,7 +432,7 @@ public void test_asm_suppressions_global_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "asm/suppressions/global/"; + request.endpoint = "asm/suppressions/global"; request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -450,7 +450,7 @@ public void test_asm_suppressions_global__email__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "asm/suppressions/global/{email}/"; + request.endpoint = "asm/suppressions/global/{email}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -467,7 +467,7 @@ public void test_asm_suppressions_global__email__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "asm/suppressions/global/{email}/"; + request.endpoint = "asm/suppressions/global/{email}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -484,7 +484,7 @@ public void test_browsers_stats_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "browsers/stats/"; + request.endpoint = "browsers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -509,7 +509,7 @@ public void test_campaigns_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/"; + request.endpoint = "campaigns"; request.requestBody = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -527,7 +527,7 @@ public void test_campaigns_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "campaigns/"; + request.endpoint = "campaigns"; Map queryParams = new HashMap(); queryParams.put("limit", "0"); queryParams.put("offset", "0"); @@ -548,7 +548,7 @@ public void test_campaigns__campaign_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}/"; + request.endpoint = "campaigns/{campaign_id}"; request.requestBody = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -566,7 +566,7 @@ public void test_campaigns__campaign_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}/"; + request.endpoint = "campaigns/{campaign_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -583,7 +583,7 @@ public void test_campaigns__campaign_id__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}/"; + request.endpoint = "campaigns/{campaign_id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -600,7 +600,7 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; request.requestBody = "{\"send_at\":1489451436}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -618,7 +618,7 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; request.requestBody = "{\"send_at\":1489771528}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -636,7 +636,7 @@ public void test_campaigns__campaign_id__schedules_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -653,7 +653,7 @@ public void test_campaigns__campaign_id__schedules_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}/schedules/"; + request.endpoint = "campaigns/{campaign_id}/schedules"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -670,7 +670,7 @@ public void test_campaigns__campaign_id__schedules_now_post() throws IOException Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/now/"; + request.endpoint = "campaigns/{campaign_id}/schedules/now"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -687,7 +687,7 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio Request request = new Request(); request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/test/"; + request.endpoint = "campaigns/{campaign_id}/schedules/test"; request.requestBody = "{\"to\":\"your.email@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -705,7 +705,7 @@ public void test_categories_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "categories/"; + request.endpoint = "categories"; Map queryParams = new HashMap(); queryParams.put("category", "test_string"); queryParams.put("limit", "1"); @@ -727,7 +727,7 @@ public void test_categories_stats_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "categories/stats/"; + request.endpoint = "categories/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -752,7 +752,7 @@ public void test_categories_stats_sums_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "categories/stats/sums/"; + request.endpoint = "categories/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -778,7 +778,7 @@ public void test_clients_stats_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "clients/stats/"; + request.endpoint = "clients/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("start_date", "2016-01-01"); @@ -800,7 +800,7 @@ public void test_clients__client_type__stats_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "clients/{client_type}/stats/"; + request.endpoint = "clients/{client_type}/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("start_date", "2016-01-01"); @@ -822,7 +822,7 @@ public void test_contactdb_custom_fields_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/custom_fields/"; + request.endpoint = "contactdb/custom_fields"; request.requestBody = "{\"type\":\"text\",\"name\":\"pet\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -840,7 +840,7 @@ public void test_contactdb_custom_fields_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/custom_fields/"; + request.endpoint = "contactdb/custom_fields"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -857,7 +857,7 @@ public void test_contactdb_custom_fields__custom_field_id__get() throws IOExcept Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + request.endpoint = "contactdb/custom_fields/{custom_field_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -874,7 +874,7 @@ public void test_contactdb_custom_fields__custom_field_id__delete() throws IOExc Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/custom_fields/{custom_field_id}/"; + request.endpoint = "contactdb/custom_fields/{custom_field_id}"; Response response = sg.api(request); Assert.assertEquals(202, response.statusCode); } @@ -891,7 +891,7 @@ public void test_contactdb_lists_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/lists/"; + request.endpoint = "contactdb/lists"; request.requestBody = "{\"name\":\"your list name\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -909,7 +909,7 @@ public void test_contactdb_lists_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/lists/"; + request.endpoint = "contactdb/lists"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -926,7 +926,7 @@ public void test_contactdb_lists_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/lists/"; + request.endpoint = "contactdb/lists"; request.requestBody = "[1,2,3,4]"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -944,7 +944,7 @@ public void test_contactdb_lists__list_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "contactdb/lists/{list_id}/"; + request.endpoint = "contactdb/lists/{list_id}"; request.requestBody = "{\"name\":\"newlistname\"}"; Map queryParams = new HashMap(); queryParams.put("list_id", "0"); @@ -965,7 +965,7 @@ public void test_contactdb_lists__list_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}/"; + request.endpoint = "contactdb/lists/{list_id}"; Map queryParams = new HashMap(); queryParams.put("list_id", "0"); request.queryParams = queryParams; @@ -985,7 +985,7 @@ public void test_contactdb_lists__list_id__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}/"; + request.endpoint = "contactdb/lists/{list_id}"; Map queryParams = new HashMap(); queryParams.put("delete_contacts", "true"); request.queryParams = queryParams; @@ -1005,7 +1005,7 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients/"; + request.endpoint = "contactdb/lists/{list_id}/recipients"; request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -1023,7 +1023,7 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}/recipients/"; + request.endpoint = "contactdb/lists/{list_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); @@ -1045,7 +1045,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__post() thro Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -1062,7 +1062,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}/"; + request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Map queryParams = new HashMap(); queryParams.put("recipient_id", "0"); queryParams.put("list_id", "0"); @@ -1083,7 +1083,7 @@ public void test_contactdb_recipients_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; request.requestBody = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -1101,7 +1101,7 @@ public void test_contactdb_recipients_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; request.requestBody = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -1119,7 +1119,7 @@ public void test_contactdb_recipients_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); @@ -1140,7 +1140,7 @@ public void test_contactdb_recipients_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/recipients/"; + request.endpoint = "contactdb/recipients"; request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1158,7 +1158,7 @@ public void test_contactdb_recipients_billable_count_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/billable_count/"; + request.endpoint = "contactdb/recipients/billable_count"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1175,7 +1175,7 @@ public void test_contactdb_recipients_count_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/count/"; + request.endpoint = "contactdb/recipients/count"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1192,7 +1192,7 @@ public void test_contactdb_recipients_search_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/search/"; + request.endpoint = "contactdb/recipients/search"; Map queryParams = new HashMap(); queryParams.put("{field_name}", "test_string"); request.queryParams = queryParams; @@ -1212,7 +1212,7 @@ public void test_contactdb_recipients__recipient_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}/"; + request.endpoint = "contactdb/recipients/{recipient_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1229,7 +1229,7 @@ public void test_contactdb_recipients__recipient_id__delete() throws IOException Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/recipients/{recipient_id}/"; + request.endpoint = "contactdb/recipients/{recipient_id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -1246,7 +1246,7 @@ public void test_contactdb_recipients__recipient_id__lists_get() throws IOExcept Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}/lists/"; + request.endpoint = "contactdb/recipients/{recipient_id}/lists"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1263,7 +1263,7 @@ public void test_contactdb_reserved_fields_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/reserved_fields/"; + request.endpoint = "contactdb/reserved_fields"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1280,7 +1280,7 @@ public void test_contactdb_segments_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "contactdb/segments/"; + request.endpoint = "contactdb/segments"; request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1298,7 +1298,7 @@ public void test_contactdb_segments_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/segments/"; + request.endpoint = "contactdb/segments"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1315,7 +1315,7 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "contactdb/segments/{segment_id}/"; + request.endpoint = "contactdb/segments/{segment_id}"; request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; Map queryParams = new HashMap(); queryParams.put("segment_id", "test_string"); @@ -1336,7 +1336,7 @@ public void test_contactdb_segments__segment_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}/"; + request.endpoint = "contactdb/segments/{segment_id}"; Map queryParams = new HashMap(); queryParams.put("segment_id", "0"); request.queryParams = queryParams; @@ -1356,7 +1356,7 @@ public void test_contactdb_segments__segment_id__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "contactdb/segments/{segment_id}/"; + request.endpoint = "contactdb/segments/{segment_id}"; Map queryParams = new HashMap(); queryParams.put("delete_contacts", "true"); request.queryParams = queryParams; @@ -1376,7 +1376,7 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep Request request = new Request(); request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}/recipients/"; + request.endpoint = "contactdb/segments/{segment_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); @@ -1397,7 +1397,7 @@ public void test_devices_stats_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "devices/stats/"; + request.endpoint = "devices/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("limit", "1"); @@ -1421,7 +1421,7 @@ public void test_geo_stats_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "geo/stats/"; + request.endpoint = "geo/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("country", "US"); @@ -1446,7 +1446,7 @@ public void test_ips_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/"; + request.endpoint = "ips"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); queryParams.put("ip", "test_string"); @@ -1470,7 +1470,7 @@ public void test_ips_assigned_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/assigned/"; + request.endpoint = "ips/assigned"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1487,7 +1487,7 @@ public void test_ips_pools_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "ips/pools/"; + request.endpoint = "ips/pools"; request.requestBody = "{\"name\":\"marketing\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1505,7 +1505,7 @@ public void test_ips_pools_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/pools/"; + request.endpoint = "ips/pools"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1522,7 +1522,7 @@ public void test_ips_pools__pool_name__put() throws IOException { Request request = new Request(); request.method = Method.PUT; - request.endpoint = "ips/pools/{pool_name}/"; + request.endpoint = "ips/pools/{pool_name}"; request.requestBody = "{\"name\":\"new_pool_name\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1540,7 +1540,7 @@ public void test_ips_pools__pool_name__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/pools/{pool_name}/"; + request.endpoint = "ips/pools/{pool_name}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1557,7 +1557,7 @@ public void test_ips_pools__pool_name__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}/"; + request.endpoint = "ips/pools/{pool_name}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -1574,7 +1574,7 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "ips/pools/{pool_name}/ips/"; + request.endpoint = "ips/pools/{pool_name}/ips"; request.requestBody = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -1592,7 +1592,7 @@ public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}/ips/{ip}/"; + request.endpoint = "ips/pools/{pool_name}/ips/{ip}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -1609,7 +1609,7 @@ public void test_ips_warmup_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "ips/warmup/"; + request.endpoint = "ips/warmup"; request.requestBody = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1627,7 +1627,7 @@ public void test_ips_warmup_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/warmup/"; + request.endpoint = "ips/warmup"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1644,7 +1644,7 @@ public void test_ips_warmup__ip_address__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/warmup/{ip_address}/"; + request.endpoint = "ips/warmup/{ip_address}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1661,7 +1661,7 @@ public void test_ips_warmup__ip_address__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "ips/warmup/{ip_address}/"; + request.endpoint = "ips/warmup/{ip_address}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -1678,7 +1678,7 @@ public void test_ips__ip_address__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "ips/{ip_address}/"; + request.endpoint = "ips/{ip_address}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1695,7 +1695,7 @@ public void test_mail_batch_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "mail/batch/"; + request.endpoint = "mail/batch"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -1712,7 +1712,7 @@ public void test_mail_batch__batch_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail/batch/{batch_id}/"; + request.endpoint = "mail/batch/{batch_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1729,7 +1729,7 @@ public void test_mail_send_beta_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "mail/send/beta/"; + request.endpoint = "mail/send/beta"; request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); Assert.assertEquals(202, response.statusCode); @@ -1747,7 +1747,7 @@ public void test_mail_settings_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/"; + request.endpoint = "mail_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); @@ -1768,7 +1768,7 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/address_whitelist/"; + request.endpoint = "mail_settings/address_whitelist"; request.requestBody = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1786,7 +1786,7 @@ public void test_mail_settings_address_whitelist_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/address_whitelist/"; + request.endpoint = "mail_settings/address_whitelist"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1803,7 +1803,7 @@ public void test_mail_settings_bcc_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/bcc/"; + request.endpoint = "mail_settings/bcc"; request.requestBody = "{\"enabled\":false,\"email\":\"email@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1821,7 +1821,7 @@ public void test_mail_settings_bcc_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/bcc/"; + request.endpoint = "mail_settings/bcc"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1838,7 +1838,7 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/bounce_purge/"; + request.endpoint = "mail_settings/bounce_purge"; request.requestBody = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1856,7 +1856,7 @@ public void test_mail_settings_bounce_purge_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/bounce_purge/"; + request.endpoint = "mail_settings/bounce_purge"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1873,7 +1873,7 @@ public void test_mail_settings_footer_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/footer/"; + request.endpoint = "mail_settings/footer"; request.requestBody = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1891,7 +1891,7 @@ public void test_mail_settings_footer_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/footer/"; + request.endpoint = "mail_settings/footer"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1908,7 +1908,7 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_bounce/"; + request.endpoint = "mail_settings/forward_bounce"; request.requestBody = "{\"enabled\":true,\"email\":\"example@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1926,7 +1926,7 @@ public void test_mail_settings_forward_bounce_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/forward_bounce/"; + request.endpoint = "mail_settings/forward_bounce"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1943,7 +1943,7 @@ public void test_mail_settings_forward_spam_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_spam/"; + request.endpoint = "mail_settings/forward_spam"; request.requestBody = "{\"enabled\":false,\"email\":\"\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1961,7 +1961,7 @@ public void test_mail_settings_forward_spam_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/forward_spam/"; + request.endpoint = "mail_settings/forward_spam"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1978,7 +1978,7 @@ public void test_mail_settings_plain_content_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/plain_content/"; + request.endpoint = "mail_settings/plain_content"; request.requestBody = "{\"enabled\":false}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1996,7 +1996,7 @@ public void test_mail_settings_plain_content_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/plain_content/"; + request.endpoint = "mail_settings/plain_content"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2013,7 +2013,7 @@ public void test_mail_settings_spam_check_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/spam_check/"; + request.endpoint = "mail_settings/spam_check"; request.requestBody = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2031,7 +2031,7 @@ public void test_mail_settings_spam_check_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/spam_check/"; + request.endpoint = "mail_settings/spam_check"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2048,7 +2048,7 @@ public void test_mail_settings_template_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "mail_settings/template/"; + request.endpoint = "mail_settings/template"; request.requestBody = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2066,7 +2066,7 @@ public void test_mail_settings_template_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mail_settings/template/"; + request.endpoint = "mail_settings/template"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2083,7 +2083,7 @@ public void test_mailbox_providers_stats_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "mailbox_providers/stats/"; + request.endpoint = "mailbox_providers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("mailbox_providers", "test_string"); @@ -2108,7 +2108,7 @@ public void test_partner_settings_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "partner_settings/"; + request.endpoint = "partner_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); @@ -2129,7 +2129,7 @@ public void test_partner_settings_new_relic_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "partner_settings/new_relic/"; + request.endpoint = "partner_settings/new_relic"; request.requestBody = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2147,7 +2147,7 @@ public void test_partner_settings_new_relic_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "partner_settings/new_relic/"; + request.endpoint = "partner_settings/new_relic"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2164,7 +2164,7 @@ public void test_scopes_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "scopes/"; + request.endpoint = "scopes"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2181,7 +2181,7 @@ public void test_stats_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "stats/"; + request.endpoint = "stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("limit", "1"); @@ -2205,7 +2205,7 @@ public void test_subusers_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "subusers/"; + request.endpoint = "subusers"; request.requestBody = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2223,7 +2223,7 @@ public void test_subusers_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/"; + request.endpoint = "subusers"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); queryParams.put("limit", "0"); @@ -2245,7 +2245,7 @@ public void test_subusers_reputations_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/reputations/"; + request.endpoint = "subusers/reputations"; Map queryParams = new HashMap(); queryParams.put("usernames", "test_string"); request.queryParams = queryParams; @@ -2265,7 +2265,7 @@ public void test_subusers_stats_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/stats/"; + request.endpoint = "subusers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -2290,7 +2290,7 @@ public void test_subusers_stats_monthly_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/stats/monthly/"; + request.endpoint = "subusers/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); queryParams.put("limit", "1"); @@ -2315,7 +2315,7 @@ public void test_subusers_stats_sums_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/stats/sums/"; + request.endpoint = "subusers/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); queryParams.put("aggregated_by", "day"); @@ -2341,7 +2341,7 @@ public void test_subusers__subuser_name__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "subusers/{subuser_name}/"; + request.endpoint = "subusers/{subuser_name}"; request.requestBody = "{\"disabled\":false}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -2359,7 +2359,7 @@ public void test_subusers__subuser_name__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}/"; + request.endpoint = "subusers/{subuser_name}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2376,7 +2376,7 @@ public void test_subusers__subuser_name__ips_put() throws IOException { Request request = new Request(); request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/ips/"; + request.endpoint = "subusers/{subuser_name}/ips"; request.requestBody = "[\"127.0.0.1\"]"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2394,7 +2394,7 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { Request request = new Request(); request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; request.requestBody = "{\"frequency\":500,\"email\":\"example@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2412,7 +2412,7 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; request.requestBody = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2430,7 +2430,7 @@ public void test_subusers__subuser_name__monitor_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2447,7 +2447,7 @@ public void test_subusers__subuser_name__monitor_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}/monitor/"; + request.endpoint = "subusers/{subuser_name}/monitor"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2464,7 +2464,7 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException Request request = new Request(); request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/stats/monthly/"; + request.endpoint = "subusers/{subuser_name}/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("date", "test_string"); queryParams.put("sort_by_direction", "asc"); @@ -2488,7 +2488,7 @@ public void test_suppression_blocks_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/blocks/"; + request.endpoint = "suppression/blocks"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -2511,7 +2511,7 @@ public void test_suppression_blocks_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/blocks/"; + request.endpoint = "suppression/blocks"; request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -2529,7 +2529,7 @@ public void test_suppression_blocks__email__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/blocks/{email}/"; + request.endpoint = "suppression/blocks/{email}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2546,7 +2546,7 @@ public void test_suppression_blocks__email__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/blocks/{email}/"; + request.endpoint = "suppression/blocks/{email}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2563,7 +2563,7 @@ public void test_suppression_bounces_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/bounces/"; + request.endpoint = "suppression/bounces"; Map queryParams = new HashMap(); queryParams.put("start_time", "0"); queryParams.put("end_time", "0"); @@ -2584,7 +2584,7 @@ public void test_suppression_bounces_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/bounces/"; + request.endpoint = "suppression/bounces"; request.requestBody = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -2602,7 +2602,7 @@ public void test_suppression_bounces__email__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/bounces/{email}/"; + request.endpoint = "suppression/bounces/{email}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2619,7 +2619,7 @@ public void test_suppression_bounces__email__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/bounces/{email}/"; + request.endpoint = "suppression/bounces/{email}"; Map queryParams = new HashMap(); queryParams.put("email_address", "example@example.com"); request.queryParams = queryParams; @@ -2639,7 +2639,7 @@ public void test_suppression_invalid_emails_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/invalid_emails/"; + request.endpoint = "suppression/invalid_emails"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -2662,7 +2662,7 @@ public void test_suppression_invalid_emails_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails/"; + request.endpoint = "suppression/invalid_emails"; request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -2680,7 +2680,7 @@ public void test_suppression_invalid_emails__email__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/invalid_emails/{email}/"; + request.endpoint = "suppression/invalid_emails/{email}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2697,7 +2697,7 @@ public void test_suppression_invalid_emails__email__delete() throws IOException Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails/{email}/"; + request.endpoint = "suppression/invalid_emails/{email}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2714,7 +2714,7 @@ public void test_suppression_spam_report__email__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/spam_report/{email}/"; + request.endpoint = "suppression/spam_report/{email}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2731,7 +2731,7 @@ public void test_suppression_spam_report__email__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/spam_report/{email}/"; + request.endpoint = "suppression/spam_report/{email}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2748,7 +2748,7 @@ public void test_suppression_spam_reports_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/spam_reports/"; + request.endpoint = "suppression/spam_reports"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -2771,7 +2771,7 @@ public void test_suppression_spam_reports_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "suppression/spam_reports/"; + request.endpoint = "suppression/spam_reports"; request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -2789,7 +2789,7 @@ public void test_suppression_unsubscribes_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "suppression/unsubscribes/"; + request.endpoint = "suppression/unsubscribes"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); queryParams.put("limit", "1"); @@ -2812,7 +2812,7 @@ public void test_templates_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "templates/"; + request.endpoint = "templates"; request.requestBody = "{\"name\":\"example_name\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -2830,7 +2830,7 @@ public void test_templates_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "templates/"; + request.endpoint = "templates"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2847,7 +2847,7 @@ public void test_templates__template_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "templates/{template_id}/"; + request.endpoint = "templates/{template_id}"; request.requestBody = "{\"name\":\"new_example_name\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2865,7 +2865,7 @@ public void test_templates__template_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "templates/{template_id}/"; + request.endpoint = "templates/{template_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2882,7 +2882,7 @@ public void test_templates__template_id__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "templates/{template_id}/"; + request.endpoint = "templates/{template_id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2899,7 +2899,7 @@ public void test_templates__template_id__versions_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions/"; + request.endpoint = "templates/{template_id}/versions"; request.requestBody = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -2917,7 +2917,7 @@ public void test_templates__template_id__versions__version_id__patch() throws IO Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.endpoint = "templates/{template_id}/versions/{version_id}"; request.requestBody = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2935,7 +2935,7 @@ public void test_templates__template_id__versions__version_id__get() throws IOEx Request request = new Request(); request.method = Method.GET; - request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.endpoint = "templates/{template_id}/versions/{version_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2952,7 +2952,7 @@ public void test_templates__template_id__versions__version_id__delete() throws I Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "templates/{template_id}/versions/{version_id}/"; + request.endpoint = "templates/{template_id}/versions/{version_id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2969,7 +2969,7 @@ public void test_templates__template_id__versions__version_id__activate_post() t Request request = new Request(); request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions/{version_id}/activate/"; + request.endpoint = "templates/{template_id}/versions/{version_id}/activate"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2986,7 +2986,7 @@ public void test_tracking_settings_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/"; + request.endpoint = "tracking_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); @@ -3007,7 +3007,7 @@ public void test_tracking_settings_click_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/click/"; + request.endpoint = "tracking_settings/click"; request.requestBody = "{\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3025,7 +3025,7 @@ public void test_tracking_settings_click_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/click/"; + request.endpoint = "tracking_settings/click"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3042,7 +3042,7 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/google_analytics/"; + request.endpoint = "tracking_settings/google_analytics"; request.requestBody = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3060,7 +3060,7 @@ public void test_tracking_settings_google_analytics_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/google_analytics/"; + request.endpoint = "tracking_settings/google_analytics"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3077,7 +3077,7 @@ public void test_tracking_settings_open_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/open/"; + request.endpoint = "tracking_settings/open"; request.requestBody = "{\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3095,7 +3095,7 @@ public void test_tracking_settings_open_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/open/"; + request.endpoint = "tracking_settings/open"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3112,7 +3112,7 @@ public void test_tracking_settings_subscription_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "tracking_settings/subscription/"; + request.endpoint = "tracking_settings/subscription"; request.requestBody = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3130,7 +3130,7 @@ public void test_tracking_settings_subscription_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "tracking_settings/subscription/"; + request.endpoint = "tracking_settings/subscription"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3147,7 +3147,7 @@ public void test_user_account_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/account/"; + request.endpoint = "user/account"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3164,7 +3164,7 @@ public void test_user_credits_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/credits/"; + request.endpoint = "user/credits"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3181,7 +3181,7 @@ public void test_user_email_put() throws IOException { Request request = new Request(); request.method = Method.PUT; - request.endpoint = "user/email/"; + request.endpoint = "user/email"; request.requestBody = "{\"email\":\"example@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3199,7 +3199,7 @@ public void test_user_email_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/email/"; + request.endpoint = "user/email"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3216,7 +3216,7 @@ public void test_user_password_put() throws IOException { Request request = new Request(); request.method = Method.PUT; - request.endpoint = "user/password/"; + request.endpoint = "user/password"; request.requestBody = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3234,7 +3234,7 @@ public void test_user_profile_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/profile/"; + request.endpoint = "user/profile"; request.requestBody = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3252,7 +3252,7 @@ public void test_user_profile_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/profile/"; + request.endpoint = "user/profile"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3269,7 +3269,7 @@ public void test_user_scheduled_sends_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "user/scheduled_sends/"; + request.endpoint = "user/scheduled_sends"; request.requestBody = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -3287,7 +3287,7 @@ public void test_user_scheduled_sends_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/scheduled_sends/"; + request.endpoint = "user/scheduled_sends"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3304,7 +3304,7 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.endpoint = "user/scheduled_sends/{batch_id}"; request.requestBody = "{\"status\":\"pause\"}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -3322,7 +3322,7 @@ public void test_user_scheduled_sends__batch_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.endpoint = "user/scheduled_sends/{batch_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3339,7 +3339,7 @@ public void test_user_scheduled_sends__batch_id__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "user/scheduled_sends/{batch_id}/"; + request.endpoint = "user/scheduled_sends/{batch_id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -3356,7 +3356,7 @@ public void test_user_settings_enforced_tls_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/settings/enforced_tls/"; + request.endpoint = "user/settings/enforced_tls"; request.requestBody = "{\"require_tls\":true,\"require_valid_cert\":false}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3374,7 +3374,7 @@ public void test_user_settings_enforced_tls_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/settings/enforced_tls/"; + request.endpoint = "user/settings/enforced_tls"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3391,7 +3391,7 @@ public void test_user_username_put() throws IOException { Request request = new Request(); request.method = Method.PUT; - request.endpoint = "user/username/"; + request.endpoint = "user/username"; request.requestBody = "{\"username\":\"test_username\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3409,7 +3409,7 @@ public void test_user_username_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/username/"; + request.endpoint = "user/username"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3426,7 +3426,7 @@ public void test_user_webhooks_event_settings_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "user/webhooks/event/settings/"; + request.endpoint = "user/webhooks/event/settings"; request.requestBody = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3444,7 +3444,7 @@ public void test_user_webhooks_event_settings_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/webhooks/event/settings/"; + request.endpoint = "user/webhooks/event/settings"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3461,7 +3461,7 @@ public void test_user_webhooks_event_test_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "user/webhooks/event/test/"; + request.endpoint = "user/webhooks/event/test"; request.requestBody = "{\"url\":\"url\"}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -3479,7 +3479,7 @@ public void test_user_webhooks_parse_settings_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/webhooks/parse/settings/"; + request.endpoint = "user/webhooks/parse/settings"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3496,7 +3496,7 @@ public void test_user_webhooks_parse_stats_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "user/webhooks/parse/stats/"; + request.endpoint = "user/webhooks/parse/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); queryParams.put("limit", "test_string"); @@ -3520,7 +3520,7 @@ public void test_whitelabel_domains_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/"; + request.endpoint = "whitelabel/domains"; request.requestBody = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -3538,7 +3538,7 @@ public void test_whitelabel_domains_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/"; + request.endpoint = "whitelabel/domains"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); queryParams.put("domain", "test_string"); @@ -3562,7 +3562,7 @@ public void test_whitelabel_domains_default_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/default/"; + request.endpoint = "whitelabel/domains/default"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3579,7 +3579,7 @@ public void test_whitelabel_domains_subuser_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/subuser/"; + request.endpoint = "whitelabel/domains/subuser"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3596,7 +3596,7 @@ public void test_whitelabel_domains_subuser_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/subuser/"; + request.endpoint = "whitelabel/domains/subuser"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -3613,7 +3613,7 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "whitelabel/domains/{domain_id}/"; + request.endpoint = "whitelabel/domains/{domain_id}"; request.requestBody = "{\"default\":false,\"custom_spf\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3631,7 +3631,7 @@ public void test_whitelabel_domains__domain_id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/domains/{domain_id}/"; + request.endpoint = "whitelabel/domains/{domain_id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3648,7 +3648,7 @@ public void test_whitelabel_domains__domain_id__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{domain_id}/"; + request.endpoint = "whitelabel/domains/{domain_id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -3665,7 +3665,7 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/{domain_id}/subuser/"; + request.endpoint = "whitelabel/domains/{domain_id}/subuser"; request.requestBody = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -3683,7 +3683,7 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/ips/"; + request.endpoint = "whitelabel/domains/{id}/ips"; request.requestBody = "{\"ip\":\"192.168.0.1\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3701,7 +3701,7 @@ public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{id}/ips/{ip}/"; + request.endpoint = "whitelabel/domains/{id}/ips/{ip}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3718,7 +3718,7 @@ public void test_whitelabel_domains__id__validate_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/validate/"; + request.endpoint = "whitelabel/domains/{id}/validate"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3735,7 +3735,7 @@ public void test_whitelabel_ips_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/ips/"; + request.endpoint = "whitelabel/ips"; request.requestBody = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -3753,7 +3753,7 @@ public void test_whitelabel_ips_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/ips/"; + request.endpoint = "whitelabel/ips"; Map queryParams = new HashMap(); queryParams.put("ip", "test_string"); queryParams.put("limit", "1"); @@ -3775,7 +3775,7 @@ public void test_whitelabel_ips__id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/ips/{id}/"; + request.endpoint = "whitelabel/ips/{id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3792,7 +3792,7 @@ public void test_whitelabel_ips__id__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/ips/{id}/"; + request.endpoint = "whitelabel/ips/{id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -3809,7 +3809,7 @@ public void test_whitelabel_ips__id__validate_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/ips/{id}/validate/"; + request.endpoint = "whitelabel/ips/{id}/validate"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3826,7 +3826,7 @@ public void test_whitelabel_links_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/links/"; + request.endpoint = "whitelabel/links"; request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); @@ -3848,7 +3848,7 @@ public void test_whitelabel_links_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/"; + request.endpoint = "whitelabel/links"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); request.queryParams = queryParams; @@ -3868,7 +3868,7 @@ public void test_whitelabel_links_default_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/default/"; + request.endpoint = "whitelabel/links/default"; Map queryParams = new HashMap(); queryParams.put("domain", "test_string"); request.queryParams = queryParams; @@ -3888,7 +3888,7 @@ public void test_whitelabel_links_subuser_get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/subuser/"; + request.endpoint = "whitelabel/links/subuser"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); request.queryParams = queryParams; @@ -3908,7 +3908,7 @@ public void test_whitelabel_links_subuser_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/links/subuser/"; + request.endpoint = "whitelabel/links/subuser"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); request.queryParams = queryParams; @@ -3928,7 +3928,7 @@ public void test_whitelabel_links__id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; - request.endpoint = "whitelabel/links/{id}/"; + request.endpoint = "whitelabel/links/{id}"; request.requestBody = "{\"default\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3946,7 +3946,7 @@ public void test_whitelabel_links__id__get() throws IOException { Request request = new Request(); request.method = Method.GET; - request.endpoint = "whitelabel/links/{id}/"; + request.endpoint = "whitelabel/links/{id}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3963,7 +3963,7 @@ public void test_whitelabel_links__id__delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; - request.endpoint = "whitelabel/links/{id}/"; + request.endpoint = "whitelabel/links/{id}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -3980,7 +3980,7 @@ public void test_whitelabel_links__id__validate_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/links/{id}/validate/"; + request.endpoint = "whitelabel/links/{id}/validate"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3997,7 +3997,7 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "whitelabel/links/{link_id}/subuser/"; + request.endpoint = "whitelabel/links/{link_id}/subuser"; request.requestBody = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); From 1d010bb16d9bc3b7247a7689e1b815b748eabab0 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 28 May 2016 14:21:17 -0700 Subject: [PATCH 031/439] Delete Example.java --- examples/Example.java | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 examples/Example.java diff --git a/examples/Example.java b/examples/Example.java deleted file mode 100644 index 8acf8c72..00000000 --- a/examples/Example.java +++ /dev/null @@ -1,31 +0,0 @@ - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - sg.setHost("e9sk3d3bfaikbpdq7.stoplight-proxy.io"); - request.method = Method.GET; - request.endpoint = "api_keys/"; - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); - } catch (IOException ex) { - throw ex; - } - } -} \ No newline at end of file From 5a216fef77e2d7238ed32a2a1d264090a79c0144 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 28 May 2016 14:28:46 -0700 Subject: [PATCH 032/439] Fix heading for examples --- examples/browsers/browsers.java | 10 ++--- examples/campaigns/campaigns.java | 2 +- examples/categories/categories.java | 26 +++++------ examples/clients/clients.java | 8 ++-- examples/contactdb/contactdb.java | 10 ++--- examples/devices/devices.java | 8 ++-- examples/geo/geo.java | 10 ++--- examples/ips/ips.java | 8 ++-- .../mailboxproviders/mailboxproviders.java | 10 ++--- examples/mailsettings/mailsettings.java | 2 +- examples/partnersettings/partnersettings.java | 2 +- examples/stats/stats.java | 8 ++-- examples/subusers/subusers.java | 44 +++++++++---------- examples/suppression/suppression.java | 26 +++++------ .../trackingsettings/trackingsettings.java | 2 +- examples/user/user.java | 8 ++-- examples/whitelabel/whitelabel.java | 14 +++--- 17 files changed, 99 insertions(+), 99 deletions(-) diff --git a/examples/browsers/browsers.java b/examples/browsers/browsers.java index c65b0645..7595936f 100644 --- a/examples/browsers/browsers.java +++ b/examples/browsers/browsers.java @@ -24,11 +24,11 @@ public static void main(String[] args) throws IOException { request.endpoint = "browsers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("browsers", "test_string"); - queryParams.put("limit", "test_string"); - queryParams.put("offset", "test_string"); - queryParams.put("start_date", "2016-01-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("browsers", "test_string"); + queryParams.put("limit", "test_string"); + queryParams.put("offset", "test_string"); + queryParams.put("start_date", "2016-01-01"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/campaigns/campaigns.java b/examples/campaigns/campaigns.java index c037a477..d22f4fcf 100644 --- a/examples/campaigns/campaigns.java +++ b/examples/campaigns/campaigns.java @@ -46,7 +46,7 @@ public static void main(String[] args) throws IOException { request.endpoint = "campaigns"; Map queryParams = new HashMap(); queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("offset", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/categories/categories.java b/examples/categories/categories.java index dcfc660a..f037090b 100644 --- a/examples/categories/categories.java +++ b/examples/categories/categories.java @@ -24,8 +24,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "categories"; Map queryParams = new HashMap(); queryParams.put("category", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -50,11 +50,11 @@ public static void main(String[] args) throws IOException { request.endpoint = "categories/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("categories", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("categories", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -79,12 +79,12 @@ public static void main(String[] args) throws IOException { request.endpoint = "categories/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/clients/clients.java b/examples/clients/clients.java index 776e8a85..342f6343 100644 --- a/examples/clients/clients.java +++ b/examples/clients/clients.java @@ -24,8 +24,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "clients/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -50,8 +50,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "clients/{client_type}/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java index 47b443d0..4f975c35 100644 --- a/examples/contactdb/contactdb.java +++ b/examples/contactdb/contactdb.java @@ -269,8 +269,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/lists/{list_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - queryParams.put("list_id", "0"); + queryParams.put("page_size", "1"); + queryParams.put("list_id", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -316,7 +316,7 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Map queryParams = new HashMap(); queryParams.put("recipient_id", "0"); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -385,7 +385,7 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); - queryParams.put("page_size", "1"); + queryParams.put("page_size", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -698,7 +698,7 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/segments/{segment_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); - queryParams.put("page_size", "1"); + queryParams.put("page_size", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/devices/devices.java b/examples/devices/devices.java index 18919803..aff385ea 100644 --- a/examples/devices/devices.java +++ b/examples/devices/devices.java @@ -24,10 +24,10 @@ public static void main(String[] args) throws IOException { request.endpoint = "devices/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/geo/geo.java b/examples/geo/geo.java index 74839f7d..b0240d81 100644 --- a/examples/geo/geo.java +++ b/examples/geo/geo.java @@ -24,11 +24,11 @@ public static void main(String[] args) throws IOException { request.endpoint = "geo/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("country", "US"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); + queryParams.put("country", "US"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/ips/ips.java b/examples/ips/ips.java index 5e1b209c..8b6c5b9a 100644 --- a/examples/ips/ips.java +++ b/examples/ips/ips.java @@ -24,10 +24,10 @@ public static void main(String[] args) throws IOException { request.endpoint = "ips"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); - queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("exclude_whitelabels", "true"); - queryParams.put("offset", "1"); + queryParams.put("ip", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("exclude_whitelabels", "true"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/mailboxproviders/mailboxproviders.java b/examples/mailboxproviders/mailboxproviders.java index 491b691c..bb89cdba 100644 --- a/examples/mailboxproviders/mailboxproviders.java +++ b/examples/mailboxproviders/mailboxproviders.java @@ -24,11 +24,11 @@ public static void main(String[] args) throws IOException { request.endpoint = "mailbox_providers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("mailbox_providers", "test_string"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); + queryParams.put("mailbox_providers", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java index f245c81d..a2775bee 100644 --- a/examples/mailsettings/mailsettings.java +++ b/examples/mailsettings/mailsettings.java @@ -24,7 +24,7 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/partnersettings/partnersettings.java b/examples/partnersettings/partnersettings.java index bf07ea41..d64b74d9 100644 --- a/examples/partnersettings/partnersettings.java +++ b/examples/partnersettings/partnersettings.java @@ -24,7 +24,7 @@ public static void main(String[] args) throws IOException { request.endpoint = "partner_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/stats/stats.java b/examples/stats/stats.java index 95616541..9b82227d 100644 --- a/examples/stats/stats.java +++ b/examples/stats/stats.java @@ -24,10 +24,10 @@ public static void main(String[] args) throws IOException { request.endpoint = "stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java index 68b5f4bb..1669375a 100644 --- a/examples/subusers/subusers.java +++ b/examples/subusers/subusers.java @@ -46,8 +46,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "subusers"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); - queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("limit", "0"); + queryParams.put("offset", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -96,11 +96,11 @@ public static void main(String[] args) throws IOException { request.endpoint = "subusers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("subusers", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("subusers", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -125,11 +125,11 @@ public static void main(String[] args) throws IOException { request.endpoint = "subusers/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("date", "test_string"); + queryParams.put("sort_by_direction", "asc"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -154,12 +154,12 @@ public static void main(String[] args) throws IOException { request.endpoint = "subusers/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -335,10 +335,10 @@ public static void main(String[] args) throws IOException { request.endpoint = "subusers/{subuser_name}/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); - queryParams.put("limit", "0"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); + queryParams.put("sort_by_direction", "asc"); + queryParams.put("limit", "0"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java index db3a2e8a..c5a8e77a 100644 --- a/examples/suppression/suppression.java +++ b/examples/suppression/suppression.java @@ -24,9 +24,9 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/blocks"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -115,7 +115,7 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/bounces"; Map queryParams = new HashMap(); queryParams.put("start_time", "0"); - queryParams.put("end_time", "0"); + queryParams.put("end_time", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -207,9 +207,9 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/invalid_emails"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -340,9 +340,9 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/spam_reports"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -389,9 +389,9 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/unsubscribes"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/trackingsettings/trackingsettings.java b/examples/trackingsettings/trackingsettings.java index 5e96e387..2940bd91 100644 --- a/examples/trackingsettings/trackingsettings.java +++ b/examples/trackingsettings/trackingsettings.java @@ -24,7 +24,7 @@ public static void main(String[] args) throws IOException { request.endpoint = "tracking_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/user/user.java b/examples/user/user.java index d4fed96b..48cff1e5 100644 --- a/examples/user/user.java +++ b/examples/user/user.java @@ -453,10 +453,10 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/webhooks/parse/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "test_string"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "test_string"); + queryParams.put("limit", "test_string"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java index 4033972f..c68a5752 100644 --- a/examples/whitelabel/whitelabel.java +++ b/examples/whitelabel/whitelabel.java @@ -46,10 +46,10 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/domains"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); - queryParams.put("domain", "test_string"); - queryParams.put("exclude_subusers", "true"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("domain", "test_string"); + queryParams.put("exclude_subusers", "true"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -309,8 +309,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/ips"; Map queryParams = new HashMap(); queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -399,7 +399,7 @@ public static void main(String[] args) throws IOException { request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); From 2a64748c446bc0e9b3d03b18bfbd4cbfb1433331 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 28 May 2016 14:31:37 -0700 Subject: [PATCH 033/439] Fix USAGE.md header --- USAGE.md | 411 ++++++++++++++----------------------------------------- 1 file changed, 99 insertions(+), 312 deletions(-) diff --git a/USAGE.md b/USAGE.md index af091acd..1c235db0 100644 --- a/USAGE.md +++ b/USAGE.md @@ -66,7 +66,6 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### GET /access_settings/activity ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -96,7 +95,6 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### POST /access_settings/whitelist ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -122,7 +120,6 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### GET /access_settings/whitelist ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -149,7 +146,6 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### DELETE /access_settings/whitelist ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -177,7 +173,6 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### GET /access_settings/whitelist/{rule_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -204,7 +199,6 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### DELETE /access_settings/whitelist/{rule_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -236,7 +230,6 @@ See the [API Key Permissions List](https://sendgrid.com/docs/API_Reference/Web_A ### POST /api_keys ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -260,7 +253,6 @@ The API Keys feature allows customers to be able to generate an API Key credenti ### GET /api_keys ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -287,7 +279,6 @@ The API Keys feature allows customers to be able to generate an API Key credenti ### PUT /api_keys/{api_key_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -319,7 +310,6 @@ The API Keys feature allows customers to be able to generate an API Key credenti ### PATCH /api_keys/{api_key_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -343,7 +333,6 @@ If the API Key ID does not exist an HTTP 404 will be returned. ### GET /api_keys/{api_key_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -374,7 +363,6 @@ The API Keys feature allows customers to be able to generate an API Key credenti ### DELETE /api_keys/{api_key_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -404,7 +392,6 @@ Each user can create up to 25 different suppression groups. ### POST /asm/groups ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -432,7 +419,6 @@ Each user can create up to 25 different suppression groups. ### GET /asm/groups ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -459,7 +445,6 @@ Each user can create up to 25 different suppression groups. ### PATCH /asm/groups/{group_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -487,7 +472,6 @@ Each user can create up to 25 different suppression groups. ### GET /asm/groups/{group_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -516,7 +500,6 @@ Each user can create up to 25 different suppression groups. ### DELETE /asm/groups/{group_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -541,7 +524,6 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups ### POST /asm/groups/{group_id}/suppressions ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -565,7 +547,6 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups ### GET /asm/groups/{group_id}/suppressions ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -588,7 +569,6 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups ### DELETE /asm/groups/{group_id}/suppressions/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -611,7 +591,6 @@ A global suppression (or global unsubscribe) is an email address of a recipient ### POST /asm/suppressions/global ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -637,7 +616,6 @@ A global suppression (or global unsubscribe) is an email address of a recipient ### GET /asm/suppressions/global/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -660,7 +638,6 @@ A global suppression (or global unsubscribe) is an email address of a recipient ### DELETE /asm/suppressions/global/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -688,7 +665,6 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /browsers/stats ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -696,11 +672,11 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.endpoint = "browsers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("browsers", "test_string"); - queryParams.put("limit", "test_string"); - queryParams.put("offset", "test_string"); - queryParams.put("start_date", "2016-01-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("browsers", "test_string"); + queryParams.put("limit", "test_string"); + queryParams.put("offset", "test_string"); + queryParams.put("start_date", "2016-01-01"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -728,7 +704,6 @@ For more information: ### POST /campaigns ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -758,7 +733,6 @@ For more information: ### GET /campaigns ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -766,7 +740,7 @@ For more information: request.endpoint = "campaigns"; Map queryParams = new HashMap(); queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("offset", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -787,7 +761,6 @@ For more information: ### PATCH /campaigns/{campaign_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -815,7 +788,6 @@ For more information: ### GET /campaigns/{campaign_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -842,7 +814,6 @@ For more information: ### DELETE /campaigns/{campaign_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -867,7 +838,6 @@ For more information: ### PATCH /campaigns/{campaign_id}/schedules ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -893,7 +863,6 @@ For more information: ### POST /campaigns/{campaign_id}/schedules ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -919,7 +888,6 @@ For more information: ### GET /campaigns/{campaign_id}/schedules ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -947,7 +915,6 @@ For more information: ### DELETE /campaigns/{campaign_id}/schedules ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -974,7 +941,6 @@ For more information: ### POST /campaigns/{campaign_id}/schedules/now ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1001,7 +967,6 @@ For more information: ### POST /campaigns/{campaign_id}/schedules/test ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1028,7 +993,6 @@ Categories can help organize your email analytics by enabling you to tag emails ### GET /categories ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1036,8 +1000,8 @@ Categories can help organize your email analytics by enabling you to tag emails request.endpoint = "categories"; Map queryParams = new HashMap(); queryParams.put("category", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1058,7 +1022,6 @@ Categories allow you to group your emails together according to broad topics tha ### GET /categories/stats ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1066,11 +1029,11 @@ Categories allow you to group your emails together according to broad topics tha request.endpoint = "categories/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("categories", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("categories", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1091,7 +1054,6 @@ Categories allow you to group your emails together according to broad topics tha ### GET /categories/stats/sums ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1099,12 +1061,12 @@ Categories allow you to group your emails together according to broad topics tha request.endpoint = "categories/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1128,7 +1090,6 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /clients/stats ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1136,8 +1097,8 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.endpoint = "clients/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1164,7 +1125,6 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /clients/{client_type}/stats ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1172,8 +1132,8 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.endpoint = "clients/{client_type}/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1195,7 +1155,6 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### POST /contactdb/custom_fields ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1219,7 +1178,6 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### GET /contactdb/custom_fields ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1242,7 +1200,6 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### GET /contactdb/custom_fields/{custom_field_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1265,7 +1222,6 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### DELETE /contactdb/custom_fields/{custom_field_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1288,7 +1244,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### POST /contactdb/lists ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1312,7 +1267,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/lists ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1335,7 +1289,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### DELETE /contactdb/lists ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1360,7 +1313,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### PATCH /contactdb/lists/{list_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1387,7 +1339,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/lists/{list_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1413,7 +1364,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### DELETE /contactdb/lists/{list_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1441,7 +1391,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### POST /contactdb/lists/{list_id}/recipients ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1465,7 +1414,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/lists/{list_id}/recipients ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1473,8 +1421,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.endpoint = "contactdb/lists/{list_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - queryParams.put("list_id", "0"); + queryParams.put("page_size", "1"); + queryParams.put("list_id", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1493,7 +1441,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### POST /contactdb/lists/{list_id}/recipients/{recipient_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1516,7 +1463,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1524,7 +1470,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Map queryParams = new HashMap(); queryParams.put("recipient_id", "0"); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1547,7 +1493,6 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### PATCH /contactdb/recipients ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1573,7 +1518,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### POST /contactdb/recipients ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1600,7 +1544,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/recipients ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1608,7 +1551,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.endpoint = "contactdb/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); - queryParams.put("page_size", "1"); + queryParams.put("page_size", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1629,7 +1572,6 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### DELETE /contactdb/recipients ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1655,7 +1597,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/recipients/billable_count ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1678,7 +1619,6 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### GET /contactdb/recipients/count ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1710,7 +1650,6 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### GET /contactdb/recipients/search ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1736,7 +1675,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/recipients/{recipient_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1759,7 +1697,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### DELETE /contactdb/recipients/{recipient_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1784,7 +1721,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/recipients/{recipient_id}/lists ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1807,7 +1743,6 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### GET /contactdb/reserved_fields ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1850,7 +1785,6 @@ For more information about segments in Marketing Campaigns, please see our [User ### POST /contactdb/segments ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1876,7 +1810,6 @@ For more information about segments in Marketing Campaigns, please see our [User ### GET /contactdb/segments ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1901,7 +1834,6 @@ For more information about segments in Marketing Campaigns, please see our [User ### PATCH /contactdb/segments/{segment_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1930,7 +1862,6 @@ For more information about segments in Marketing Campaigns, please see our [User ### GET /contactdb/segments/{segment_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1960,7 +1891,6 @@ For more information about segments in Marketing Campaigns, please see our [User ### DELETE /contactdb/segments/{segment_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1988,7 +1918,6 @@ For more information about segments in Marketing Campaigns, please see our [User ### GET /contactdb/segments/{segment_id}/recipients ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -1996,7 +1925,7 @@ For more information about segments in Marketing Campaigns, please see our [User request.endpoint = "contactdb/segments/{segment_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); - queryParams.put("page_size", "1"); + queryParams.put("page_size", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2029,7 +1958,6 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /devices/stats ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2037,10 +1965,10 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.endpoint = "devices/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2064,7 +1992,6 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /geo/stats ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2072,11 +1999,11 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.endpoint = "geo/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("country", "US"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); + queryParams.put("country", "US"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2100,7 +2027,6 @@ A single IP address or a range of IP addresses may be dedicated to an account in ### GET /ips ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2108,10 +2034,10 @@ A single IP address or a range of IP addresses may be dedicated to an account in request.endpoint = "ips"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); - queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("exclude_whitelabels", "true"); - queryParams.put("offset", "1"); + queryParams.put("ip", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("exclude_whitelabels", "true"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2130,7 +2056,6 @@ A single IP address or a range of IP addresses may be dedicated to an account in ### GET /ips/assigned ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2159,7 +2084,6 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ### POST /ips/pools ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2187,7 +2111,6 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ### GET /ips/pools ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2214,7 +2137,6 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ### PUT /ips/pools/{pool_name} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2242,7 +2164,6 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ### GET /ips/pools/{pool_name} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2269,7 +2190,6 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ### DELETE /ips/pools/{pool_name} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2294,7 +2214,6 @@ A single IP address or a range of IP addresses may be dedicated to an account in ### POST /ips/pools/{pool_name}/ips ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2320,7 +2239,6 @@ A single IP address or a range of IP addresses may be dedicated to an account in ### DELETE /ips/pools/{pool_name}/ips/{ip} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2345,7 +2263,6 @@ For more general information about warming up IPs, please see our [Classroom](ht ### POST /ips/warmup ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2371,7 +2288,6 @@ For more general information about warming up IPs, please see our [Classroom](ht ### GET /ips/warmup ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2396,7 +2312,6 @@ For more general information about warming up IPs, please see our [Classroom](ht ### GET /ips/warmup/{ip_address} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2421,7 +2336,6 @@ For more general information about warming up IPs, please see our [Classroom](ht ### DELETE /ips/warmup/{ip_address} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2446,7 +2360,6 @@ A single IP address or a range of IP addresses may be dedicated to an account in ### GET /ips/{ip_address} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2476,7 +2389,6 @@ More Information: ### POST /mail/batch ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2503,7 +2415,6 @@ More Information: ### GET /mail/batch/{batch_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2531,7 +2442,6 @@ For more detailed information about how to use the v3 Mail Send endpoint, please ### POST /mail/send/beta ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2558,7 +2468,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2566,7 +2475,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.endpoint = "mail_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2587,7 +2496,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/address_whitelist ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2613,7 +2521,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/address_whitelist ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2638,7 +2545,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/bcc ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2664,7 +2570,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/bcc ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2689,7 +2594,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/bounce_purge ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2715,7 +2619,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/bounce_purge ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2740,7 +2643,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/footer ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2766,7 +2668,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/footer ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2791,7 +2692,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/forward_bounce ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2817,7 +2717,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/forward_bounce ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2842,7 +2741,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/forward_spam ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2868,7 +2766,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/forward_spam ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2893,7 +2790,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/plain_content ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2919,7 +2815,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/plain_content ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2944,7 +2839,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/spam_check ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2970,7 +2864,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/spam_check ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -2997,7 +2890,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/template ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3025,7 +2917,6 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/template ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3053,7 +2944,6 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /mailbox_providers/stats ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3061,11 +2951,11 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.endpoint = "mailbox_providers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("mailbox_providers", "test_string"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); + queryParams.put("mailbox_providers", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3087,7 +2977,6 @@ Our partner settings allow you to integrate your SendGrid account with our partn ### GET /partner_settings ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3095,7 +2984,7 @@ Our partner settings allow you to integrate your SendGrid account with our partn request.endpoint = "partner_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3116,7 +3005,6 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo ### PATCH /partner_settings/new_relic ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3142,7 +3030,6 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo ### GET /partner_settings/new_relic ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3168,7 +3055,6 @@ API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://s ### GET /scopes ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3194,7 +3080,6 @@ Parent accounts will see aggregated stats for their account and all subuser acco ### GET /stats ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3202,10 +3087,10 @@ Parent accounts will see aggregated stats for their account and all subuser acco request.endpoint = "stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3230,7 +3115,6 @@ For more information about Subusers: ### POST /subusers ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3257,7 +3141,6 @@ For more information about Subusers: ### GET /subusers ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3265,8 +3148,8 @@ For more information about Subusers: request.endpoint = "subusers"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); - queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("limit", "0"); + queryParams.put("offset", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3285,7 +3168,6 @@ This endpoint allows you to request the reputations for your subusers. ### GET /subusers/reputations ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3315,7 +3197,6 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ ### GET /subusers/stats ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3323,11 +3204,11 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ request.endpoint = "subusers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("subusers", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("subusers", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3351,7 +3232,6 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ ### GET /subusers/stats/monthly ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3359,11 +3239,11 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ request.endpoint = "subusers/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("date", "test_string"); + queryParams.put("sort_by_direction", "asc"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3385,7 +3265,6 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ ### GET /subusers/stats/sums ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3393,12 +3272,12 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ request.endpoint = "subusers/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3420,7 +3299,6 @@ For more information about Subusers: ### PATCH /subusers/{subuser_name} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3447,7 +3325,6 @@ For more information about Subusers: ### DELETE /subusers/{subuser_name} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3473,7 +3350,6 @@ More information: ### PUT /subusers/{subuser_name}/ips ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3495,7 +3371,6 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by ### PUT /subusers/{subuser_name}/monitor ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3517,7 +3392,6 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by ### POST /subusers/{subuser_name}/monitor ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3539,7 +3413,6 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by ### GET /subusers/{subuser_name}/monitor ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3560,7 +3433,6 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by ### DELETE /subusers/{subuser_name}/monitor ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3588,7 +3460,6 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ ### GET /subusers/{subuser_name}/stats/monthly ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3596,10 +3467,10 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ request.endpoint = "subusers/{subuser_name}/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); - queryParams.put("limit", "0"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); + queryParams.put("sort_by_direction", "asc"); + queryParams.put("limit", "0"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3623,7 +3494,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/blocks ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3631,9 +3501,9 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.endpoint = "suppression/blocks"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3659,7 +3529,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/blocks ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3685,7 +3554,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/blocks/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3710,7 +3578,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/blocks/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3738,7 +3605,6 @@ For more information see: ### GET /suppression/bounces ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3746,7 +3612,7 @@ For more information see: request.endpoint = "suppression/bounces"; Map queryParams = new HashMap(); queryParams.put("start_time", "0"); - queryParams.put("end_time", "0"); + queryParams.put("end_time", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3773,7 +3639,6 @@ Note: the `delete_all` and `emails` parameters should be used independently of e ### DELETE /suppression/bounces ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3803,7 +3668,6 @@ For more information see: ### GET /suppression/bounces/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3832,7 +3696,6 @@ For more information see: ### DELETE /suppression/bounces/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3862,7 +3725,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/invalid_emails ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3870,9 +3732,9 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.endpoint = "suppression/invalid_emails"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3900,7 +3762,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/invalid_emails ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3928,7 +3789,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/invalid_emails/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3955,7 +3815,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/invalid_emails/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -3980,7 +3839,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/spam_report/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4005,7 +3863,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/spam_report/{email} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4030,7 +3887,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/spam_reports ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4038,9 +3894,9 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.endpoint = "suppression/spam_reports"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4066,7 +3922,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/spam_reports ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4090,7 +3945,6 @@ A global suppression (or global unsubscribe) is an email address of a recipient ### GET /suppression/unsubscribes ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4098,9 +3952,9 @@ A global suppression (or global unsubscribe) is an email address of a recipient request.endpoint = "suppression/unsubscribes"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4124,7 +3978,6 @@ Transactional templates are templates created specifically for transactional ema ### POST /templates ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4150,7 +4003,6 @@ Transactional templates are templates created specifically for transactional ema ### GET /templates ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4176,7 +4028,6 @@ Transactional templates are templates created specifically for transactional ema ### PATCH /templates/{template_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4203,7 +4054,6 @@ Transactional templates are templates created specifically for transactional ema ### GET /templates/{template_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4229,7 +4079,6 @@ Transactional templates are templates created specifically for transactional ema ### DELETE /templates/{template_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4255,7 +4104,6 @@ For more information about transactional templates, please see our [User Guide]( ### POST /templates/{template_id}/versions ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4287,7 +4135,6 @@ For more information about transactional templates, please see our [User Guide]( ### PATCH /templates/{template_id}/versions/{version_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4319,7 +4166,6 @@ For more information about transactional templates, please see our [User Guide]( ### GET /templates/{template_id}/versions/{version_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4350,7 +4196,6 @@ For more information about transactional templates, please see our [User Guide]( ### DELETE /templates/{template_id}/versions/{version_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4382,7 +4227,6 @@ For more information about transactional templates, please see our [User Guide]( ### POST /templates/{template_id}/versions/{version_id}/activate ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4410,7 +4254,6 @@ For more information about tracking, please see our [User Guide](https://sendgri ### GET /tracking_settings ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4418,7 +4261,7 @@ For more information about tracking, please see our [User Guide](https://sendgri request.endpoint = "tracking_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -4439,7 +4282,6 @@ For more information about tracking, please see our [User Guide](https://sendgri ### PATCH /tracking_settings/click ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4465,7 +4307,6 @@ For more information about tracking, please see our [User Guide](https://sendgri ### GET /tracking_settings/click ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4494,7 +4335,6 @@ For more information about tracking, please see our [User Guide](https://sendgri ### PATCH /tracking_settings/google_analytics ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4524,7 +4364,6 @@ For more information about tracking, please see our [User Guide](https://sendgri ### GET /tracking_settings/google_analytics ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4551,7 +4390,6 @@ For more information about tracking, please see our [User Guide](https://sendgri ### PATCH /tracking_settings/open ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4579,7 +4417,6 @@ For more information about tracking, please see our [User Guide](https://sendgri ### GET /tracking_settings/open ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4606,7 +4443,6 @@ For more information about tracking, please see our [User Guide](https://sendgri ### PATCH /tracking_settings/subscription ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4634,7 +4470,6 @@ For more information about tracking, please see our [User Guide](https://sendgri ### GET /tracking_settings/subscription ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4666,7 +4501,6 @@ For more information about your user profile: ### GET /user/account ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4689,7 +4523,6 @@ Your monthly credit allotment limits the number of emails you may send before in ### GET /user/credits ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4716,7 +4549,6 @@ For more information about your user profile: ### PUT /user/email ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4744,7 +4576,6 @@ For more information about your user profile: ### GET /user/email ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4771,7 +4602,6 @@ For more information about your user profile: ### PUT /user/password ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4801,7 +4631,6 @@ It should be noted that any one or more of the parameters can be updated via the ### PATCH /user/profile ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4827,7 +4656,6 @@ For more information about your user profile: ### GET /user/profile ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4853,7 +4681,6 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen ### POST /user/scheduled_sends ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4877,7 +4704,6 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen ### GET /user/scheduled_sends ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4900,7 +4726,6 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen ### PATCH /user/scheduled_sends/{batch_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4924,7 +4749,6 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen ### GET /user/scheduled_sends/{batch_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4947,7 +4771,6 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen ### DELETE /user/scheduled_sends/{batch_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4972,7 +4795,6 @@ The Enforced TLS settings specify whether or not the recipient is required to su ### PATCH /user/settings/enforced_tls ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -4998,7 +4820,6 @@ The Enforced TLS settings specify whether or not the recipient is required to su ### GET /user/settings/enforced_tls ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5025,7 +4846,6 @@ For more information about your user profile: ### PUT /user/username ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5053,7 +4873,6 @@ For more information about your user profile: ### GET /user/username ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5080,7 +4899,6 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete ### PATCH /user/webhooks/event/settings ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5108,7 +4926,6 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete ### GET /user/webhooks/event/settings ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5133,7 +4950,6 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete ### POST /user/webhooks/event/test ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5157,7 +4973,6 @@ SendGrid can parse the attachments and contents of incoming emails. The Parse AP ### GET /user/webhooks/parse/settings ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5182,7 +4997,6 @@ There are a number of pre-made integrations for the SendGrid Parse Webhook which ### GET /user/webhooks/parse/stats ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5190,10 +5004,10 @@ There are a number of pre-made integrations for the SendGrid Parse Webhook which request.endpoint = "user/webhooks/parse/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "test_string"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "test_string"); + queryParams.put("limit", "test_string"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5221,7 +5035,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### POST /whitelabel/domains ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5248,7 +5061,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### GET /whitelabel/domains ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5256,10 +5068,10 @@ For more information on whitelabeling, please see our [User Guide](https://sendg request.endpoint = "whitelabel/domains"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); - queryParams.put("domain", "test_string"); - queryParams.put("exclude_subusers", "true"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("domain", "test_string"); + queryParams.put("exclude_subusers", "true"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5285,7 +5097,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### GET /whitelabel/domains/default ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5317,7 +5128,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### GET /whitelabel/domains/subuser ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5349,7 +5159,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### DELETE /whitelabel/domains/subuser ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5374,7 +5183,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### PATCH /whitelabel/domains/{domain_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5401,7 +5209,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### GET /whitelabel/domains/{domain_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5426,7 +5233,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### DELETE /whitelabel/domains/{domain_id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5458,7 +5264,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### POST /whitelabel/domains/{domain_id}/subuser ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5489,7 +5294,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### POST /whitelabel/domains/{id}/ips ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5521,7 +5325,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### DELETE /whitelabel/domains/{id}/ips/{ip} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5551,7 +5354,6 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### POST /whitelabel/domains/{id}/validate ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5578,7 +5380,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### POST /whitelabel/ips ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5606,7 +5407,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/ips ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5614,8 +5414,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.endpoint = "whitelabel/ips"; Map queryParams = new HashMap(); queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5636,7 +5436,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/ips/{id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5661,7 +5460,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### DELETE /whitelabel/ips/{id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5686,7 +5484,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### POST /whitelabel/ips/{id}/validate ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5711,7 +5508,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### POST /whitelabel/links ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5720,7 +5516,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5741,7 +5537,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/links ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5776,7 +5571,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/links/default ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5808,7 +5602,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/links/subuser ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5840,7 +5633,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### DELETE /whitelabel/links/subuser ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5868,7 +5660,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### PATCH /whitelabel/links/{id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5894,7 +5685,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/links/{id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5919,7 +5709,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### DELETE /whitelabel/links/{id} ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5944,7 +5733,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### POST /whitelabel/links/{id}/validate ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); @@ -5973,7 +5761,6 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### POST /whitelabel/links/{link_id}/subuser ```java - Request request = new Request(); try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); From 992d4ff9f66929a1204c2145a96b962d9a8b5c4c Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 28 May 2016 14:36:15 -0700 Subject: [PATCH 034/439] updated usage instructions --- CONTRIBUTING.md | 10 +++++++++- USAGE.md | 1 - 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7e26a0aa..41a5e908 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -91,9 +91,17 @@ source ./sendgrid.env See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/v3beta/examples) to get started quickly. +Check out the documentation for [Web API v3 endpoints](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html). + ```bash cd examples -javac -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example +touch Example.java +``` + +Add the example you want to test to Example.java, including the headers at the top of the file. + +``` bash +javac -classpath ./dependencies/jackson-annotations-2.7.0.jar:./dependencies/jackson-databind-2.7.3.jar:./dependencies/jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ./dependencies/jackson-annotations-2.7.0.jar:./dependencies/jackson-databind-2.7.3.jar:./dependencies/jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example ``` diff --git a/USAGE.md b/USAGE.md index 1c235db0..a30781d6 100644 --- a/USAGE.md +++ b/USAGE.md @@ -19,7 +19,6 @@ import java.util.Map; public class Example { public static void main(String[] args) throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); // Add the example code here } } From db6ff9679ff5663d2cdc93e71650d9d4ce1314f2 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 3 Jun 2016 09:26:14 -0700 Subject: [PATCH 035/439] Update Java-HTTP-Client dependency --- README.md | 10 +- USAGE.md | 998 +++++++++--------- build.gradle | 2 +- examples/accesssettings/accesssettings.java | 28 +- examples/apikeys/apikeys.java | 30 +- examples/asm/asm.java | 52 +- examples/browsers/browsers.java | 4 +- examples/campaigns/campaigns.java | 54 +- examples/categories/categories.java | 12 +- examples/clients/clients.java | 8 +- examples/contactdb/contactdb.java | 144 +-- examples/devices/devices.java | 4 +- examples/geo/geo.java | 4 +- examples/ips/ips.java | 64 +- examples/mail/mail.java | 14 +- .../mailboxproviders/mailboxproviders.java | 4 +- examples/mailsettings/mailsettings.java | 94 +- examples/partnersettings/partnersettings.java | 14 +- examples/scopes/scopes.java | 4 +- examples/stats/stats.java | 4 +- examples/subusers/subusers.java | 66 +- examples/suppression/suppression.java | 76 +- examples/templates/templates.java | 48 +- .../trackingsettings/trackingsettings.java | 44 +- examples/user/user.java | 102 +- examples/whitelabel/whitelabel.java | 124 +-- pom.xml | 2 +- src/main/java/com/sendgrid/SendGrid.java | 28 +- src/test/java/com/sendgrid/MockSendGrid.java | 12 +- src/test/java/com/sendgrid/SendGridTest.java | 344 +++--- 30 files changed, 1197 insertions(+), 1197 deletions(-) diff --git a/README.md b/README.md index 48a86698..eaa4d0d7 100644 --- a/README.md +++ b/README.md @@ -147,11 +147,11 @@ Request request = new Request(); try { request.method = Method.POST; request.endpoint = "mail/send/beta"; - request.requestBody = mail.build(); + request.body = mail.build(); Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -171,8 +171,8 @@ try { request.endpoint = "api_keys"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/USAGE.md b/USAGE.md index a30781d6..4ced041a 100644 --- a/USAGE.md +++ b/USAGE.md @@ -75,8 +75,8 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -99,11 +99,11 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ Request request = new Request(); request.method = Method.POST; request.endpoint = "access_settings/whitelist"; - request.requestBody = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + request.body = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -126,8 +126,8 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ request.endpoint = "access_settings/whitelist"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -150,11 +150,11 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ Request request = new Request(); request.method = Method.DELETE; request.endpoint = "access_settings/whitelist"; - request.requestBody = "{\"ids\":[1,2,3]}"; + request.body = "{\"ids\":[1,2,3]}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -179,8 +179,8 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ request.endpoint = "access_settings/whitelist/{rule_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -205,8 +205,8 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ request.endpoint = "access_settings/whitelist/{rule_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -234,11 +234,11 @@ See the [API Key Permissions List](https://sendgrid.com/docs/API_Reference/Web_A Request request = new Request(); request.method = Method.POST; request.endpoint = "api_keys"; - request.requestBody = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + request.body = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -259,8 +259,8 @@ The API Keys feature allows customers to be able to generate an API Key credenti request.endpoint = "api_keys"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -283,11 +283,11 @@ The API Keys feature allows customers to be able to generate an API Key credenti Request request = new Request(); request.method = Method.PUT; request.endpoint = "api_keys/{api_key_id}"; - request.requestBody = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; + request.body = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -314,11 +314,11 @@ The API Keys feature allows customers to be able to generate an API Key credenti Request request = new Request(); request.method = Method.PATCH; request.endpoint = "api_keys/{api_key_id}"; - request.requestBody = "{\"name\":\"A New Hope\"}"; + request.body = "{\"name\":\"A New Hope\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -339,8 +339,8 @@ If the API Key ID does not exist an HTTP 404 will be returned. request.endpoint = "api_keys/{api_key_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -369,8 +369,8 @@ The API Keys feature allows customers to be able to generate an API Key credenti request.endpoint = "api_keys/{api_key_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -396,11 +396,11 @@ Each user can create up to 25 different suppression groups. Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/groups"; - request.requestBody = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; + request.body = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -425,8 +425,8 @@ Each user can create up to 25 different suppression groups. request.endpoint = "asm/groups"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -449,11 +449,11 @@ Each user can create up to 25 different suppression groups. Request request = new Request(); request.method = Method.PATCH; request.endpoint = "asm/groups/{group_id}"; - request.requestBody = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; + request.body = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -478,8 +478,8 @@ Each user can create up to 25 different suppression groups. request.endpoint = "asm/groups/{group_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -506,8 +506,8 @@ Each user can create up to 25 different suppression groups. request.endpoint = "asm/groups/{group_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -528,11 +528,11 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/groups/{group_id}/suppressions"; - request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -553,8 +553,8 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups request.endpoint = "asm/groups/{group_id}/suppressions"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -575,8 +575,8 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups request.endpoint = "asm/groups/{group_id}/suppressions/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -595,11 +595,11 @@ A global suppression (or global unsubscribe) is an email address of a recipient Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/suppressions/global"; - request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -622,8 +622,8 @@ A global suppression (or global unsubscribe) is an email address of a recipient request.endpoint = "asm/suppressions/global/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -644,8 +644,8 @@ A global suppression (or global unsubscribe) is an email address of a recipient request.endpoint = "asm/suppressions/global/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -679,8 +679,8 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -708,11 +708,11 @@ For more information: Request request = new Request(); request.method = Method.POST; request.endpoint = "campaigns"; - request.requestBody = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + request.body = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -743,8 +743,8 @@ For more information: request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -765,11 +765,11 @@ For more information: Request request = new Request(); request.method = Method.PATCH; request.endpoint = "campaigns/{campaign_id}"; - request.requestBody = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + request.body = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -794,8 +794,8 @@ For more information: request.endpoint = "campaigns/{campaign_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -820,8 +820,8 @@ For more information: request.endpoint = "campaigns/{campaign_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -842,11 +842,11 @@ For more information: Request request = new Request(); request.method = Method.PATCH; request.endpoint = "campaigns/{campaign_id}/schedules"; - request.requestBody = "{\"send_at\":1489451436}"; + request.body = "{\"send_at\":1489451436}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -867,11 +867,11 @@ For more information: Request request = new Request(); request.method = Method.POST; request.endpoint = "campaigns/{campaign_id}/schedules"; - request.requestBody = "{\"send_at\":1489771528}"; + request.body = "{\"send_at\":1489771528}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -894,8 +894,8 @@ For more information: request.endpoint = "campaigns/{campaign_id}/schedules"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -921,8 +921,8 @@ For more information: request.endpoint = "campaigns/{campaign_id}/schedules"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -947,8 +947,8 @@ For more information: request.endpoint = "campaigns/{campaign_id}/schedules/now"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -971,11 +971,11 @@ For more information: Request request = new Request(); request.method = Method.POST; request.endpoint = "campaigns/{campaign_id}/schedules/test"; - request.requestBody = "{\"to\":\"your.email@example.com\"}"; + request.body = "{\"to\":\"your.email@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1004,8 +1004,8 @@ Categories can help organize your email analytics by enabling you to tag emails request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1036,8 +1036,8 @@ Categories allow you to group your emails together according to broad topics tha request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1069,8 +1069,8 @@ Categories allow you to group your emails together according to broad topics tha request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1101,8 +1101,8 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1136,8 +1136,8 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1159,11 +1159,11 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/custom_fields"; - request.requestBody = "{\"type\":\"text\",\"name\":\"pet\"}"; + request.body = "{\"type\":\"text\",\"name\":\"pet\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1184,8 +1184,8 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( request.endpoint = "contactdb/custom_fields"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1206,8 +1206,8 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( request.endpoint = "contactdb/custom_fields/{custom_field_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1228,8 +1228,8 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( request.endpoint = "contactdb/custom_fields/{custom_field_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1248,11 +1248,11 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/lists"; - request.requestBody = "{\"name\":\"your list name\"}"; + request.body = "{\"name\":\"your list name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1273,8 +1273,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.endpoint = "contactdb/lists"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1293,11 +1293,11 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co Request request = new Request(); request.method = Method.DELETE; request.endpoint = "contactdb/lists"; - request.requestBody = "[1,2,3,4]"; + request.body = "[1,2,3,4]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1317,14 +1317,14 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co Request request = new Request(); request.method = Method.PATCH; request.endpoint = "contactdb/lists/{list_id}"; - request.requestBody = "{\"name\":\"newlistname\"}"; + request.body = "{\"name\":\"newlistname\"}"; Map queryParams = new HashMap(); queryParams.put("list_id", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1348,8 +1348,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1373,8 +1373,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1395,11 +1395,11 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/lists/{list_id}/recipients"; - request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + request.body = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1425,8 +1425,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1447,8 +1447,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1473,8 +1473,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1497,11 +1497,11 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( Request request = new Request(); request.method = Method.PATCH; request.endpoint = "contactdb/recipients"; - request.requestBody = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; + request.body = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1522,11 +1522,11 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/recipients"; - request.requestBody = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + request.body = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1554,8 +1554,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1576,11 +1576,11 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( Request request = new Request(); request.method = Method.DELETE; request.endpoint = "contactdb/recipients"; - request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + request.body = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1603,8 +1603,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.endpoint = "contactdb/recipients/billable_count"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1625,8 +1625,8 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( request.endpoint = "contactdb/recipients/count"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1659,8 +1659,8 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1681,8 +1681,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.endpoint = "contactdb/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1703,8 +1703,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.endpoint = "contactdb/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1727,8 +1727,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.endpoint = "contactdb/recipients/{recipient_id}/lists"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1749,8 +1749,8 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( request.endpoint = "contactdb/reserved_fields"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1789,11 +1789,11 @@ For more information about segments in Marketing Campaigns, please see our [User Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/segments"; - request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1816,8 +1816,8 @@ For more information about segments in Marketing Campaigns, please see our [User request.endpoint = "contactdb/segments"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1838,14 +1838,14 @@ For more information about segments in Marketing Campaigns, please see our [User Request request = new Request(); request.method = Method.PATCH; request.endpoint = "contactdb/segments/{segment_id}"; - request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; + request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; Map queryParams = new HashMap(); queryParams.put("segment_id", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1871,8 +1871,8 @@ For more information about segments in Marketing Campaigns, please see our [User request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1900,8 +1900,8 @@ For more information about segments in Marketing Campaigns, please see our [User request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1928,8 +1928,8 @@ For more information about segments in Marketing Campaigns, please see our [User request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -1971,8 +1971,8 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2006,8 +2006,8 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2040,8 +2040,8 @@ A single IP address or a range of IP addresses may be dedicated to an account in request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2062,8 +2062,8 @@ A single IP address or a range of IP addresses may be dedicated to an account in request.endpoint = "ips/assigned"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2088,11 +2088,11 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu Request request = new Request(); request.method = Method.POST; request.endpoint = "ips/pools"; - request.requestBody = "{\"name\":\"marketing\"}"; + request.body = "{\"name\":\"marketing\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2117,8 +2117,8 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu request.endpoint = "ips/pools"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2141,11 +2141,11 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu Request request = new Request(); request.method = Method.PUT; request.endpoint = "ips/pools/{pool_name}"; - request.requestBody = "{\"name\":\"new_pool_name\"}"; + request.body = "{\"name\":\"new_pool_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2170,8 +2170,8 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu request.endpoint = "ips/pools/{pool_name}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2196,8 +2196,8 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu request.endpoint = "ips/pools/{pool_name}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2218,11 +2218,11 @@ A single IP address or a range of IP addresses may be dedicated to an account in Request request = new Request(); request.method = Method.POST; request.endpoint = "ips/pools/{pool_name}/ips"; - request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + request.body = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2245,8 +2245,8 @@ A single IP address or a range of IP addresses may be dedicated to an account in request.endpoint = "ips/pools/{pool_name}/ips/{ip}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2267,11 +2267,11 @@ For more general information about warming up IPs, please see our [Classroom](ht Request request = new Request(); request.method = Method.POST; request.endpoint = "ips/warmup"; - request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + request.body = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2294,8 +2294,8 @@ For more general information about warming up IPs, please see our [Classroom](ht request.endpoint = "ips/warmup"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2318,8 +2318,8 @@ For more general information about warming up IPs, please see our [Classroom](ht request.endpoint = "ips/warmup/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2342,8 +2342,8 @@ For more general information about warming up IPs, please see our [Classroom](ht request.endpoint = "ips/warmup/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2366,8 +2366,8 @@ A single IP address or a range of IP addresses may be dedicated to an account in request.endpoint = "ips/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2395,8 +2395,8 @@ More Information: request.endpoint = "mail/batch"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2421,8 +2421,8 @@ More Information: request.endpoint = "mail/batch/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2446,11 +2446,11 @@ For more detailed information about how to use the v3 Mail Send endpoint, please Request request = new Request(); request.method = Method.POST; request.endpoint = "mail/send/beta"; - request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2478,8 +2478,8 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2500,11 +2500,11 @@ Mail settings allow you to tell SendGrid specific things to do to every email th Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/address_whitelist"; - request.requestBody = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; + request.body = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2527,8 +2527,8 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.endpoint = "mail_settings/address_whitelist"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2549,11 +2549,11 @@ Mail settings allow you to tell SendGrid specific things to do to every email th Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/bcc"; - request.requestBody = "{\"enabled\":false,\"email\":\"email@example.com\"}"; + request.body = "{\"enabled\":false,\"email\":\"email@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2576,8 +2576,8 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.endpoint = "mail_settings/bcc"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2598,11 +2598,11 @@ Mail settings allow you to tell SendGrid specific things to do to every email th Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/bounce_purge"; - request.requestBody = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; + request.body = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2625,8 +2625,8 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.endpoint = "mail_settings/bounce_purge"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2647,11 +2647,11 @@ Mail settings allow you to tell SendGrid specific things to do to every email th Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/footer"; - request.requestBody = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; + request.body = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2674,8 +2674,8 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.endpoint = "mail_settings/footer"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2696,11 +2696,11 @@ Mail settings allow you to tell SendGrid specific things to do to every email th Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/forward_bounce"; - request.requestBody = "{\"enabled\":true,\"email\":\"example@example.com\"}"; + request.body = "{\"enabled\":true,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2723,8 +2723,8 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.endpoint = "mail_settings/forward_bounce"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2745,11 +2745,11 @@ Mail settings allow you to tell SendGrid specific things to do to every email th Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/forward_spam"; - request.requestBody = "{\"enabled\":false,\"email\":\"\"}"; + request.body = "{\"enabled\":false,\"email\":\"\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2772,8 +2772,8 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.endpoint = "mail_settings/forward_spam"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2794,11 +2794,11 @@ Mail settings allow you to tell SendGrid specific things to do to every email th Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/plain_content"; - request.requestBody = "{\"enabled\":false}"; + request.body = "{\"enabled\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2821,8 +2821,8 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.endpoint = "mail_settings/plain_content"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2843,11 +2843,11 @@ Mail settings allow you to tell SendGrid specific things to do to every email th Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/spam_check"; - request.requestBody = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; + request.body = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2870,8 +2870,8 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.endpoint = "mail_settings/spam_check"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2894,11 +2894,11 @@ Mail settings allow you to tell SendGrid specific things to do to every email th Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/template"; - request.requestBody = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; + request.body = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2923,8 +2923,8 @@ Mail settings allow you to tell SendGrid specific things to do to every email th request.endpoint = "mail_settings/template"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2958,8 +2958,8 @@ Advanced Stats provide a more in-depth view of your email statistics and the act request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -2987,8 +2987,8 @@ Our partner settings allow you to integrate your SendGrid account with our partn request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3009,11 +3009,11 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo Request request = new Request(); request.method = Method.PATCH; request.endpoint = "partner_settings/new_relic"; - request.requestBody = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; + request.body = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3036,8 +3036,8 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo request.endpoint = "partner_settings/new_relic"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3061,8 +3061,8 @@ API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://s request.endpoint = "scopes"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3093,8 +3093,8 @@ Parent accounts will see aggregated stats for their account and all subuser acco request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3119,11 +3119,11 @@ For more information about Subusers: Request request = new Request(); request.method = Method.POST; request.endpoint = "subusers"; - request.requestBody = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; + request.body = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3152,8 +3152,8 @@ For more information about Subusers: request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3177,8 +3177,8 @@ This endpoint allows you to request the reputations for your subusers. request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3211,8 +3211,8 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3246,8 +3246,8 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3280,8 +3280,8 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3303,11 +3303,11 @@ For more information about Subusers: Request request = new Request(); request.method = Method.PATCH; request.endpoint = "subusers/{subuser_name}"; - request.requestBody = "{\"disabled\":false}"; + request.body = "{\"disabled\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3331,8 +3331,8 @@ For more information about Subusers: request.endpoint = "subusers/{subuser_name}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3354,11 +3354,11 @@ More information: Request request = new Request(); request.method = Method.PUT; request.endpoint = "subusers/{subuser_name}/ips"; - request.requestBody = "[\"127.0.0.1\"]"; + request.body = "[\"127.0.0.1\"]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3375,11 +3375,11 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by Request request = new Request(); request.method = Method.PUT; request.endpoint = "subusers/{subuser_name}/monitor"; - request.requestBody = "{\"frequency\":500,\"email\":\"example@example.com\"}"; + request.body = "{\"frequency\":500,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3396,11 +3396,11 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by Request request = new Request(); request.method = Method.POST; request.endpoint = "subusers/{subuser_name}/monitor"; - request.requestBody = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; + request.body = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3419,8 +3419,8 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by request.endpoint = "subusers/{subuser_name}/monitor"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3439,8 +3439,8 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by request.endpoint = "subusers/{subuser_name}/monitor"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3473,8 +3473,8 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3506,8 +3506,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3533,11 +3533,11 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/blocks"; - request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3560,8 +3560,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.endpoint = "suppression/blocks/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3584,8 +3584,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.endpoint = "suppression/blocks/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3615,8 +3615,8 @@ For more information see: request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3643,11 +3643,11 @@ Note: the `delete_all` and `emails` parameters should be used independently of e Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/bounces"; - request.requestBody = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; + request.body = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3674,8 +3674,8 @@ For more information see: request.endpoint = "suppression/bounces/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3705,8 +3705,8 @@ For more information see: request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3737,8 +3737,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3766,11 +3766,11 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/invalid_emails"; - request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3795,8 +3795,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.endpoint = "suppression/invalid_emails/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3821,8 +3821,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.endpoint = "suppression/invalid_emails/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3845,8 +3845,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.endpoint = "suppression/spam_report/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3869,8 +3869,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.endpoint = "suppression/spam_report/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3899,8 +3899,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3926,11 +3926,11 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/spam_reports"; - request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3957,8 +3957,8 @@ A global suppression (or global unsubscribe) is an email address of a recipient request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -3982,11 +3982,11 @@ Transactional templates are templates created specifically for transactional ema Request request = new Request(); request.method = Method.POST; request.endpoint = "templates"; - request.requestBody = "{\"name\":\"example_name\"}"; + request.body = "{\"name\":\"example_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4009,8 +4009,8 @@ Transactional templates are templates created specifically for transactional ema request.endpoint = "templates"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4032,11 +4032,11 @@ Transactional templates are templates created specifically for transactional ema Request request = new Request(); request.method = Method.PATCH; request.endpoint = "templates/{template_id}"; - request.requestBody = "{\"name\":\"new_example_name\"}"; + request.body = "{\"name\":\"new_example_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4060,8 +4060,8 @@ Transactional templates are templates created specifically for transactional ema request.endpoint = "templates/{template_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4085,8 +4085,8 @@ Transactional templates are templates created specifically for transactional ema request.endpoint = "templates/{template_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4108,11 +4108,11 @@ For more information about transactional templates, please see our [User Guide]( Request request = new Request(); request.method = Method.POST; request.endpoint = "templates/{template_id}/versions"; - request.requestBody = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + request.body = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4139,11 +4139,11 @@ For more information about transactional templates, please see our [User Guide]( Request request = new Request(); request.method = Method.PATCH; request.endpoint = "templates/{template_id}/versions/{version_id}"; - request.requestBody = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; + request.body = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4172,8 +4172,8 @@ For more information about transactional templates, please see our [User Guide]( request.endpoint = "templates/{template_id}/versions/{version_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4202,8 +4202,8 @@ For more information about transactional templates, please see our [User Guide]( request.endpoint = "templates/{template_id}/versions/{version_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4233,8 +4233,8 @@ For more information about transactional templates, please see our [User Guide]( request.endpoint = "templates/{template_id}/versions/{version_id}/activate"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4264,8 +4264,8 @@ For more information about tracking, please see our [User Guide](https://sendgri request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4286,11 +4286,11 @@ For more information about tracking, please see our [User Guide](https://sendgri Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/click"; - request.requestBody = "{\"enabled\":true}"; + request.body = "{\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4313,8 +4313,8 @@ For more information about tracking, please see our [User Guide](https://sendgri request.endpoint = "tracking_settings/click"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4339,11 +4339,11 @@ For more information about tracking, please see our [User Guide](https://sendgri Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/google_analytics"; - request.requestBody = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + request.body = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4370,8 +4370,8 @@ For more information about tracking, please see our [User Guide](https://sendgri request.endpoint = "tracking_settings/google_analytics"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4394,11 +4394,11 @@ For more information about tracking, please see our [User Guide](https://sendgri Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/open"; - request.requestBody = "{\"enabled\":true}"; + request.body = "{\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4423,8 +4423,8 @@ For more information about tracking, please see our [User Guide](https://sendgri request.endpoint = "tracking_settings/open"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4447,11 +4447,11 @@ For more information about tracking, please see our [User Guide](https://sendgri Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/subscription"; - request.requestBody = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + request.body = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4476,8 +4476,8 @@ For more information about tracking, please see our [User Guide](https://sendgri request.endpoint = "tracking_settings/subscription"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4507,8 +4507,8 @@ For more information about your user profile: request.endpoint = "user/account"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4529,8 +4529,8 @@ Your monthly credit allotment limits the number of emails you may send before in request.endpoint = "user/credits"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4553,11 +4553,11 @@ For more information about your user profile: Request request = new Request(); request.method = Method.PUT; request.endpoint = "user/email"; - request.requestBody = "{\"email\":\"example@example.com\"}"; + request.body = "{\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4582,8 +4582,8 @@ For more information about your user profile: request.endpoint = "user/email"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4606,11 +4606,11 @@ For more information about your user profile: Request request = new Request(); request.method = Method.PUT; request.endpoint = "user/password"; - request.requestBody = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; + request.body = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4635,11 +4635,11 @@ It should be noted that any one or more of the parameters can be updated via the Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/profile"; - request.requestBody = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; + request.body = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4662,8 +4662,8 @@ For more information about your user profile: request.endpoint = "user/profile"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4685,11 +4685,11 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen Request request = new Request(); request.method = Method.POST; request.endpoint = "user/scheduled_sends"; - request.requestBody = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; + request.body = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4710,8 +4710,8 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen request.endpoint = "user/scheduled_sends"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4730,11 +4730,11 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/scheduled_sends/{batch_id}"; - request.requestBody = "{\"status\":\"pause\"}"; + request.body = "{\"status\":\"pause\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4755,8 +4755,8 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen request.endpoint = "user/scheduled_sends/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4777,8 +4777,8 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen request.endpoint = "user/scheduled_sends/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4799,11 +4799,11 @@ The Enforced TLS settings specify whether or not the recipient is required to su Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/settings/enforced_tls"; - request.requestBody = "{\"require_tls\":true,\"require_valid_cert\":false}"; + request.body = "{\"require_tls\":true,\"require_valid_cert\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4826,8 +4826,8 @@ The Enforced TLS settings specify whether or not the recipient is required to su request.endpoint = "user/settings/enforced_tls"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4850,11 +4850,11 @@ For more information about your user profile: Request request = new Request(); request.method = Method.PUT; request.endpoint = "user/username"; - request.requestBody = "{\"username\":\"test_username\"}"; + request.body = "{\"username\":\"test_username\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4879,8 +4879,8 @@ For more information about your user profile: request.endpoint = "user/username"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4903,11 +4903,11 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/webhooks/event/settings"; - request.requestBody = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + request.body = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4932,8 +4932,8 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete request.endpoint = "user/webhooks/event/settings"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4954,11 +4954,11 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete Request request = new Request(); request.method = Method.POST; request.endpoint = "user/webhooks/event/test"; - request.requestBody = "{\"url\":\"url\"}"; + request.body = "{\"url\":\"url\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -4979,8 +4979,8 @@ SendGrid can parse the attachments and contents of incoming emails. The Parse AP request.endpoint = "user/webhooks/parse/settings"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5010,8 +5010,8 @@ There are a number of pre-made integrations for the SendGrid Parse Webhook which request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5039,11 +5039,11 @@ For more information on whitelabeling, please see our [User Guide](https://sendg Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/domains"; - request.requestBody = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + request.body = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5074,8 +5074,8 @@ For more information on whitelabeling, please see our [User Guide](https://sendg request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5103,8 +5103,8 @@ For more information on whitelabeling, please see our [User Guide](https://sendg request.endpoint = "whitelabel/domains/default"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5134,8 +5134,8 @@ For more information on whitelabeling, please see our [User Guide](https://sendg request.endpoint = "whitelabel/domains/subuser"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5165,8 +5165,8 @@ For more information on whitelabeling, please see our [User Guide](https://sendg request.endpoint = "whitelabel/domains/subuser"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5187,11 +5187,11 @@ For more information on whitelabeling, please see our [User Guide](https://sendg Request request = new Request(); request.method = Method.PATCH; request.endpoint = "whitelabel/domains/{domain_id}"; - request.requestBody = "{\"default\":false,\"custom_spf\":true}"; + request.body = "{\"default\":false,\"custom_spf\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5215,8 +5215,8 @@ For more information on whitelabeling, please see our [User Guide](https://sendg request.endpoint = "whitelabel/domains/{domain_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5239,8 +5239,8 @@ For more information on whitelabeling, please see our [User Guide](https://sendg request.endpoint = "whitelabel/domains/{domain_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5268,11 +5268,11 @@ For more information on whitelabeling, please see our [User Guide](https://sendg Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/domains/{domain_id}/subuser"; - request.requestBody = "{\"username\":\"jane@example.com\"}"; + request.body = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5298,11 +5298,11 @@ For more information on whitelabeling, please see our [User Guide](https://sendg Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/domains/{id}/ips"; - request.requestBody = "{\"ip\":\"192.168.0.1\"}"; + request.body = "{\"ip\":\"192.168.0.1\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5331,8 +5331,8 @@ For more information on whitelabeling, please see our [User Guide](https://sendg request.endpoint = "whitelabel/domains/{id}/ips/{ip}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5360,8 +5360,8 @@ For more information on whitelabeling, please see our [User Guide](https://sendg request.endpoint = "whitelabel/domains/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5384,11 +5384,11 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/ips"; - request.requestBody = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; + request.body = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5418,8 +5418,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5442,8 +5442,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.endpoint = "whitelabel/ips/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5466,8 +5466,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.endpoint = "whitelabel/ips/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5490,8 +5490,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.endpoint = "whitelabel/ips/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5512,15 +5512,15 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/links"; - request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; + request.body = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5546,8 +5546,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5580,8 +5580,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5611,8 +5611,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5642,8 +5642,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5664,11 +5664,11 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ Request request = new Request(); request.method = Method.PATCH; request.endpoint = "whitelabel/links/{id}"; - request.requestBody = "{\"default\":true}"; + request.body = "{\"default\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5691,8 +5691,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.endpoint = "whitelabel/links/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5715,8 +5715,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.endpoint = "whitelabel/links/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5739,8 +5739,8 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ request.endpoint = "whitelabel/links/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -5765,11 +5765,11 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/links/{link_id}/subuser"; - request.requestBody = "{\"username\":\"jane@example.com\"}"; + request.body = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/build.gradle b/build.gradle index e64739f0..1dc66dbf 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ buildscript { } dependencies { - compile 'com.sendgrid:java-http-client:1.0.0' + compile 'com.sendgrid:java-http-client:2.0.0' compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' diff --git a/examples/accesssettings/accesssettings.java b/examples/accesssettings/accesssettings.java index 6e83fded..7409e4d2 100644 --- a/examples/accesssettings/accesssettings.java +++ b/examples/accesssettings/accesssettings.java @@ -27,8 +27,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -46,11 +46,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "access_settings/whitelist"; - request.requestBody = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + request.body = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -70,8 +70,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "access_settings/whitelist"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -89,11 +89,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "access_settings/whitelist"; - request.requestBody = "{\"ids\":[1,2,3]}"; + request.body = "{\"ids\":[1,2,3]}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -113,8 +113,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "access_settings/whitelist/{rule_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -134,8 +134,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "access_settings/whitelist/{rule_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/apikeys/apikeys.java b/examples/apikeys/apikeys.java index 1567449d..08f4ec84 100644 --- a/examples/apikeys/apikeys.java +++ b/examples/apikeys/apikeys.java @@ -22,11 +22,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "api_keys"; - request.requestBody = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + request.body = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -46,8 +46,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "api_keys"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -65,11 +65,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "api_keys/{api_key_id}"; - request.requestBody = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; + request.body = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -87,11 +87,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "api_keys/{api_key_id}"; - request.requestBody = "{\"name\":\"A New Hope\"}"; + request.body = "{\"name\":\"A New Hope\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -111,8 +111,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "api_keys/{api_key_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -132,8 +132,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "api_keys/{api_key_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/asm/asm.java b/examples/asm/asm.java index 8dfc4e78..b0ca24ef 100644 --- a/examples/asm/asm.java +++ b/examples/asm/asm.java @@ -22,11 +22,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/groups"; - request.requestBody = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; + request.body = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -46,8 +46,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "asm/groups"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -65,11 +65,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "asm/groups/{group_id}"; - request.requestBody = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; + request.body = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -89,8 +89,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "asm/groups/{group_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -110,8 +110,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "asm/groups/{group_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -129,11 +129,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/groups/{group_id}/suppressions"; - request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -153,8 +153,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "asm/groups/{group_id}/suppressions"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -174,8 +174,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "asm/groups/{group_id}/suppressions/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -193,11 +193,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/suppressions/global"; - request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -217,8 +217,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "asm/suppressions/global/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -238,8 +238,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "asm/suppressions/global/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/browsers/browsers.java b/examples/browsers/browsers.java index 7595936f..ceddb33a 100644 --- a/examples/browsers/browsers.java +++ b/examples/browsers/browsers.java @@ -32,8 +32,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/campaigns/campaigns.java b/examples/campaigns/campaigns.java index d22f4fcf..2517e45f 100644 --- a/examples/campaigns/campaigns.java +++ b/examples/campaigns/campaigns.java @@ -22,11 +22,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "campaigns"; - request.requestBody = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + request.body = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -50,8 +50,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -69,11 +69,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "campaigns/{campaign_id}"; - request.requestBody = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + request.body = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -93,8 +93,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "campaigns/{campaign_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -114,8 +114,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "campaigns/{campaign_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -133,11 +133,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "campaigns/{campaign_id}/schedules"; - request.requestBody = "{\"send_at\":1489451436}"; + request.body = "{\"send_at\":1489451436}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -155,11 +155,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "campaigns/{campaign_id}/schedules"; - request.requestBody = "{\"send_at\":1489771528}"; + request.body = "{\"send_at\":1489771528}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -179,8 +179,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "campaigns/{campaign_id}/schedules"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -200,8 +200,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "campaigns/{campaign_id}/schedules"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -221,8 +221,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "campaigns/{campaign_id}/schedules/now"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -240,11 +240,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "campaigns/{campaign_id}/schedules/test"; - request.requestBody = "{\"to\":\"your.email@example.com\"}"; + request.body = "{\"to\":\"your.email@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/categories/categories.java b/examples/categories/categories.java index f037090b..5bb6e491 100644 --- a/examples/categories/categories.java +++ b/examples/categories/categories.java @@ -29,8 +29,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -58,8 +58,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -88,8 +88,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/clients/clients.java b/examples/clients/clients.java index 342f6343..720e2fc4 100644 --- a/examples/clients/clients.java +++ b/examples/clients/clients.java @@ -29,8 +29,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -55,8 +55,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java index 4f975c35..2ec14522 100644 --- a/examples/contactdb/contactdb.java +++ b/examples/contactdb/contactdb.java @@ -22,11 +22,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/custom_fields"; - request.requestBody = "{\"type\":\"text\",\"name\":\"pet\"}"; + request.body = "{\"type\":\"text\",\"name\":\"pet\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -46,8 +46,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/custom_fields"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -67,8 +67,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/custom_fields/{custom_field_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -88,8 +88,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/custom_fields/{custom_field_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -107,11 +107,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/lists"; - request.requestBody = "{\"name\":\"your list name\"}"; + request.body = "{\"name\":\"your list name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -131,8 +131,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/lists"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -150,11 +150,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "contactdb/lists"; - request.requestBody = "[1,2,3,4]"; + request.body = "[1,2,3,4]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -172,14 +172,14 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "contactdb/lists/{list_id}"; - request.requestBody = "{\"name\":\"newlistname\"}"; + request.body = "{\"name\":\"newlistname\"}"; Map queryParams = new HashMap(); queryParams.put("list_id", "0"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -202,8 +202,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -226,8 +226,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -245,11 +245,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/lists/{list_id}/recipients"; - request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + request.body = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -274,8 +274,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -295,8 +295,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -320,8 +320,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -339,11 +339,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "contactdb/recipients"; - request.requestBody = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; + request.body = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -361,11 +361,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/recipients"; - request.requestBody = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + request.body = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -389,8 +389,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -408,11 +408,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "contactdb/recipients"; - request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + request.body = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -432,8 +432,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/recipients/billable_count"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -453,8 +453,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/recipients/count"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -477,8 +477,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -498,8 +498,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -519,8 +519,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/recipients/{recipient_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -540,8 +540,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/recipients/{recipient_id}/lists"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -561,8 +561,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/reserved_fields"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -580,11 +580,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/segments"; - request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -604,8 +604,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/segments"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -623,14 +623,14 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "contactdb/segments/{segment_id}"; - request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; + request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; Map queryParams = new HashMap(); queryParams.put("segment_id", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -653,8 +653,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -677,8 +677,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -702,8 +702,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/devices/devices.java b/examples/devices/devices.java index aff385ea..2fa90177 100644 --- a/examples/devices/devices.java +++ b/examples/devices/devices.java @@ -31,8 +31,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/geo/geo.java b/examples/geo/geo.java index b0240d81..abfec14e 100644 --- a/examples/geo/geo.java +++ b/examples/geo/geo.java @@ -32,8 +32,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/ips/ips.java b/examples/ips/ips.java index 8b6c5b9a..17465586 100644 --- a/examples/ips/ips.java +++ b/examples/ips/ips.java @@ -31,8 +31,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -52,8 +52,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "ips/assigned"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -71,11 +71,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "ips/pools"; - request.requestBody = "{\"name\":\"marketing\"}"; + request.body = "{\"name\":\"marketing\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -95,8 +95,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "ips/pools"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -114,11 +114,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "ips/pools/{pool_name}"; - request.requestBody = "{\"name\":\"new_pool_name\"}"; + request.body = "{\"name\":\"new_pool_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -138,8 +138,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "ips/pools/{pool_name}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -159,8 +159,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "ips/pools/{pool_name}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -178,11 +178,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "ips/pools/{pool_name}/ips"; - request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + request.body = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -202,8 +202,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "ips/pools/{pool_name}/ips/{ip}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -221,11 +221,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "ips/warmup"; - request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + request.body = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -245,8 +245,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "ips/warmup"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -266,8 +266,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "ips/warmup/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -287,8 +287,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "ips/warmup/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -308,8 +308,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "ips/{ip_address}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/mail/mail.java b/examples/mail/mail.java index f79aede0..2594f987 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -24,8 +24,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail/batch"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -45,8 +45,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail/batch/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -64,11 +64,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "mail/send/beta"; - request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/mailboxproviders/mailboxproviders.java b/examples/mailboxproviders/mailboxproviders.java index bb89cdba..cf0a5e49 100644 --- a/examples/mailboxproviders/mailboxproviders.java +++ b/examples/mailboxproviders/mailboxproviders.java @@ -32,8 +32,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java index a2775bee..9967124f 100644 --- a/examples/mailsettings/mailsettings.java +++ b/examples/mailsettings/mailsettings.java @@ -28,8 +28,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -47,11 +47,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/address_whitelist"; - request.requestBody = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; + request.body = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -71,8 +71,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail_settings/address_whitelist"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -90,11 +90,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/bcc"; - request.requestBody = "{\"enabled\":false,\"email\":\"email@example.com\"}"; + request.body = "{\"enabled\":false,\"email\":\"email@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -114,8 +114,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail_settings/bcc"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -133,11 +133,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/bounce_purge"; - request.requestBody = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; + request.body = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -157,8 +157,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail_settings/bounce_purge"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -176,11 +176,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/footer"; - request.requestBody = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; + request.body = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -200,8 +200,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail_settings/footer"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -219,11 +219,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/forward_bounce"; - request.requestBody = "{\"enabled\":true,\"email\":\"example@example.com\"}"; + request.body = "{\"enabled\":true,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -243,8 +243,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail_settings/forward_bounce"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -262,11 +262,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/forward_spam"; - request.requestBody = "{\"enabled\":false,\"email\":\"\"}"; + request.body = "{\"enabled\":false,\"email\":\"\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -286,8 +286,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail_settings/forward_spam"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -305,11 +305,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/plain_content"; - request.requestBody = "{\"enabled\":false}"; + request.body = "{\"enabled\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -329,8 +329,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail_settings/plain_content"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -348,11 +348,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/spam_check"; - request.requestBody = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; + request.body = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -372,8 +372,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail_settings/spam_check"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -391,11 +391,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/template"; - request.requestBody = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; + request.body = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -415,8 +415,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "mail_settings/template"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/partnersettings/partnersettings.java b/examples/partnersettings/partnersettings.java index d64b74d9..35b01eb0 100644 --- a/examples/partnersettings/partnersettings.java +++ b/examples/partnersettings/partnersettings.java @@ -28,8 +28,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -47,11 +47,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "partner_settings/new_relic"; - request.requestBody = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; + request.body = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -71,8 +71,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "partner_settings/new_relic"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/scopes/scopes.java b/examples/scopes/scopes.java index fd6ab975..7b5bd4f3 100644 --- a/examples/scopes/scopes.java +++ b/examples/scopes/scopes.java @@ -24,8 +24,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "scopes"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/stats/stats.java b/examples/stats/stats.java index 9b82227d..e8a85224 100644 --- a/examples/stats/stats.java +++ b/examples/stats/stats.java @@ -31,8 +31,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java index 1669375a..5ec49c01 100644 --- a/examples/subusers/subusers.java +++ b/examples/subusers/subusers.java @@ -22,11 +22,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "subusers"; - request.requestBody = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; + request.body = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -51,8 +51,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -75,8 +75,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -104,8 +104,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -133,8 +133,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -163,8 +163,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -182,11 +182,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "subusers/{subuser_name}"; - request.requestBody = "{\"disabled\":false}"; + request.body = "{\"disabled\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -206,8 +206,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "subusers/{subuser_name}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -225,11 +225,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "subusers/{subuser_name}/ips"; - request.requestBody = "[\"127.0.0.1\"]"; + request.body = "[\"127.0.0.1\"]"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -247,11 +247,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "subusers/{subuser_name}/monitor"; - request.requestBody = "{\"frequency\":500,\"email\":\"example@example.com\"}"; + request.body = "{\"frequency\":500,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -269,11 +269,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "subusers/{subuser_name}/monitor"; - request.requestBody = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; + request.body = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -293,8 +293,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "subusers/{subuser_name}/monitor"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -314,8 +314,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "subusers/{subuser_name}/monitor"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -342,8 +342,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java index c5a8e77a..e143d471 100644 --- a/examples/suppression/suppression.java +++ b/examples/suppression/suppression.java @@ -30,8 +30,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -49,11 +49,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/blocks"; - request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -73,8 +73,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/blocks/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -94,8 +94,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/blocks/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -119,8 +119,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -138,11 +138,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/bounces"; - request.requestBody = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; + request.body = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -162,8 +162,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/bounces/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -186,8 +186,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -213,8 +213,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -232,11 +232,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/invalid_emails"; - request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -256,8 +256,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/invalid_emails/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -277,8 +277,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/invalid_emails/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -298,8 +298,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/spam_report/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -319,8 +319,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "suppression/spam_report/{email}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -346,8 +346,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -365,11 +365,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/spam_reports"; - request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -395,8 +395,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/templates/templates.java b/examples/templates/templates.java index 81922faf..e073a8b2 100644 --- a/examples/templates/templates.java +++ b/examples/templates/templates.java @@ -22,11 +22,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "templates"; - request.requestBody = "{\"name\":\"example_name\"}"; + request.body = "{\"name\":\"example_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -46,8 +46,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "templates"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -65,11 +65,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "templates/{template_id}"; - request.requestBody = "{\"name\":\"new_example_name\"}"; + request.body = "{\"name\":\"new_example_name\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -89,8 +89,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "templates/{template_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -110,8 +110,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "templates/{template_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -129,11 +129,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "templates/{template_id}/versions"; - request.requestBody = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + request.body = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -151,11 +151,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "templates/{template_id}/versions/{version_id}"; - request.requestBody = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; + request.body = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -175,8 +175,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "templates/{template_id}/versions/{version_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -196,8 +196,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "templates/{template_id}/versions/{version_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -217,8 +217,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "templates/{template_id}/versions/{version_id}/activate"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/trackingsettings/trackingsettings.java b/examples/trackingsettings/trackingsettings.java index 2940bd91..8764b380 100644 --- a/examples/trackingsettings/trackingsettings.java +++ b/examples/trackingsettings/trackingsettings.java @@ -28,8 +28,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -47,11 +47,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/click"; - request.requestBody = "{\"enabled\":true}"; + request.body = "{\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -71,8 +71,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "tracking_settings/click"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -90,11 +90,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/google_analytics"; - request.requestBody = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + request.body = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -114,8 +114,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "tracking_settings/google_analytics"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -133,11 +133,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/open"; - request.requestBody = "{\"enabled\":true}"; + request.body = "{\"enabled\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -157,8 +157,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "tracking_settings/open"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -176,11 +176,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/subscription"; - request.requestBody = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + request.body = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -200,8 +200,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "tracking_settings/subscription"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/user/user.java b/examples/user/user.java index 48cff1e5..bc3c2796 100644 --- a/examples/user/user.java +++ b/examples/user/user.java @@ -24,8 +24,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/account"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -45,8 +45,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/credits"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -64,11 +64,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "user/email"; - request.requestBody = "{\"email\":\"example@example.com\"}"; + request.body = "{\"email\":\"example@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -88,8 +88,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/email"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -107,11 +107,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "user/password"; - request.requestBody = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; + request.body = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -129,11 +129,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/profile"; - request.requestBody = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; + request.body = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -153,8 +153,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/profile"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -172,11 +172,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "user/scheduled_sends"; - request.requestBody = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; + request.body = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -196,8 +196,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/scheduled_sends"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -215,11 +215,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/scheduled_sends/{batch_id}"; - request.requestBody = "{\"status\":\"pause\"}"; + request.body = "{\"status\":\"pause\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -239,8 +239,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/scheduled_sends/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -260,8 +260,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/scheduled_sends/{batch_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -279,11 +279,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/settings/enforced_tls"; - request.requestBody = "{\"require_tls\":true,\"require_valid_cert\":false}"; + request.body = "{\"require_tls\":true,\"require_valid_cert\":false}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -303,8 +303,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/settings/enforced_tls"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -322,11 +322,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "user/username"; - request.requestBody = "{\"username\":\"test_username\"}"; + request.body = "{\"username\":\"test_username\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -346,8 +346,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/username"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -365,11 +365,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/webhooks/event/settings"; - request.requestBody = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + request.body = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -389,8 +389,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/webhooks/event/settings"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -408,11 +408,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "user/webhooks/event/test"; - request.requestBody = "{\"url\":\"url\"}"; + request.body = "{\"url\":\"url\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -432,8 +432,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "user/webhooks/parse/settings"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -460,8 +460,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java index c68a5752..965190db 100644 --- a/examples/whitelabel/whitelabel.java +++ b/examples/whitelabel/whitelabel.java @@ -22,11 +22,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/domains"; - request.requestBody = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + request.body = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -53,8 +53,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -74,8 +74,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/domains/default"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -95,8 +95,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/domains/subuser"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -116,8 +116,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/domains/subuser"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -135,11 +135,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "whitelabel/domains/{domain_id}"; - request.requestBody = "{\"default\":false,\"custom_spf\":true}"; + request.body = "{\"default\":false,\"custom_spf\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -159,8 +159,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/domains/{domain_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -180,8 +180,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/domains/{domain_id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -199,11 +199,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/domains/{domain_id}/subuser"; - request.requestBody = "{\"username\":\"jane@example.com\"}"; + request.body = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -221,11 +221,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/domains/{id}/ips"; - request.requestBody = "{\"ip\":\"192.168.0.1\"}"; + request.body = "{\"ip\":\"192.168.0.1\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -245,8 +245,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/domains/{id}/ips/{ip}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -266,8 +266,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/domains/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -285,11 +285,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/ips"; - request.requestBody = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; + request.body = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -314,8 +314,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -335,8 +335,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/ips/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -356,8 +356,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/ips/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -377,8 +377,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/ips/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -396,15 +396,15 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/links"; - request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; + request.body = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -427,8 +427,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -451,8 +451,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -475,8 +475,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -499,8 +499,8 @@ public static void main(String[] args) throws IOException { request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -518,11 +518,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "whitelabel/links/{id}"; - request.requestBody = "{\"default\":true}"; + request.body = "{\"default\":true}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -542,8 +542,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/links/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -563,8 +563,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/links/{id}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -584,8 +584,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "whitelabel/links/{id}/validate"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -603,11 +603,11 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/links/{link_id}/subuser"; - request.requestBody = "{\"username\":\"jane@example.com\"}"; + request.body = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } diff --git a/pom.xml b/pom.xml index 7fad17ab..02acf4f1 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ com.sendgrid java-http-client - 1.0.0 + 2.0.0 com.fasterxml.jackson.core diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 8ca199bc..80335f4e 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -15,7 +15,7 @@ public class SendGrid { private static final String VERSION = "3.0.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; - + private String apiKey; private String host; private String version; @@ -39,26 +39,26 @@ public SendGrid(String apiKey) { public String getLibraryVersion() { return this.VERSION; } - + public String getVersion() { return this.version; } - + public void setVersion(String version) { this.version = version; } - + public Map getRequestHeaders() { return this.requestHeaders; } - + public Map addRequestHeader(String key, String value) { - this.requestHeaders.put(key, value); + this.requestHeaders.put(key, value); return getRequestHeaders(); } - + public Map removeRequestHeader(String key) { - this.requestHeaders.remove(key); + this.requestHeaders.remove(key); return getRequestHeaders(); } @@ -72,7 +72,7 @@ public void setHost(String host) { /** * Class makeCall makes the call to the SendGrid API, override this method for testing. - */ + */ public Response makeCall(Request request) throws IOException { Response response = new Response(); try { @@ -82,7 +82,7 @@ public Response makeCall(Request request) throws IOException { } return response; } - + /** * Class api sets up the request to the SendGrid API, this is main interface. */ @@ -91,10 +91,10 @@ public Response api(Request request) throws IOException { req.method = request.method; req.baseUri = this.host; req.endpoint = "/" + version + "/" + request.endpoint; - req.requestBody = request.requestBody; - req.requestHeaders = this.requestHeaders; - req.queryParams = request.queryParams; - + req.body = request.body; + req.headers = this.requestHeaders; + req.queryParams = request.queryParams; + return makeCall(req); } } diff --git a/src/test/java/com/sendgrid/MockSendGrid.java b/src/test/java/com/sendgrid/MockSendGrid.java index 93187033..006b27c7 100644 --- a/src/test/java/com/sendgrid/MockSendGrid.java +++ b/src/test/java/com/sendgrid/MockSendGrid.java @@ -5,21 +5,21 @@ public class MockSendGrid extends SendGrid { Request request; - + public MockSendGrid(String apiKey) { super(apiKey); } - + public Response makeCall(Request request) throws IOException { this.request = request; Response response = new Response(); response.statusCode = 200; - response.responseBody = "{\"message\":\"success\"}"; - response.responseHeaders = new HashMap(); - response.responseHeaders.put("Test", "Header"); + response.body = "{\"message\":\"success\"}"; + response.headers = new HashMap(); + response.headers.put("Test", "Header"); return response; } - + public Request getRequest() { return this.request; } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 9e024be5..d1f4e02b 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -102,7 +102,7 @@ public void test_access_settings_whitelist_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "access_settings/whitelist"; - request.requestBody = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + request.body = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -137,7 +137,7 @@ public void test_access_settings_whitelist_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "access_settings/whitelist"; - request.requestBody = "{\"ids\":[1,2,3]}"; + request.body = "{\"ids\":[1,2,3]}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -189,7 +189,7 @@ public void test_api_keys_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "api_keys"; - request.requestBody = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + request.body = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -224,7 +224,7 @@ public void test_api_keys__api_key_id__put() throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "api_keys/{api_key_id}"; - request.requestBody = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; + request.body = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -242,7 +242,7 @@ public void test_api_keys__api_key_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "api_keys/{api_key_id}"; - request.requestBody = "{\"name\":\"A New Hope\"}"; + request.body = "{\"name\":\"A New Hope\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -294,7 +294,7 @@ public void test_asm_groups_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/groups"; - request.requestBody = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; + request.body = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -329,7 +329,7 @@ public void test_asm_groups__group_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "asm/groups/{group_id}"; - request.requestBody = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; + request.body = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -381,7 +381,7 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/groups/{group_id}/suppressions"; - request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -433,7 +433,7 @@ public void test_asm_suppressions_global_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/suppressions/global"; - request.requestBody = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -487,11 +487,11 @@ public void test_browsers_stats_get() throws IOException { request.endpoint = "browsers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("browsers", "test_string"); - queryParams.put("limit", "test_string"); - queryParams.put("offset", "test_string"); - queryParams.put("start_date", "2016-01-01"); + queryParams.put("aggregated_by", "day"); + queryParams.put("browsers", "test_string"); + queryParams.put("limit", "test_string"); + queryParams.put("offset", "test_string"); + queryParams.put("start_date", "2016-01-01"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -510,7 +510,7 @@ public void test_campaigns_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "campaigns"; - request.requestBody = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + request.body = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -530,7 +530,7 @@ public void test_campaigns_get() throws IOException { request.endpoint = "campaigns"; Map queryParams = new HashMap(); queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("offset", "0"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -549,7 +549,7 @@ public void test_campaigns__campaign_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "campaigns/{campaign_id}"; - request.requestBody = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + request.body = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -601,7 +601,7 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "campaigns/{campaign_id}/schedules"; - request.requestBody = "{\"send_at\":1489451436}"; + request.body = "{\"send_at\":1489451436}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -619,7 +619,7 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "campaigns/{campaign_id}/schedules"; - request.requestBody = "{\"send_at\":1489771528}"; + request.body = "{\"send_at\":1489771528}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -688,7 +688,7 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio Request request = new Request(); request.method = Method.POST; request.endpoint = "campaigns/{campaign_id}/schedules/test"; - request.requestBody = "{\"to\":\"your.email@example.com\"}"; + request.body = "{\"to\":\"your.email@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -708,8 +708,8 @@ public void test_categories_get() throws IOException { request.endpoint = "categories"; Map queryParams = new HashMap(); queryParams.put("category", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -730,11 +730,11 @@ public void test_categories_stats_get() throws IOException { request.endpoint = "categories/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("categories", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("categories", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -755,12 +755,12 @@ public void test_categories_stats_sums_get() throws IOException { request.endpoint = "categories/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -781,8 +781,8 @@ public void test_clients_stats_get() throws IOException { request.endpoint = "clients/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -803,8 +803,8 @@ public void test_clients__client_type__stats_get() throws IOException { request.endpoint = "clients/{client_type}/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -823,7 +823,7 @@ public void test_contactdb_custom_fields_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/custom_fields"; - request.requestBody = "{\"type\":\"text\",\"name\":\"pet\"}"; + request.body = "{\"type\":\"text\",\"name\":\"pet\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -892,7 +892,7 @@ public void test_contactdb_lists_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/lists"; - request.requestBody = "{\"name\":\"your list name\"}"; + request.body = "{\"name\":\"your list name\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -927,7 +927,7 @@ public void test_contactdb_lists_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "contactdb/lists"; - request.requestBody = "[1,2,3,4]"; + request.body = "[1,2,3,4]"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -945,7 +945,7 @@ public void test_contactdb_lists__list_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "contactdb/lists/{list_id}"; - request.requestBody = "{\"name\":\"newlistname\"}"; + request.body = "{\"name\":\"newlistname\"}"; Map queryParams = new HashMap(); queryParams.put("list_id", "0"); request.queryParams = queryParams; @@ -1006,7 +1006,7 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/lists/{list_id}/recipients"; - request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + request.body = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -1026,8 +1026,8 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { request.endpoint = "contactdb/lists/{list_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - queryParams.put("list_id", "0"); + queryParams.put("page_size", "1"); + queryParams.put("list_id", "0"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1065,7 +1065,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Map queryParams = new HashMap(); queryParams.put("recipient_id", "0"); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "0"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -1084,7 +1084,7 @@ public void test_contactdb_recipients_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "contactdb/recipients"; - request.requestBody = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; + request.body = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -1102,7 +1102,7 @@ public void test_contactdb_recipients_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/recipients"; - request.requestBody = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + request.body = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -1122,7 +1122,7 @@ public void test_contactdb_recipients_get() throws IOException { request.endpoint = "contactdb/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); - queryParams.put("page_size", "1"); + queryParams.put("page_size", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1141,7 +1141,7 @@ public void test_contactdb_recipients_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "contactdb/recipients"; - request.requestBody = "[\"recipient_id1\",\"recipient_id2\"]"; + request.body = "[\"recipient_id1\",\"recipient_id2\"]"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1281,7 +1281,7 @@ public void test_contactdb_segments_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "contactdb/segments"; - request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1316,7 +1316,7 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "contactdb/segments/{segment_id}"; - request.requestBody = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; + request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; Map queryParams = new HashMap(); queryParams.put("segment_id", "test_string"); request.queryParams = queryParams; @@ -1379,7 +1379,7 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep request.endpoint = "contactdb/segments/{segment_id}/recipients"; Map queryParams = new HashMap(); queryParams.put("page", "1"); - queryParams.put("page_size", "1"); + queryParams.put("page_size", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1400,10 +1400,10 @@ public void test_devices_stats_get() throws IOException { request.endpoint = "devices/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1424,11 +1424,11 @@ public void test_geo_stats_get() throws IOException { request.endpoint = "geo/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("country", "US"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); + queryParams.put("country", "US"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1449,10 +1449,10 @@ public void test_ips_get() throws IOException { request.endpoint = "ips"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); - queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("exclude_whitelabels", "true"); - queryParams.put("offset", "1"); + queryParams.put("ip", "test_string"); + queryParams.put("limit", "1"); + queryParams.put("exclude_whitelabels", "true"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1488,7 +1488,7 @@ public void test_ips_pools_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "ips/pools"; - request.requestBody = "{\"name\":\"marketing\"}"; + request.body = "{\"name\":\"marketing\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1523,7 +1523,7 @@ public void test_ips_pools__pool_name__put() throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "ips/pools/{pool_name}"; - request.requestBody = "{\"name\":\"new_pool_name\"}"; + request.body = "{\"name\":\"new_pool_name\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1575,7 +1575,7 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "ips/pools/{pool_name}/ips"; - request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + request.body = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -1610,7 +1610,7 @@ public void test_ips_warmup_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "ips/warmup"; - request.requestBody = "{\"ip\":\"0.0.0.0\"}"; + request.body = "{\"ip\":\"0.0.0.0\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1730,7 +1730,7 @@ public void test_mail_send_beta_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "mail/send/beta"; - request.requestBody = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); Assert.assertEquals(202, response.statusCode); } @@ -1750,7 +1750,7 @@ public void test_mail_settings_get() throws IOException { request.endpoint = "mail_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1769,7 +1769,7 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/address_whitelist"; - request.requestBody = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; + request.body = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1804,7 +1804,7 @@ public void test_mail_settings_bcc_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/bcc"; - request.requestBody = "{\"enabled\":false,\"email\":\"email@example.com\"}"; + request.body = "{\"enabled\":false,\"email\":\"email@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1839,7 +1839,7 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/bounce_purge"; - request.requestBody = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; + request.body = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1874,7 +1874,7 @@ public void test_mail_settings_footer_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/footer"; - request.requestBody = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; + request.body = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1909,7 +1909,7 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/forward_bounce"; - request.requestBody = "{\"enabled\":true,\"email\":\"example@example.com\"}"; + request.body = "{\"enabled\":true,\"email\":\"example@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1944,7 +1944,7 @@ public void test_mail_settings_forward_spam_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/forward_spam"; - request.requestBody = "{\"enabled\":false,\"email\":\"\"}"; + request.body = "{\"enabled\":false,\"email\":\"\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -1979,7 +1979,7 @@ public void test_mail_settings_plain_content_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/plain_content"; - request.requestBody = "{\"enabled\":false}"; + request.body = "{\"enabled\":false}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2014,7 +2014,7 @@ public void test_mail_settings_spam_check_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/spam_check"; - request.requestBody = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; + request.body = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2049,7 +2049,7 @@ public void test_mail_settings_template_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "mail_settings/template"; - request.requestBody = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; + request.body = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2086,11 +2086,11 @@ public void test_mailbox_providers_stats_get() throws IOException { request.endpoint = "mailbox_providers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("mailbox_providers", "test_string"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); + queryParams.put("mailbox_providers", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2111,7 +2111,7 @@ public void test_partner_settings_get() throws IOException { request.endpoint = "partner_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2130,7 +2130,7 @@ public void test_partner_settings_new_relic_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "partner_settings/new_relic"; - request.requestBody = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; + request.body = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2184,10 +2184,10 @@ public void test_stats_get() throws IOException { request.endpoint = "stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2206,7 +2206,7 @@ public void test_subusers_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "subusers"; - request.requestBody = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; + request.body = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2226,8 +2226,8 @@ public void test_subusers_get() throws IOException { request.endpoint = "subusers"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); - queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("limit", "0"); + queryParams.put("offset", "0"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2268,11 +2268,11 @@ public void test_subusers_stats_get() throws IOException { request.endpoint = "subusers/stats"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("subusers", "test_string"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("subusers", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2293,11 +2293,11 @@ public void test_subusers_stats_monthly_get() throws IOException { request.endpoint = "subusers/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("subuser", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("date", "test_string"); + queryParams.put("sort_by_direction", "asc"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2318,12 +2318,12 @@ public void test_subusers_stats_sums_get() throws IOException { request.endpoint = "subusers/stats/sums"; Map queryParams = new HashMap(); queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); + queryParams.put("aggregated_by", "day"); + queryParams.put("limit", "1"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("sort_by_direction", "asc"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2342,7 +2342,7 @@ public void test_subusers__subuser_name__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "subusers/{subuser_name}"; - request.requestBody = "{\"disabled\":false}"; + request.body = "{\"disabled\":false}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2377,7 +2377,7 @@ public void test_subusers__subuser_name__ips_put() throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "subusers/{subuser_name}/ips"; - request.requestBody = "[\"127.0.0.1\"]"; + request.body = "[\"127.0.0.1\"]"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2395,7 +2395,7 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "subusers/{subuser_name}/monitor"; - request.requestBody = "{\"frequency\":500,\"email\":\"example@example.com\"}"; + request.body = "{\"frequency\":500,\"email\":\"example@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2413,7 +2413,7 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "subusers/{subuser_name}/monitor"; - request.requestBody = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; + request.body = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2467,10 +2467,10 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException request.endpoint = "subusers/{subuser_name}/stats/monthly"; Map queryParams = new HashMap(); queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); - queryParams.put("limit", "0"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); + queryParams.put("sort_by_direction", "asc"); + queryParams.put("limit", "0"); + queryParams.put("sort_by_metric", "test_string"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2491,9 +2491,9 @@ public void test_suppression_blocks_get() throws IOException { request.endpoint = "suppression/blocks"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2512,7 +2512,7 @@ public void test_suppression_blocks_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/blocks"; - request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2566,7 +2566,7 @@ public void test_suppression_bounces_get() throws IOException { request.endpoint = "suppression/bounces"; Map queryParams = new HashMap(); queryParams.put("start_time", "0"); - queryParams.put("end_time", "0"); + queryParams.put("end_time", "0"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2585,7 +2585,7 @@ public void test_suppression_bounces_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/bounces"; - request.requestBody = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; + request.body = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2642,9 +2642,9 @@ public void test_suppression_invalid_emails_get() throws IOException { request.endpoint = "suppression/invalid_emails"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2663,7 +2663,7 @@ public void test_suppression_invalid_emails_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/invalid_emails"; - request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2751,9 +2751,9 @@ public void test_suppression_spam_reports_get() throws IOException { request.endpoint = "suppression/spam_reports"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2772,7 +2772,7 @@ public void test_suppression_spam_reports_delete() throws IOException { Request request = new Request(); request.method = Method.DELETE; request.endpoint = "suppression/spam_reports"; - request.requestBody = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -2792,9 +2792,9 @@ public void test_suppression_unsubscribes_get() throws IOException { request.endpoint = "suppression/unsubscribes"; Map queryParams = new HashMap(); queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("end_time", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2813,7 +2813,7 @@ public void test_templates_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "templates"; - request.requestBody = "{\"name\":\"example_name\"}"; + request.body = "{\"name\":\"example_name\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -2848,7 +2848,7 @@ public void test_templates__template_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "templates/{template_id}"; - request.requestBody = "{\"name\":\"new_example_name\"}"; + request.body = "{\"name\":\"new_example_name\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2900,7 +2900,7 @@ public void test_templates__template_id__versions_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "templates/{template_id}/versions"; - request.requestBody = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + request.body = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -2918,7 +2918,7 @@ public void test_templates__template_id__versions__version_id__patch() throws IO Request request = new Request(); request.method = Method.PATCH; request.endpoint = "templates/{template_id}/versions/{version_id}"; - request.requestBody = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; + request.body = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -2989,7 +2989,7 @@ public void test_tracking_settings_get() throws IOException { request.endpoint = "tracking_settings"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3008,7 +3008,7 @@ public void test_tracking_settings_click_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/click"; - request.requestBody = "{\"enabled\":true}"; + request.body = "{\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3043,7 +3043,7 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/google_analytics"; - request.requestBody = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + request.body = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3078,7 +3078,7 @@ public void test_tracking_settings_open_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/open"; - request.requestBody = "{\"enabled\":true}"; + request.body = "{\"enabled\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3113,7 +3113,7 @@ public void test_tracking_settings_subscription_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "tracking_settings/subscription"; - request.requestBody = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + request.body = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3182,7 +3182,7 @@ public void test_user_email_put() throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "user/email"; - request.requestBody = "{\"email\":\"example@example.com\"}"; + request.body = "{\"email\":\"example@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3217,7 +3217,7 @@ public void test_user_password_put() throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "user/password"; - request.requestBody = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; + request.body = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3235,7 +3235,7 @@ public void test_user_profile_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/profile"; - request.requestBody = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; + request.body = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3270,7 +3270,7 @@ public void test_user_scheduled_sends_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "user/scheduled_sends"; - request.requestBody = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; + request.body = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -3305,7 +3305,7 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/scheduled_sends/{batch_id}"; - request.requestBody = "{\"status\":\"pause\"}"; + request.body = "{\"status\":\"pause\"}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -3357,7 +3357,7 @@ public void test_user_settings_enforced_tls_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/settings/enforced_tls"; - request.requestBody = "{\"require_tls\":true,\"require_valid_cert\":false}"; + request.body = "{\"require_tls\":true,\"require_valid_cert\":false}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3392,7 +3392,7 @@ public void test_user_username_put() throws IOException { Request request = new Request(); request.method = Method.PUT; request.endpoint = "user/username"; - request.requestBody = "{\"username\":\"test_username\"}"; + request.body = "{\"username\":\"test_username\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3427,7 +3427,7 @@ public void test_user_webhooks_event_settings_patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "user/webhooks/event/settings"; - request.requestBody = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + request.body = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3462,7 +3462,7 @@ public void test_user_webhooks_event_test_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "user/webhooks/event/test"; - request.requestBody = "{\"url\":\"url\"}"; + request.body = "{\"url\":\"url\"}"; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); } @@ -3499,10 +3499,10 @@ public void test_user_webhooks_parse_stats_get() throws IOException { request.endpoint = "user/webhooks/parse/stats"; Map queryParams = new HashMap(); queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "test_string"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "test_string"); + queryParams.put("limit", "test_string"); + queryParams.put("start_date", "2016-01-01"); + queryParams.put("end_date", "2016-04-01"); + queryParams.put("offset", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3521,7 +3521,7 @@ public void test_whitelabel_domains_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/domains"; - request.requestBody = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + request.body = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -3541,10 +3541,10 @@ public void test_whitelabel_domains_get() throws IOException { request.endpoint = "whitelabel/domains"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); - queryParams.put("domain", "test_string"); - queryParams.put("exclude_subusers", "true"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("domain", "test_string"); + queryParams.put("exclude_subusers", "true"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3614,7 +3614,7 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "whitelabel/domains/{domain_id}"; - request.requestBody = "{\"default\":false,\"custom_spf\":true}"; + request.body = "{\"default\":false,\"custom_spf\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3666,7 +3666,7 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/domains/{domain_id}/subuser"; - request.requestBody = "{\"username\":\"jane@example.com\"}"; + request.body = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -3684,7 +3684,7 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/domains/{id}/ips"; - request.requestBody = "{\"ip\":\"192.168.0.1\"}"; + request.body = "{\"ip\":\"192.168.0.1\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3736,7 +3736,7 @@ public void test_whitelabel_ips_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/ips"; - request.requestBody = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; + request.body = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -3756,8 +3756,8 @@ public void test_whitelabel_ips_get() throws IOException { request.endpoint = "whitelabel/ips"; Map queryParams = new HashMap(); queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3827,10 +3827,10 @@ public void test_whitelabel_links_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/links"; - request.requestBody = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; + request.body = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; Map queryParams = new HashMap(); queryParams.put("limit", "1"); - queryParams.put("offset", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); @@ -3929,7 +3929,7 @@ public void test_whitelabel_links__id__patch() throws IOException { Request request = new Request(); request.method = Method.PATCH; request.endpoint = "whitelabel/links/{id}"; - request.requestBody = "{\"default\":true}"; + request.body = "{\"default\":true}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -3998,7 +3998,7 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "whitelabel/links/{link_id}/subuser"; - request.requestBody = "{\"username\":\"jane@example.com\"}"; + request.body = "{\"username\":\"jane@example.com\"}"; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } From f6492e1769f987e5acff5220a56303560b315626 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 8 Jun 2016 15:32:08 -0700 Subject: [PATCH 036/439] Adding /mail/send links and formatting updates --- USAGE.md | 279 +++++++++++++++++- examples/accesssettings/accesssettings.java | 42 +-- examples/apikeys/apikeys.java | 42 +-- examples/asm/asm.java | 126 +++++--- examples/browsers/browsers.java | 7 +- examples/campaigns/campaigns.java | 77 ++--- examples/categories/categories.java | 21 +- examples/clients/clients.java | 14 +- examples/contactdb/contactdb.java | 217 ++++++++------ examples/devices/devices.java | 7 +- examples/geo/geo.java | 7 +- examples/ips/ips.java | 98 +++--- examples/mail/mail.java | 22 +- .../mailboxproviders/mailboxproviders.java | 7 +- examples/mailsettings/mailsettings.java | 133 +++++---- examples/partnersettings/partnersettings.java | 21 +- examples/scopes/scopes.java | 7 +- examples/stats/stats.java | 7 +- examples/subusers/subusers.java | 98 +++--- examples/suppression/suppression.java | 119 ++++---- examples/templates/templates.java | 70 +++-- .../trackingsettings/trackingsettings.java | 63 ++-- examples/user/user.java | 147 +++++---- examples/whitelabel/whitelabel.java | 189 +++++++----- 24 files changed, 1170 insertions(+), 650 deletions(-) diff --git a/USAGE.md b/USAGE.md index 4ced041a..9ea56ea9 100644 --- a/USAGE.md +++ b/USAGE.md @@ -64,6 +64,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### GET /access_settings/activity + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -93,6 +94,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### POST /access_settings/whitelist + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -118,6 +120,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### GET /access_settings/whitelist + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -144,6 +147,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### DELETE /access_settings/whitelist + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -171,6 +175,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### GET /access_settings/whitelist/{rule_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -197,6 +202,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ### DELETE /access_settings/whitelist/{rule_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -228,6 +234,7 @@ See the [API Key Permissions List](https://sendgrid.com/docs/API_Reference/Web_A ### POST /api_keys + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -251,6 +258,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti ### GET /api_keys + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -277,6 +285,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti ### PUT /api_keys/{api_key_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -308,6 +317,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti ### PATCH /api_keys/{api_key_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -331,6 +341,7 @@ If the API Key ID does not exist an HTTP 404 will be returned. ### GET /api_keys/{api_key_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -361,6 +372,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti ### DELETE /api_keys/{api_key_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -378,9 +390,9 @@ The API Keys feature allows customers to be able to generate an API Key credenti # ASM -## Create a Group +## Create a new suppression group -**This endoint allows you to create a new suppression group.** +**This endpoint allows you to create a new suppression group.** Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. @@ -390,13 +402,14 @@ Each user can create up to 25 different suppression groups. ### POST /asm/groups + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/groups"; - request.body = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; + request.body = "{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.body); @@ -405,24 +418,24 @@ Each user can create up to 25 different suppression groups. throw ex; } ``` -## Retrieve all suppression groups associated with the user. - -**This endpoint allows you to retrieve a list of all suppression groups created by this user.** - -Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. +## Retrieve information about multiple suppression groups -The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. +**This endpoint allows you to retrieve information about multiple suppression groups.** -Each user can create up to 25 different suppression groups. +This endpoint will return information for each group ID that you include in your request. To add a group ID to your request, simply append `&id=` followed by the group ID. ### GET /asm/groups + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.GET; request.endpoint = "asm/groups"; + Map queryParams = new HashMap(); + queryParams.put("id", "1"); + request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.body); @@ -443,6 +456,7 @@ Each user can create up to 25 different suppression groups. ### PATCH /asm/groups/{group_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -470,6 +484,7 @@ Each user can create up to 25 different suppression groups. ### GET /asm/groups/{group_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -498,6 +513,7 @@ Each user can create up to 25 different suppression groups. ### DELETE /asm/groups/{group_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -522,6 +538,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups ### POST /asm/groups/{group_id}/suppressions + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -545,6 +562,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups ### GET /asm/groups/{group_id}/suppressions + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -567,6 +585,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups ### DELETE /asm/groups/{group_id}/suppressions/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -581,6 +600,29 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups throw ex; } ``` +## Retrieve all suppressions + +**This endpoint allows you to retrieve a list of all suppressions.** + +Suppressions are email addresses that can be added to [groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html) to prevent certain types of emails from being delivered to those addresses. + +### GET /asm/suppressions + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/suppressions"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` ## Add recipient addresses to the global suppression group. **This endpoint allows you to add one or more email addresses to the global suppressions group.** @@ -589,6 +631,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient ### POST /asm/suppressions/global + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -614,6 +657,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient ### GET /asm/suppressions/global/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -636,6 +680,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient ### DELETE /asm/suppressions/global/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -650,6 +695,29 @@ A global suppression (or global unsubscribe) is an email address of a recipient throw ex; } ``` +## Retrieve all suppression groups for an email address + +**This endpoint will return a list of all suppression groups, indicating if the given email address is suppressed for each group.** + +Suppressions are email addresses that can be added to [groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html) to prevent certain types of emails from being delivered to those addresses. + +### GET /asm/suppressions/{email} + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/suppressions/{email}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` # BROWSERS @@ -663,6 +731,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /browsers/stats + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -702,6 +771,7 @@ For more information: ### POST /campaigns + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -731,6 +801,7 @@ For more information: ### GET /campaigns + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -759,6 +830,7 @@ For more information: ### PATCH /campaigns/{campaign_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -786,6 +858,7 @@ For more information: ### GET /campaigns/{campaign_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -812,6 +885,7 @@ For more information: ### DELETE /campaigns/{campaign_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -836,6 +910,7 @@ For more information: ### PATCH /campaigns/{campaign_id}/schedules + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -861,6 +936,7 @@ For more information: ### POST /campaigns/{campaign_id}/schedules + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -886,6 +962,7 @@ For more information: ### GET /campaigns/{campaign_id}/schedules + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -913,6 +990,7 @@ For more information: ### DELETE /campaigns/{campaign_id}/schedules + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -939,6 +1017,7 @@ For more information: ### POST /campaigns/{campaign_id}/schedules/now + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -965,6 +1044,7 @@ For more information: ### POST /campaigns/{campaign_id}/schedules/test + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -991,6 +1071,7 @@ Categories can help organize your email analytics by enabling you to tag emails ### GET /categories + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1020,6 +1101,7 @@ Categories allow you to group your emails together according to broad topics tha ### GET /categories/stats + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1052,6 +1134,7 @@ Categories allow you to group your emails together according to broad topics tha ### GET /categories/stats/sums + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1088,6 +1171,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /clients/stats + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1123,6 +1207,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /clients/{client_type}/stats + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1153,6 +1238,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### POST /contactdb/custom_fields + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1176,6 +1262,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### GET /contactdb/custom_fields + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1198,6 +1285,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### GET /contactdb/custom_fields/{custom_field_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1220,6 +1308,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### DELETE /contactdb/custom_fields/{custom_field_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1242,6 +1331,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### POST /contactdb/lists + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1265,6 +1355,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/lists + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1287,6 +1378,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### DELETE /contactdb/lists + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1311,6 +1403,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### PATCH /contactdb/lists/{list_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1337,6 +1430,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/lists/{list_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1362,6 +1456,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### DELETE /contactdb/lists/{list_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1389,6 +1484,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### POST /contactdb/lists/{list_id}/recipients + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1412,6 +1508,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/lists/{list_id}/recipients + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1439,6 +1536,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### POST /contactdb/lists/{list_id}/recipients/{recipient_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1461,6 +1559,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1491,6 +1590,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### PATCH /contactdb/recipients + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1516,6 +1616,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### POST /contactdb/recipients + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1542,6 +1643,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/recipients + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1570,6 +1672,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### DELETE /contactdb/recipients + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1595,6 +1698,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/recipients/billable_count + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1617,6 +1721,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### GET /contactdb/recipients/count + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1648,6 +1753,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### GET /contactdb/recipients/search + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1673,6 +1779,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/recipients/{recipient_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1695,6 +1802,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### DELETE /contactdb/recipients/{recipient_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1719,6 +1827,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co ### GET /contactdb/recipients/{recipient_id}/lists + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1741,6 +1850,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( ### GET /contactdb/reserved_fields + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1783,6 +1893,7 @@ For more information about segments in Marketing Campaigns, please see our [User ### POST /contactdb/segments + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1808,6 +1919,7 @@ For more information about segments in Marketing Campaigns, please see our [User ### GET /contactdb/segments + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1832,6 +1944,7 @@ For more information about segments in Marketing Campaigns, please see our [User ### PATCH /contactdb/segments/{segment_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1860,6 +1973,7 @@ For more information about segments in Marketing Campaigns, please see our [User ### GET /contactdb/segments/{segment_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1889,6 +2003,7 @@ For more information about segments in Marketing Campaigns, please see our [User ### DELETE /contactdb/segments/{segment_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1916,6 +2031,7 @@ For more information about segments in Marketing Campaigns, please see our [User ### GET /contactdb/segments/{segment_id}/recipients + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1956,6 +2072,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /devices/stats + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -1990,6 +2107,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /geo/stats + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2025,6 +2143,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in ### GET /ips + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2054,6 +2173,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in ### GET /ips/assigned + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2082,6 +2202,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ### POST /ips/pools + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2109,6 +2230,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ### GET /ips/pools + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2135,6 +2257,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ### PUT /ips/pools/{pool_name} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2162,6 +2285,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ### GET /ips/pools/{pool_name} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2188,6 +2312,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ### DELETE /ips/pools/{pool_name} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2212,6 +2337,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in ### POST /ips/pools/{pool_name}/ips + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2237,6 +2363,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in ### DELETE /ips/pools/{pool_name}/ips/{ip} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2261,6 +2388,7 @@ For more general information about warming up IPs, please see our [Classroom](ht ### POST /ips/warmup + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2286,6 +2414,7 @@ For more general information about warming up IPs, please see our [Classroom](ht ### GET /ips/warmup + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2310,6 +2439,7 @@ For more general information about warming up IPs, please see our [Classroom](ht ### GET /ips/warmup/{ip_address} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2334,6 +2464,7 @@ For more general information about warming up IPs, please see our [Classroom](ht ### DELETE /ips/warmup/{ip_address} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2358,6 +2489,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in ### GET /ips/{ip_address} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2387,6 +2519,7 @@ More Information: ### POST /mail/batch + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2413,6 +2546,7 @@ More Information: ### GET /mail/batch/{batch_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2440,6 +2574,8 @@ For more detailed information about how to use the v3 Mail Send endpoint, please ### POST /mail/send/beta +This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/v3beta/src/main/java/com/sendgrid/helpers/README.md). + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2466,6 +2602,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2494,6 +2631,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/address_whitelist + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2519,6 +2657,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/address_whitelist + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2543,6 +2682,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/bcc + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2568,6 +2708,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/bcc + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2592,6 +2733,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/bounce_purge + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2617,6 +2759,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/bounce_purge + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2641,6 +2784,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/footer + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2666,6 +2810,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/footer + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2690,6 +2835,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/forward_bounce + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2715,6 +2861,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/forward_bounce + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2739,6 +2886,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/forward_spam + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2764,6 +2912,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/forward_spam + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2788,6 +2937,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/plain_content + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2813,6 +2963,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/plain_content + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2837,6 +2988,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/spam_check + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2862,6 +3014,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/spam_check + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2888,6 +3041,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### PATCH /mail_settings/template + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2915,6 +3069,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th ### GET /mail_settings/template + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2942,6 +3097,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act ### GET /mailbox_providers/stats + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -2975,6 +3131,7 @@ Our partner settings allow you to integrate your SendGrid account with our partn ### GET /partner_settings + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3003,6 +3160,7 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo ### PATCH /partner_settings/new_relic + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3028,6 +3186,7 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo ### GET /partner_settings/new_relic + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3053,6 +3212,7 @@ API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://s ### GET /scopes + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3078,6 +3238,7 @@ Parent accounts will see aggregated stats for their account and all subuser acco ### GET /stats + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3113,6 +3274,7 @@ For more information about Subusers: ### POST /subusers + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3139,6 +3301,7 @@ For more information about Subusers: ### GET /subusers + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3166,6 +3329,7 @@ This endpoint allows you to request the reputations for your subusers. ### GET /subusers/reputations + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3195,6 +3359,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ ### GET /subusers/stats + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3230,6 +3395,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ ### GET /subusers/stats/monthly + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3263,6 +3429,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ ### GET /subusers/stats/sums + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3297,6 +3464,7 @@ For more information about Subusers: ### PATCH /subusers/{subuser_name} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3323,6 +3491,7 @@ For more information about Subusers: ### DELETE /subusers/{subuser_name} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3348,6 +3517,7 @@ More information: ### PUT /subusers/{subuser_name}/ips + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3369,6 +3539,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by ### PUT /subusers/{subuser_name}/monitor + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3390,6 +3561,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by ### POST /subusers/{subuser_name}/monitor + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3411,6 +3583,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by ### GET /subusers/{subuser_name}/monitor + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3431,6 +3604,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by ### DELETE /subusers/{subuser_name}/monitor + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3458,6 +3632,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ ### GET /subusers/{subuser_name}/stats/monthly + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3492,6 +3667,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/blocks + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3527,6 +3703,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/blocks + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3552,6 +3729,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/blocks/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3576,6 +3754,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/blocks/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3603,6 +3782,7 @@ For more information see: ### GET /suppression/bounces + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3637,6 +3817,7 @@ Note: the `delete_all` and `emails` parameters should be used independently of e ### DELETE /suppression/bounces + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3666,6 +3847,7 @@ For more information see: ### GET /suppression/bounces/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3694,6 +3876,7 @@ For more information see: ### DELETE /suppression/bounces/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3723,6 +3906,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/invalid_emails + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3760,6 +3944,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/invalid_emails + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3787,6 +3972,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/invalid_emails/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3813,6 +3999,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/invalid_emails/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3837,6 +4024,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/spam_report/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3861,6 +4049,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/spam_report/{email} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3885,6 +4074,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### GET /suppression/spam_reports + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3920,6 +4110,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User ### DELETE /suppression/spam_reports + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3943,6 +4134,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient ### GET /suppression/unsubscribes + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -3976,6 +4168,7 @@ Transactional templates are templates created specifically for transactional ema ### POST /templates + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4001,6 +4194,7 @@ Transactional templates are templates created specifically for transactional ema ### GET /templates + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4026,6 +4220,7 @@ Transactional templates are templates created specifically for transactional ema ### PATCH /templates/{template_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4052,6 +4247,7 @@ Transactional templates are templates created specifically for transactional ema ### GET /templates/{template_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4077,6 +4273,7 @@ Transactional templates are templates created specifically for transactional ema ### DELETE /templates/{template_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4102,6 +4299,7 @@ For more information about transactional templates, please see our [User Guide]( ### POST /templates/{template_id}/versions + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4133,6 +4331,7 @@ For more information about transactional templates, please see our [User Guide]( ### PATCH /templates/{template_id}/versions/{version_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4164,6 +4363,7 @@ For more information about transactional templates, please see our [User Guide]( ### GET /templates/{template_id}/versions/{version_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4194,6 +4394,7 @@ For more information about transactional templates, please see our [User Guide]( ### DELETE /templates/{template_id}/versions/{version_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4225,6 +4426,7 @@ For more information about transactional templates, please see our [User Guide]( ### POST /templates/{template_id}/versions/{version_id}/activate + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4252,6 +4454,7 @@ For more information about tracking, please see our [User Guide](https://sendgri ### GET /tracking_settings + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4280,6 +4483,7 @@ For more information about tracking, please see our [User Guide](https://sendgri ### PATCH /tracking_settings/click + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4305,6 +4509,7 @@ For more information about tracking, please see our [User Guide](https://sendgri ### GET /tracking_settings/click + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4333,6 +4538,7 @@ For more information about tracking, please see our [User Guide](https://sendgri ### PATCH /tracking_settings/google_analytics + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4362,6 +4568,7 @@ For more information about tracking, please see our [User Guide](https://sendgri ### GET /tracking_settings/google_analytics + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4388,6 +4595,7 @@ For more information about tracking, please see our [User Guide](https://sendgri ### PATCH /tracking_settings/open + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4415,6 +4623,7 @@ For more information about tracking, please see our [User Guide](https://sendgri ### GET /tracking_settings/open + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4441,6 +4650,7 @@ For more information about tracking, please see our [User Guide](https://sendgri ### PATCH /tracking_settings/subscription + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4468,6 +4678,7 @@ For more information about tracking, please see our [User Guide](https://sendgri ### GET /tracking_settings/subscription + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4499,6 +4710,7 @@ For more information about your user profile: ### GET /user/account + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4521,6 +4733,7 @@ Your monthly credit allotment limits the number of emails you may send before in ### GET /user/credits + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4547,6 +4760,7 @@ For more information about your user profile: ### PUT /user/email + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4574,6 +4788,7 @@ For more information about your user profile: ### GET /user/email + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4600,6 +4815,7 @@ For more information about your user profile: ### PUT /user/password + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4629,6 +4845,7 @@ It should be noted that any one or more of the parameters can be updated via the ### PATCH /user/profile + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4654,6 +4871,7 @@ For more information about your user profile: ### GET /user/profile + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4679,6 +4897,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen ### POST /user/scheduled_sends + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4702,6 +4921,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen ### GET /user/scheduled_sends + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4724,6 +4944,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen ### PATCH /user/scheduled_sends/{batch_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4747,6 +4968,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen ### GET /user/scheduled_sends/{batch_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4769,6 +4991,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen ### DELETE /user/scheduled_sends/{batch_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4793,6 +5016,7 @@ The Enforced TLS settings specify whether or not the recipient is required to su ### PATCH /user/settings/enforced_tls + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4818,6 +5042,7 @@ The Enforced TLS settings specify whether or not the recipient is required to su ### GET /user/settings/enforced_tls + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4844,6 +5069,7 @@ For more information about your user profile: ### PUT /user/username + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4871,6 +5097,7 @@ For more information about your user profile: ### GET /user/username + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4897,6 +5124,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete ### PATCH /user/webhooks/event/settings + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4924,6 +5152,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete ### GET /user/webhooks/event/settings + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4948,6 +5177,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete ### POST /user/webhooks/event/test + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4971,6 +5201,7 @@ SendGrid can parse the attachments and contents of incoming emails. The Parse AP ### GET /user/webhooks/parse/settings + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -4995,6 +5226,7 @@ There are a number of pre-made integrations for the SendGrid Parse Webhook which ### GET /user/webhooks/parse/stats + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5033,6 +5265,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### POST /whitelabel/domains + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5059,6 +5292,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### GET /whitelabel/domains + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5095,6 +5329,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### GET /whitelabel/domains/default + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5126,6 +5361,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### GET /whitelabel/domains/subuser + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5157,6 +5393,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### DELETE /whitelabel/domains/subuser + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5181,6 +5418,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### PATCH /whitelabel/domains/{domain_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5207,6 +5445,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### GET /whitelabel/domains/{domain_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5231,6 +5470,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### DELETE /whitelabel/domains/{domain_id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5262,6 +5502,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### POST /whitelabel/domains/{domain_id}/subuser + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5292,6 +5533,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### POST /whitelabel/domains/{id}/ips + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5323,6 +5565,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### DELETE /whitelabel/domains/{id}/ips/{ip} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5352,6 +5595,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg ### POST /whitelabel/domains/{id}/validate + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5378,6 +5622,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### POST /whitelabel/ips + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5405,6 +5650,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/ips + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5434,6 +5680,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/ips/{id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5458,6 +5705,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### DELETE /whitelabel/ips/{id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5482,6 +5730,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### POST /whitelabel/ips/{id}/validate + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5506,6 +5755,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### POST /whitelabel/links + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5535,6 +5785,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/links + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5569,6 +5820,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/links/default + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5600,6 +5852,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/links/subuser + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5631,6 +5884,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### DELETE /whitelabel/links/subuser + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5658,6 +5912,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### PATCH /whitelabel/links/{id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5683,6 +5938,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### GET /whitelabel/links/{id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5707,6 +5963,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### DELETE /whitelabel/links/{id} + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5731,6 +5988,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### POST /whitelabel/links/{id}/validate + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -5759,6 +6017,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ### POST /whitelabel/links/{link_id}/subuser + ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); diff --git a/examples/accesssettings/accesssettings.java b/examples/accesssettings/accesssettings.java index 7409e4d2..3b704309 100644 --- a/examples/accesssettings/accesssettings.java +++ b/examples/accesssettings/accesssettings.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve all recent access attempts # -# GET /access_settings/activity # +////////////////////////////////////////////////////////////////// +// Retrieve all recent access attempts +// GET /access_settings/activity + public class Example { public static void main(String[] args) throws IOException { @@ -35,9 +36,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Add one or more IPs to the whitelist # -# POST /access_settings/whitelist # +////////////////////////////////////////////////////////////////// +// Add one or more IPs to the whitelist +// POST /access_settings/whitelist + public class Example { public static void main(String[] args) throws IOException { @@ -57,9 +59,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a list of currently whitelisted IPs # -# GET /access_settings/whitelist # +////////////////////////////////////////////////////////////////// +// Retrieve a list of currently whitelisted IPs +// GET /access_settings/whitelist + public class Example { public static void main(String[] args) throws IOException { @@ -78,9 +81,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Remove one or more IPs from the whitelist # -# DELETE /access_settings/whitelist # +////////////////////////////////////////////////////////////////// +// Remove one or more IPs from the whitelist +// DELETE /access_settings/whitelist + public class Example { public static void main(String[] args) throws IOException { @@ -100,9 +104,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a specific whitelisted IP # -# GET /access_settings/whitelist/{rule_id} # +////////////////////////////////////////////////////////////////// +// Retrieve a specific whitelisted IP +// GET /access_settings/whitelist/{rule_id} + public class Example { public static void main(String[] args) throws IOException { @@ -121,9 +126,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Remove a specific IP from the whitelist # -# DELETE /access_settings/whitelist/{rule_id} # +////////////////////////////////////////////////////////////////// +// Remove a specific IP from the whitelist +// DELETE /access_settings/whitelist/{rule_id} + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/apikeys/apikeys.java b/examples/apikeys/apikeys.java index 08f4ec84..ebd0536b 100644 --- a/examples/apikeys/apikeys.java +++ b/examples/apikeys/apikeys.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Create API keys # -# POST /api_keys # +////////////////////////////////////////////////////////////////// +// Create API keys +// POST /api_keys + public class Example { public static void main(String[] args) throws IOException { @@ -33,9 +34,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all API Keys belonging to the authenticated user # -# GET /api_keys # +////////////////////////////////////////////////////////////////// +// Retrieve all API Keys belonging to the authenticated user +// GET /api_keys + public class Example { public static void main(String[] args) throws IOException { @@ -54,9 +56,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update the name & scopes of an API Key # -# PUT /api_keys/{api_key_id} # +////////////////////////////////////////////////////////////////// +// Update the name & scopes of an API Key +// PUT /api_keys/{api_key_id} + public class Example { public static void main(String[] args) throws IOException { @@ -76,9 +79,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update API keys # -# PATCH /api_keys/{api_key_id} # +////////////////////////////////////////////////////////////////// +// Update API keys +// PATCH /api_keys/{api_key_id} + public class Example { public static void main(String[] args) throws IOException { @@ -98,9 +102,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve an existing API Key # -# GET /api_keys/{api_key_id} # +////////////////////////////////////////////////////////////////// +// Retrieve an existing API Key +// GET /api_keys/{api_key_id} + public class Example { public static void main(String[] args) throws IOException { @@ -119,9 +124,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete API keys # -# DELETE /api_keys/{api_key_id} # +////////////////////////////////////////////////////////////////// +// Delete API keys +// DELETE /api_keys/{api_key_id} + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/asm/asm.java b/examples/asm/asm.java index b0ca24ef..74469470 100644 --- a/examples/asm/asm.java +++ b/examples/asm/asm.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Create a Group # -# POST /asm/groups # +////////////////////////////////////////////////////////////////// +// Create a new suppression group +// POST /asm/groups + public class Example { public static void main(String[] args) throws IOException { @@ -22,7 +23,7 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/groups"; - request.body = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; + request.body = "{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.body); @@ -33,9 +34,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all suppression groups associated with the user. # -# GET /asm/groups # +////////////////////////////////////////////////////////////////// +// Retrieve information about multiple suppression groups +// GET /asm/groups + public class Example { public static void main(String[] args) throws IOException { @@ -44,6 +46,9 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.GET; request.endpoint = "asm/groups"; + Map queryParams = new HashMap(); + queryParams.put("id", "1"); + request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.body); @@ -54,9 +59,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update a suppression group. # -# PATCH /asm/groups/{group_id} # +////////////////////////////////////////////////////////////////// +// Update a suppression group. +// PATCH /asm/groups/{group_id} + public class Example { public static void main(String[] args) throws IOException { @@ -76,9 +82,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Get information on a single suppression group. # -# GET /asm/groups/{group_id} # +////////////////////////////////////////////////////////////////// +// Get information on a single suppression group. +// GET /asm/groups/{group_id} + public class Example { public static void main(String[] args) throws IOException { @@ -97,9 +104,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a suppression group. # -# DELETE /asm/groups/{group_id} # +////////////////////////////////////////////////////////////////// +// Delete a suppression group. +// DELETE /asm/groups/{group_id} + public class Example { public static void main(String[] args) throws IOException { @@ -118,9 +126,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Add suppressions to a suppression group # -# POST /asm/groups/{group_id}/suppressions # +////////////////////////////////////////////////////////////////// +// Add suppressions to a suppression group +// POST /asm/groups/{group_id}/suppressions + public class Example { public static void main(String[] args) throws IOException { @@ -140,9 +149,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all suppressions for a suppression group # -# GET /asm/groups/{group_id}/suppressions # +////////////////////////////////////////////////////////////////// +// Retrieve all suppressions for a suppression group +// GET /asm/groups/{group_id}/suppressions + public class Example { public static void main(String[] args) throws IOException { @@ -161,9 +171,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a suppression from a suppression group # -# DELETE /asm/groups/{group_id}/suppressions/{email} # +////////////////////////////////////////////////////////////////// +// Delete a suppression from a suppression group +// DELETE /asm/groups/{group_id}/suppressions/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -182,9 +193,32 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Add recipient addresses to the global suppression group. # -# POST /asm/suppressions/global # +////////////////////////////////////////////////////////////////// +// Retrieve all suppressions +// GET /asm/suppressions + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/suppressions"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add recipient addresses to the global suppression group. +// POST /asm/suppressions/global + public class Example { public static void main(String[] args) throws IOException { @@ -204,9 +238,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a Global Suppression # -# GET /asm/suppressions/global/{email} # +////////////////////////////////////////////////////////////////// +// Retrieve a Global Suppression +// GET /asm/suppressions/global/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -225,9 +260,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a Global Suppression # -# DELETE /asm/suppressions/global/{email} # +////////////////////////////////////////////////////////////////// +// Delete a Global Suppression +// DELETE /asm/suppressions/global/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -246,3 +282,25 @@ public static void main(String[] args) throws IOException { } } +////////////////////////////////////////////////////////////////// +// Retrieve all suppression groups for an email address +// GET /asm/suppressions/{email} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/suppressions/{email}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/browsers/browsers.java b/examples/browsers/browsers.java index ceddb33a..7d1ad5d1 100644 --- a/examples/browsers/browsers.java +++ b/examples/browsers/browsers.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve email statistics by browser. # -# GET /browsers/stats # +////////////////////////////////////////////////////////////////// +// Retrieve email statistics by browser. +// GET /browsers/stats + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/campaigns/campaigns.java b/examples/campaigns/campaigns.java index 2517e45f..8230c883 100644 --- a/examples/campaigns/campaigns.java +++ b/examples/campaigns/campaigns.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Create a Campaign # -# POST /campaigns # +////////////////////////////////////////////////////////////////// +// Create a Campaign +// POST /campaigns + public class Example { public static void main(String[] args) throws IOException { @@ -33,9 +34,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all Campaigns # -# GET /campaigns # +////////////////////////////////////////////////////////////////// +// Retrieve all Campaigns +// GET /campaigns + public class Example { public static void main(String[] args) throws IOException { @@ -58,9 +60,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update a Campaign # -# PATCH /campaigns/{campaign_id} # +////////////////////////////////////////////////////////////////// +// Update a Campaign +// PATCH /campaigns/{campaign_id} + public class Example { public static void main(String[] args) throws IOException { @@ -80,9 +83,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a single campaign # -# GET /campaigns/{campaign_id} # +////////////////////////////////////////////////////////////////// +// Retrieve a single campaign +// GET /campaigns/{campaign_id} + public class Example { public static void main(String[] args) throws IOException { @@ -101,9 +105,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a Campaign # -# DELETE /campaigns/{campaign_id} # +////////////////////////////////////////////////////////////////// +// Delete a Campaign +// DELETE /campaigns/{campaign_id} + public class Example { public static void main(String[] args) throws IOException { @@ -122,9 +127,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update a Scheduled Campaign # -# PATCH /campaigns/{campaign_id}/schedules # +////////////////////////////////////////////////////////////////// +// Update a Scheduled Campaign +// PATCH /campaigns/{campaign_id}/schedules + public class Example { public static void main(String[] args) throws IOException { @@ -144,9 +150,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Schedule a Campaign # -# POST /campaigns/{campaign_id}/schedules # +////////////////////////////////////////////////////////////////// +// Schedule a Campaign +// POST /campaigns/{campaign_id}/schedules + public class Example { public static void main(String[] args) throws IOException { @@ -166,9 +173,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# View Scheduled Time of a Campaign # -# GET /campaigns/{campaign_id}/schedules # +////////////////////////////////////////////////////////////////// +// View Scheduled Time of a Campaign +// GET /campaigns/{campaign_id}/schedules + public class Example { public static void main(String[] args) throws IOException { @@ -187,9 +195,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Unschedule a Scheduled Campaign # -# DELETE /campaigns/{campaign_id}/schedules # +////////////////////////////////////////////////////////////////// +// Unschedule a Scheduled Campaign +// DELETE /campaigns/{campaign_id}/schedules + public class Example { public static void main(String[] args) throws IOException { @@ -208,9 +217,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Send a Campaign # -# POST /campaigns/{campaign_id}/schedules/now # +////////////////////////////////////////////////////////////////// +// Send a Campaign +// POST /campaigns/{campaign_id}/schedules/now + public class Example { public static void main(String[] args) throws IOException { @@ -229,9 +239,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Send a Test Campaign # -# POST /campaigns/{campaign_id}/schedules/test # +////////////////////////////////////////////////////////////////// +// Send a Test Campaign +// POST /campaigns/{campaign_id}/schedules/test + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/categories/categories.java b/examples/categories/categories.java index 5bb6e491..bcc3597e 100644 --- a/examples/categories/categories.java +++ b/examples/categories/categories.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve all categories # -# GET /categories # +////////////////////////////////////////////////////////////////// +// Retrieve all categories +// GET /categories + public class Example { public static void main(String[] args) throws IOException { @@ -37,9 +38,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve Email Statistics for Categories # -# GET /categories/stats # +////////////////////////////////////////////////////////////////// +// Retrieve Email Statistics for Categories +// GET /categories/stats + public class Example { public static void main(String[] args) throws IOException { @@ -66,9 +68,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] # -# GET /categories/stats/sums # +////////////////////////////////////////////////////////////////// +// Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] +// GET /categories/stats/sums + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/clients/clients.java b/examples/clients/clients.java index 720e2fc4..c0c345ca 100644 --- a/examples/clients/clients.java +++ b/examples/clients/clients.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve email statistics by client type. # -# GET /clients/stats # +////////////////////////////////////////////////////////////////// +// Retrieve email statistics by client type. +// GET /clients/stats + public class Example { public static void main(String[] args) throws IOException { @@ -37,9 +38,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve stats by a specific client type. # -# GET /clients/{client_type}/stats # +////////////////////////////////////////////////////////////////// +// Retrieve stats by a specific client type. +// GET /clients/{client_type}/stats + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java index 2ec14522..b269a6bb 100644 --- a/examples/contactdb/contactdb.java +++ b/examples/contactdb/contactdb.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Create a Custom Field # -# POST /contactdb/custom_fields # +////////////////////////////////////////////////////////////////// +// Create a Custom Field +// POST /contactdb/custom_fields + public class Example { public static void main(String[] args) throws IOException { @@ -33,9 +34,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all custom fields # -# GET /contactdb/custom_fields # +////////////////////////////////////////////////////////////////// +// Retrieve all custom fields +// GET /contactdb/custom_fields + public class Example { public static void main(String[] args) throws IOException { @@ -54,9 +56,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a Custom Field # -# GET /contactdb/custom_fields/{custom_field_id} # +////////////////////////////////////////////////////////////////// +// Retrieve a Custom Field +// GET /contactdb/custom_fields/{custom_field_id} + public class Example { public static void main(String[] args) throws IOException { @@ -75,9 +78,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a Custom Field # -# DELETE /contactdb/custom_fields/{custom_field_id} # +////////////////////////////////////////////////////////////////// +// Delete a Custom Field +// DELETE /contactdb/custom_fields/{custom_field_id} + public class Example { public static void main(String[] args) throws IOException { @@ -96,9 +100,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Create a List # -# POST /contactdb/lists # +////////////////////////////////////////////////////////////////// +// Create a List +// POST /contactdb/lists + public class Example { public static void main(String[] args) throws IOException { @@ -118,9 +123,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all lists # -# GET /contactdb/lists # +////////////////////////////////////////////////////////////////// +// Retrieve all lists +// GET /contactdb/lists + public class Example { public static void main(String[] args) throws IOException { @@ -139,9 +145,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete Multiple lists # -# DELETE /contactdb/lists # +////////////////////////////////////////////////////////////////// +// Delete Multiple lists +// DELETE /contactdb/lists + public class Example { public static void main(String[] args) throws IOException { @@ -161,9 +168,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update a List # -# PATCH /contactdb/lists/{list_id} # +////////////////////////////////////////////////////////////////// +// Update a List +// PATCH /contactdb/lists/{list_id} + public class Example { public static void main(String[] args) throws IOException { @@ -186,9 +194,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a single list # -# GET /contactdb/lists/{list_id} # +////////////////////////////////////////////////////////////////// +// Retrieve a single list +// GET /contactdb/lists/{list_id} + public class Example { public static void main(String[] args) throws IOException { @@ -210,9 +219,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a List # -# DELETE /contactdb/lists/{list_id} # +////////////////////////////////////////////////////////////////// +// Delete a List +// DELETE /contactdb/lists/{list_id} + public class Example { public static void main(String[] args) throws IOException { @@ -234,9 +244,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Add Multiple Recipients to a List # -# POST /contactdb/lists/{list_id}/recipients # +////////////////////////////////////////////////////////////////// +// Add Multiple Recipients to a List +// POST /contactdb/lists/{list_id}/recipients + public class Example { public static void main(String[] args) throws IOException { @@ -256,9 +267,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all recipients on a List # -# GET /contactdb/lists/{list_id}/recipients # +////////////////////////////////////////////////////////////////// +// Retrieve all recipients on a List +// GET /contactdb/lists/{list_id}/recipients + public class Example { public static void main(String[] args) throws IOException { @@ -282,9 +294,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Add a Single Recipient to a List # -# POST /contactdb/lists/{list_id}/recipients/{recipient_id} # +////////////////////////////////////////////////////////////////// +// Add a Single Recipient to a List +// POST /contactdb/lists/{list_id}/recipients/{recipient_id} + public class Example { public static void main(String[] args) throws IOException { @@ -303,9 +316,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a Single Recipient from a Single List # -# DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} # +////////////////////////////////////////////////////////////////// +// Delete a Single Recipient from a Single List +// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} + public class Example { public static void main(String[] args) throws IOException { @@ -328,9 +342,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update Recipient # -# PATCH /contactdb/recipients # +////////////////////////////////////////////////////////////////// +// Update Recipient +// PATCH /contactdb/recipients + public class Example { public static void main(String[] args) throws IOException { @@ -350,9 +365,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Add recipients # -# POST /contactdb/recipients # +////////////////////////////////////////////////////////////////// +// Add recipients +// POST /contactdb/recipients + public class Example { public static void main(String[] args) throws IOException { @@ -372,9 +388,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve recipients # -# GET /contactdb/recipients # +////////////////////////////////////////////////////////////////// +// Retrieve recipients +// GET /contactdb/recipients + public class Example { public static void main(String[] args) throws IOException { @@ -397,9 +414,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete Recipient # -# DELETE /contactdb/recipients # +////////////////////////////////////////////////////////////////// +// Delete Recipient +// DELETE /contactdb/recipients + public class Example { public static void main(String[] args) throws IOException { @@ -419,9 +437,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve the count of billable recipients # -# GET /contactdb/recipients/billable_count # +////////////////////////////////////////////////////////////////// +// Retrieve the count of billable recipients +// GET /contactdb/recipients/billable_count + public class Example { public static void main(String[] args) throws IOException { @@ -440,9 +459,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a Count of Recipients # -# GET /contactdb/recipients/count # +////////////////////////////////////////////////////////////////// +// Retrieve a Count of Recipients +// GET /contactdb/recipients/count + public class Example { public static void main(String[] args) throws IOException { @@ -461,9 +481,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve recipients matching search criteria # -# GET /contactdb/recipients/search # +////////////////////////////////////////////////////////////////// +// Retrieve recipients matching search criteria +// GET /contactdb/recipients/search + public class Example { public static void main(String[] args) throws IOException { @@ -485,9 +506,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a single recipient # -# GET /contactdb/recipients/{recipient_id} # +////////////////////////////////////////////////////////////////// +// Retrieve a single recipient +// GET /contactdb/recipients/{recipient_id} + public class Example { public static void main(String[] args) throws IOException { @@ -506,9 +528,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a Recipient # -# DELETE /contactdb/recipients/{recipient_id} # +////////////////////////////////////////////////////////////////// +// Delete a Recipient +// DELETE /contactdb/recipients/{recipient_id} + public class Example { public static void main(String[] args) throws IOException { @@ -527,9 +550,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve the lists that a recipient is on # -# GET /contactdb/recipients/{recipient_id}/lists # +////////////////////////////////////////////////////////////////// +// Retrieve the lists that a recipient is on +// GET /contactdb/recipients/{recipient_id}/lists + public class Example { public static void main(String[] args) throws IOException { @@ -548,9 +572,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve reserved fields # -# GET /contactdb/reserved_fields # +////////////////////////////////////////////////////////////////// +// Retrieve reserved fields +// GET /contactdb/reserved_fields + public class Example { public static void main(String[] args) throws IOException { @@ -569,9 +594,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Create a Segment # -# POST /contactdb/segments # +////////////////////////////////////////////////////////////////// +// Create a Segment +// POST /contactdb/segments + public class Example { public static void main(String[] args) throws IOException { @@ -591,9 +617,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all segments # -# GET /contactdb/segments # +////////////////////////////////////////////////////////////////// +// Retrieve all segments +// GET /contactdb/segments + public class Example { public static void main(String[] args) throws IOException { @@ -612,9 +639,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update a segment # -# PATCH /contactdb/segments/{segment_id} # +////////////////////////////////////////////////////////////////// +// Update a segment +// PATCH /contactdb/segments/{segment_id} + public class Example { public static void main(String[] args) throws IOException { @@ -637,9 +665,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a segment # -# GET /contactdb/segments/{segment_id} # +////////////////////////////////////////////////////////////////// +// Retrieve a segment +// GET /contactdb/segments/{segment_id} + public class Example { public static void main(String[] args) throws IOException { @@ -661,9 +690,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a segment # -# DELETE /contactdb/segments/{segment_id} # +////////////////////////////////////////////////////////////////// +// Delete a segment +// DELETE /contactdb/segments/{segment_id} + public class Example { public static void main(String[] args) throws IOException { @@ -685,9 +715,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve recipients on a segment # -# GET /contactdb/segments/{segment_id}/recipients # +////////////////////////////////////////////////////////////////// +// Retrieve recipients on a segment +// GET /contactdb/segments/{segment_id}/recipients + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/devices/devices.java b/examples/devices/devices.java index 2fa90177..57e49cf1 100644 --- a/examples/devices/devices.java +++ b/examples/devices/devices.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve email statistics by device type. # -# GET /devices/stats # +////////////////////////////////////////////////////////////////// +// Retrieve email statistics by device type. +// GET /devices/stats + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/geo/geo.java b/examples/geo/geo.java index abfec14e..2cb4a814 100644 --- a/examples/geo/geo.java +++ b/examples/geo/geo.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve email statistics by country and state/province. # -# GET /geo/stats # +////////////////////////////////////////////////////////////////// +// Retrieve email statistics by country and state/province. +// GET /geo/stats + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/ips/ips.java b/examples/ips/ips.java index 17465586..94289567 100644 --- a/examples/ips/ips.java +++ b/examples/ips/ips.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve all IP addresses # -# GET /ips # +////////////////////////////////////////////////////////////////// +// Retrieve all IP addresses +// GET /ips + public class Example { public static void main(String[] args) throws IOException { @@ -39,9 +40,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all assigned IPs # -# GET /ips/assigned # +////////////////////////////////////////////////////////////////// +// Retrieve all assigned IPs +// GET /ips/assigned + public class Example { public static void main(String[] args) throws IOException { @@ -60,9 +62,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Create an IP pool. # -# POST /ips/pools # +////////////////////////////////////////////////////////////////// +// Create an IP pool. +// POST /ips/pools + public class Example { public static void main(String[] args) throws IOException { @@ -82,9 +85,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all IP pools. # -# GET /ips/pools # +////////////////////////////////////////////////////////////////// +// Retrieve all IP pools. +// GET /ips/pools + public class Example { public static void main(String[] args) throws IOException { @@ -103,9 +107,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update an IP pools name. # -# PUT /ips/pools/{pool_name} # +////////////////////////////////////////////////////////////////// +// Update an IP pools name. +// PUT /ips/pools/{pool_name} + public class Example { public static void main(String[] args) throws IOException { @@ -125,9 +130,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all IPs in a specified pool. # -# GET /ips/pools/{pool_name} # +////////////////////////////////////////////////////////////////// +// Retrieve all IPs in a specified pool. +// GET /ips/pools/{pool_name} + public class Example { public static void main(String[] args) throws IOException { @@ -146,9 +152,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete an IP pool. # -# DELETE /ips/pools/{pool_name} # +////////////////////////////////////////////////////////////////// +// Delete an IP pool. +// DELETE /ips/pools/{pool_name} + public class Example { public static void main(String[] args) throws IOException { @@ -167,9 +174,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Add an IP address to a pool # -# POST /ips/pools/{pool_name}/ips # +////////////////////////////////////////////////////////////////// +// Add an IP address to a pool +// POST /ips/pools/{pool_name}/ips + public class Example { public static void main(String[] args) throws IOException { @@ -189,9 +197,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Remove an IP address from a pool. # -# DELETE /ips/pools/{pool_name}/ips/{ip} # +////////////////////////////////////////////////////////////////// +// Remove an IP address from a pool. +// DELETE /ips/pools/{pool_name}/ips/{ip} + public class Example { public static void main(String[] args) throws IOException { @@ -210,9 +219,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Add an IP to warmup # -# POST /ips/warmup # +////////////////////////////////////////////////////////////////// +// Add an IP to warmup +// POST /ips/warmup + public class Example { public static void main(String[] args) throws IOException { @@ -232,9 +242,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all IPs currently in warmup # -# GET /ips/warmup # +////////////////////////////////////////////////////////////////// +// Retrieve all IPs currently in warmup +// GET /ips/warmup + public class Example { public static void main(String[] args) throws IOException { @@ -253,9 +264,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve warmup status for a specific IP address # -# GET /ips/warmup/{ip_address} # +////////////////////////////////////////////////////////////////// +// Retrieve warmup status for a specific IP address +// GET /ips/warmup/{ip_address} + public class Example { public static void main(String[] args) throws IOException { @@ -274,9 +286,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Remove an IP from warmup # -# DELETE /ips/warmup/{ip_address} # +////////////////////////////////////////////////////////////////// +// Remove an IP from warmup +// DELETE /ips/warmup/{ip_address} + public class Example { public static void main(String[] args) throws IOException { @@ -295,9 +308,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all IP pools an IP address belongs to # -# GET /ips/{ip_address} # +////////////////////////////////////////////////////////////////// +// Retrieve all IP pools an IP address belongs to +// GET /ips/{ip_address} + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/mail/mail.java b/examples/mail/mail.java index 2594f987..cc65ed8e 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Create a batch ID # -# POST /mail/batch # +////////////////////////////////////////////////////////////////// +// Create a batch ID +// POST /mail/batch + public class Example { public static void main(String[] args) throws IOException { @@ -32,9 +33,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Validate batch ID # -# GET /mail/batch/{batch_id} # +////////////////////////////////////////////////////////////////// +// Validate batch ID +// GET /mail/batch/{batch_id} + public class Example { public static void main(String[] args) throws IOException { @@ -53,9 +55,11 @@ public static void main(String[] args) throws IOException { } } -################################################## -# v3 Mail Send Beta # -# POST /mail/send/beta # +////////////////////////////////////////////////////////////////// +// v3 Mail Send Beta +// POST /mail/send/beta + +// This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/v3beta/src/main/java/com/sendgrid/helpers/README.md). public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/mailboxproviders/mailboxproviders.java b/examples/mailboxproviders/mailboxproviders.java index cf0a5e49..7f1c2d65 100644 --- a/examples/mailboxproviders/mailboxproviders.java +++ b/examples/mailboxproviders/mailboxproviders.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve email statistics by mailbox provider. # -# GET /mailbox_providers/stats # +////////////////////////////////////////////////////////////////// +// Retrieve email statistics by mailbox provider. +// GET /mailbox_providers/stats + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java index 9967124f..ffdfe4a7 100644 --- a/examples/mailsettings/mailsettings.java +++ b/examples/mailsettings/mailsettings.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve all mail settings # -# GET /mail_settings # +////////////////////////////////////////////////////////////////// +// Retrieve all mail settings +// GET /mail_settings + public class Example { public static void main(String[] args) throws IOException { @@ -36,9 +37,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update address whitelist mail settings # -# PATCH /mail_settings/address_whitelist # +////////////////////////////////////////////////////////////////// +// Update address whitelist mail settings +// PATCH /mail_settings/address_whitelist + public class Example { public static void main(String[] args) throws IOException { @@ -58,9 +60,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve address whitelist mail settings # -# GET /mail_settings/address_whitelist # +////////////////////////////////////////////////////////////////// +// Retrieve address whitelist mail settings +// GET /mail_settings/address_whitelist + public class Example { public static void main(String[] args) throws IOException { @@ -79,9 +82,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update BCC mail settings # -# PATCH /mail_settings/bcc # +////////////////////////////////////////////////////////////////// +// Update BCC mail settings +// PATCH /mail_settings/bcc + public class Example { public static void main(String[] args) throws IOException { @@ -101,9 +105,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all BCC mail settings # -# GET /mail_settings/bcc # +////////////////////////////////////////////////////////////////// +// Retrieve all BCC mail settings +// GET /mail_settings/bcc + public class Example { public static void main(String[] args) throws IOException { @@ -122,9 +127,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update bounce purge mail settings # -# PATCH /mail_settings/bounce_purge # +////////////////////////////////////////////////////////////////// +// Update bounce purge mail settings +// PATCH /mail_settings/bounce_purge + public class Example { public static void main(String[] args) throws IOException { @@ -144,9 +150,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve bounce purge mail settings # -# GET /mail_settings/bounce_purge # +////////////////////////////////////////////////////////////////// +// Retrieve bounce purge mail settings +// GET /mail_settings/bounce_purge + public class Example { public static void main(String[] args) throws IOException { @@ -165,9 +172,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update footer mail settings # -# PATCH /mail_settings/footer # +////////////////////////////////////////////////////////////////// +// Update footer mail settings +// PATCH /mail_settings/footer + public class Example { public static void main(String[] args) throws IOException { @@ -187,9 +195,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve footer mail settings # -# GET /mail_settings/footer # +////////////////////////////////////////////////////////////////// +// Retrieve footer mail settings +// GET /mail_settings/footer + public class Example { public static void main(String[] args) throws IOException { @@ -208,9 +217,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update forward bounce mail settings # -# PATCH /mail_settings/forward_bounce # +////////////////////////////////////////////////////////////////// +// Update forward bounce mail settings +// PATCH /mail_settings/forward_bounce + public class Example { public static void main(String[] args) throws IOException { @@ -230,9 +240,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve forward bounce mail settings # -# GET /mail_settings/forward_bounce # +////////////////////////////////////////////////////////////////// +// Retrieve forward bounce mail settings +// GET /mail_settings/forward_bounce + public class Example { public static void main(String[] args) throws IOException { @@ -251,9 +262,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update forward spam mail settings # -# PATCH /mail_settings/forward_spam # +////////////////////////////////////////////////////////////////// +// Update forward spam mail settings +// PATCH /mail_settings/forward_spam + public class Example { public static void main(String[] args) throws IOException { @@ -273,9 +285,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve forward spam mail settings # -# GET /mail_settings/forward_spam # +////////////////////////////////////////////////////////////////// +// Retrieve forward spam mail settings +// GET /mail_settings/forward_spam + public class Example { public static void main(String[] args) throws IOException { @@ -294,9 +307,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update plain content mail settings # -# PATCH /mail_settings/plain_content # +////////////////////////////////////////////////////////////////// +// Update plain content mail settings +// PATCH /mail_settings/plain_content + public class Example { public static void main(String[] args) throws IOException { @@ -316,9 +330,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve plain content mail settings # -# GET /mail_settings/plain_content # +////////////////////////////////////////////////////////////////// +// Retrieve plain content mail settings +// GET /mail_settings/plain_content + public class Example { public static void main(String[] args) throws IOException { @@ -337,9 +352,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update spam check mail settings # -# PATCH /mail_settings/spam_check # +////////////////////////////////////////////////////////////////// +// Update spam check mail settings +// PATCH /mail_settings/spam_check + public class Example { public static void main(String[] args) throws IOException { @@ -359,9 +375,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve spam check mail settings # -# GET /mail_settings/spam_check # +////////////////////////////////////////////////////////////////// +// Retrieve spam check mail settings +// GET /mail_settings/spam_check + public class Example { public static void main(String[] args) throws IOException { @@ -380,9 +397,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update template mail settings # -# PATCH /mail_settings/template # +////////////////////////////////////////////////////////////////// +// Update template mail settings +// PATCH /mail_settings/template + public class Example { public static void main(String[] args) throws IOException { @@ -402,9 +420,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve legacy template mail settings # -# GET /mail_settings/template # +////////////////////////////////////////////////////////////////// +// Retrieve legacy template mail settings +// GET /mail_settings/template + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/partnersettings/partnersettings.java b/examples/partnersettings/partnersettings.java index 35b01eb0..01018524 100644 --- a/examples/partnersettings/partnersettings.java +++ b/examples/partnersettings/partnersettings.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Returns a list of all partner settings. # -# GET /partner_settings # +////////////////////////////////////////////////////////////////// +// Returns a list of all partner settings. +// GET /partner_settings + public class Example { public static void main(String[] args) throws IOException { @@ -36,9 +37,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Updates New Relic partner settings. # -# PATCH /partner_settings/new_relic # +////////////////////////////////////////////////////////////////// +// Updates New Relic partner settings. +// PATCH /partner_settings/new_relic + public class Example { public static void main(String[] args) throws IOException { @@ -58,9 +60,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Returns all New Relic partner settings. # -# GET /partner_settings/new_relic # +////////////////////////////////////////////////////////////////// +// Returns all New Relic partner settings. +// GET /partner_settings/new_relic + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/scopes/scopes.java b/examples/scopes/scopes.java index 7b5bd4f3..194782b1 100644 --- a/examples/scopes/scopes.java +++ b/examples/scopes/scopes.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve a list of scopes for which this user has access. # -# GET /scopes # +////////////////////////////////////////////////////////////////// +// Retrieve a list of scopes for which this user has access. +// GET /scopes + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/stats/stats.java b/examples/stats/stats.java index e8a85224..0a406d53 100644 --- a/examples/stats/stats.java +++ b/examples/stats/stats.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve global email statistics # -# GET /stats # +////////////////////////////////////////////////////////////////// +// Retrieve global email statistics +// GET /stats + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java index 5ec49c01..dfe5d1dd 100644 --- a/examples/subusers/subusers.java +++ b/examples/subusers/subusers.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Create Subuser # -# POST /subusers # +////////////////////////////////////////////////////////////////// +// Create Subuser +// POST /subusers + public class Example { public static void main(String[] args) throws IOException { @@ -33,9 +34,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# List all Subusers # -# GET /subusers # +////////////////////////////////////////////////////////////////// +// List all Subusers +// GET /subusers + public class Example { public static void main(String[] args) throws IOException { @@ -59,9 +61,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve Subuser Reputations # -# GET /subusers/reputations # +////////////////////////////////////////////////////////////////// +// Retrieve Subuser Reputations +// GET /subusers/reputations + public class Example { public static void main(String[] args) throws IOException { @@ -83,9 +86,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve email statistics for your subusers. # -# GET /subusers/stats # +////////////////////////////////////////////////////////////////// +// Retrieve email statistics for your subusers. +// GET /subusers/stats + public class Example { public static void main(String[] args) throws IOException { @@ -112,9 +116,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve monthly stats for all subusers # -# GET /subusers/stats/monthly # +////////////////////////////////////////////////////////////////// +// Retrieve monthly stats for all subusers +// GET /subusers/stats/monthly + public class Example { public static void main(String[] args) throws IOException { @@ -141,9 +146,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve the totals for each email statistic metric for all subusers. # -# GET /subusers/stats/sums # +////////////////////////////////////////////////////////////////// +// Retrieve the totals for each email statistic metric for all subusers. +// GET /subusers/stats/sums + public class Example { public static void main(String[] args) throws IOException { @@ -171,9 +177,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Enable/disable a subuser # -# PATCH /subusers/{subuser_name} # +////////////////////////////////////////////////////////////////// +// Enable/disable a subuser +// PATCH /subusers/{subuser_name} + public class Example { public static void main(String[] args) throws IOException { @@ -193,9 +200,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a subuser # -# DELETE /subusers/{subuser_name} # +////////////////////////////////////////////////////////////////// +// Delete a subuser +// DELETE /subusers/{subuser_name} + public class Example { public static void main(String[] args) throws IOException { @@ -214,9 +222,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update IPs assigned to a subuser # -# PUT /subusers/{subuser_name}/ips # +////////////////////////////////////////////////////////////////// +// Update IPs assigned to a subuser +// PUT /subusers/{subuser_name}/ips + public class Example { public static void main(String[] args) throws IOException { @@ -236,9 +245,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update Monitor Settings for a subuser # -# PUT /subusers/{subuser_name}/monitor # +////////////////////////////////////////////////////////////////// +// Update Monitor Settings for a subuser +// PUT /subusers/{subuser_name}/monitor + public class Example { public static void main(String[] args) throws IOException { @@ -258,9 +268,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Create monitor settings # -# POST /subusers/{subuser_name}/monitor # +////////////////////////////////////////////////////////////////// +// Create monitor settings +// POST /subusers/{subuser_name}/monitor + public class Example { public static void main(String[] args) throws IOException { @@ -280,9 +291,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve monitor settings for a subuser # -# GET /subusers/{subuser_name}/monitor # +////////////////////////////////////////////////////////////////// +// Retrieve monitor settings for a subuser +// GET /subusers/{subuser_name}/monitor + public class Example { public static void main(String[] args) throws IOException { @@ -301,9 +313,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete monitor settings # -# DELETE /subusers/{subuser_name}/monitor # +////////////////////////////////////////////////////////////////// +// Delete monitor settings +// DELETE /subusers/{subuser_name}/monitor + public class Example { public static void main(String[] args) throws IOException { @@ -322,9 +335,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve the monthly email statistics for a single subuser # -# GET /subusers/{subuser_name}/stats/monthly # +////////////////////////////////////////////////////////////////// +// Retrieve the monthly email statistics for a single subuser +// GET /subusers/{subuser_name}/stats/monthly + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java index e143d471..ca42a126 100644 --- a/examples/suppression/suppression.java +++ b/examples/suppression/suppression.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve all blocks # -# GET /suppression/blocks # +////////////////////////////////////////////////////////////////// +// Retrieve all blocks +// GET /suppression/blocks + public class Example { public static void main(String[] args) throws IOException { @@ -38,9 +39,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete blocks # -# DELETE /suppression/blocks # +////////////////////////////////////////////////////////////////// +// Delete blocks +// DELETE /suppression/blocks + public class Example { public static void main(String[] args) throws IOException { @@ -60,9 +62,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a specific block # -# GET /suppression/blocks/{email} # +////////////////////////////////////////////////////////////////// +// Retrieve a specific block +// GET /suppression/blocks/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -81,9 +84,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a specific block # -# DELETE /suppression/blocks/{email} # +////////////////////////////////////////////////////////////////// +// Delete a specific block +// DELETE /suppression/blocks/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -102,9 +106,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all bounces # -# GET /suppression/bounces # +////////////////////////////////////////////////////////////////// +// Retrieve all bounces +// GET /suppression/bounces + public class Example { public static void main(String[] args) throws IOException { @@ -127,9 +132,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete bounces # -# DELETE /suppression/bounces # +////////////////////////////////////////////////////////////////// +// Delete bounces +// DELETE /suppression/bounces + public class Example { public static void main(String[] args) throws IOException { @@ -149,9 +155,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a Bounce # -# GET /suppression/bounces/{email} # +////////////////////////////////////////////////////////////////// +// Retrieve a Bounce +// GET /suppression/bounces/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -170,9 +177,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a bounce # -# DELETE /suppression/bounces/{email} # +////////////////////////////////////////////////////////////////// +// Delete a bounce +// DELETE /suppression/bounces/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -194,9 +202,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all invalid emails # -# GET /suppression/invalid_emails # +////////////////////////////////////////////////////////////////// +// Retrieve all invalid emails +// GET /suppression/invalid_emails + public class Example { public static void main(String[] args) throws IOException { @@ -221,9 +230,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete invalid emails # -# DELETE /suppression/invalid_emails # +////////////////////////////////////////////////////////////////// +// Delete invalid emails +// DELETE /suppression/invalid_emails + public class Example { public static void main(String[] args) throws IOException { @@ -243,9 +253,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a specific invalid email # -# GET /suppression/invalid_emails/{email} # +////////////////////////////////////////////////////////////////// +// Retrieve a specific invalid email +// GET /suppression/invalid_emails/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -264,9 +275,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a specific invalid email # -# DELETE /suppression/invalid_emails/{email} # +////////////////////////////////////////////////////////////////// +// Delete a specific invalid email +// DELETE /suppression/invalid_emails/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -285,9 +297,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a specific spam report # -# GET /suppression/spam_report/{email} # +////////////////////////////////////////////////////////////////// +// Retrieve a specific spam report +// GET /suppression/spam_report/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -306,9 +319,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a specific spam report # -# DELETE /suppression/spam_report/{email} # +////////////////////////////////////////////////////////////////// +// Delete a specific spam report +// DELETE /suppression/spam_report/{email} + public class Example { public static void main(String[] args) throws IOException { @@ -327,9 +341,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all spam reports # -# GET /suppression/spam_reports # +////////////////////////////////////////////////////////////////// +// Retrieve all spam reports +// GET /suppression/spam_reports + public class Example { public static void main(String[] args) throws IOException { @@ -354,9 +369,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete spam reports # -# DELETE /suppression/spam_reports # +////////////////////////////////////////////////////////////////// +// Delete spam reports +// DELETE /suppression/spam_reports + public class Example { public static void main(String[] args) throws IOException { @@ -376,9 +392,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all global suppressions # -# GET /suppression/unsubscribes # +////////////////////////////////////////////////////////////////// +// Retrieve all global suppressions +// GET /suppression/unsubscribes + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/templates/templates.java b/examples/templates/templates.java index e073a8b2..3f1e32aa 100644 --- a/examples/templates/templates.java +++ b/examples/templates/templates.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Create a transactional template. # -# POST /templates # +////////////////////////////////////////////////////////////////// +// Create a transactional template. +// POST /templates + public class Example { public static void main(String[] args) throws IOException { @@ -33,9 +34,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all transactional templates. # -# GET /templates # +////////////////////////////////////////////////////////////////// +// Retrieve all transactional templates. +// GET /templates + public class Example { public static void main(String[] args) throws IOException { @@ -54,9 +56,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Edit a transactional template. # -# PATCH /templates/{template_id} # +////////////////////////////////////////////////////////////////// +// Edit a transactional template. +// PATCH /templates/{template_id} + public class Example { public static void main(String[] args) throws IOException { @@ -76,9 +79,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a single transactional template. # -# GET /templates/{template_id} # +////////////////////////////////////////////////////////////////// +// Retrieve a single transactional template. +// GET /templates/{template_id} + public class Example { public static void main(String[] args) throws IOException { @@ -97,9 +101,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a template. # -# DELETE /templates/{template_id} # +////////////////////////////////////////////////////////////////// +// Delete a template. +// DELETE /templates/{template_id} + public class Example { public static void main(String[] args) throws IOException { @@ -118,9 +123,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Create a new transactional template version. # -# POST /templates/{template_id}/versions # +////////////////////////////////////////////////////////////////// +// Create a new transactional template version. +// POST /templates/{template_id}/versions + public class Example { public static void main(String[] args) throws IOException { @@ -140,9 +146,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Edit a transactional template version. # -# PATCH /templates/{template_id}/versions/{version_id} # +////////////////////////////////////////////////////////////////// +// Edit a transactional template version. +// PATCH /templates/{template_id}/versions/{version_id} + public class Example { public static void main(String[] args) throws IOException { @@ -162,9 +169,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a specific transactional template version. # -# GET /templates/{template_id}/versions/{version_id} # +////////////////////////////////////////////////////////////////// +// Retrieve a specific transactional template version. +// GET /templates/{template_id}/versions/{version_id} + public class Example { public static void main(String[] args) throws IOException { @@ -183,9 +191,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a transactional template version. # -# DELETE /templates/{template_id}/versions/{version_id} # +////////////////////////////////////////////////////////////////// +// Delete a transactional template version. +// DELETE /templates/{template_id}/versions/{version_id} + public class Example { public static void main(String[] args) throws IOException { @@ -204,9 +213,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Activate a transactional template version. # -# POST /templates/{template_id}/versions/{version_id}/activate # +////////////////////////////////////////////////////////////////// +// Activate a transactional template version. +// POST /templates/{template_id}/versions/{version_id}/activate + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/trackingsettings/trackingsettings.java b/examples/trackingsettings/trackingsettings.java index 8764b380..41bba5b6 100644 --- a/examples/trackingsettings/trackingsettings.java +++ b/examples/trackingsettings/trackingsettings.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Retrieve Tracking Settings # -# GET /tracking_settings # +////////////////////////////////////////////////////////////////// +// Retrieve Tracking Settings +// GET /tracking_settings + public class Example { public static void main(String[] args) throws IOException { @@ -36,9 +37,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update Click Tracking Settings # -# PATCH /tracking_settings/click # +////////////////////////////////////////////////////////////////// +// Update Click Tracking Settings +// PATCH /tracking_settings/click + public class Example { public static void main(String[] args) throws IOException { @@ -58,9 +60,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve Click Track Settings # -# GET /tracking_settings/click # +////////////////////////////////////////////////////////////////// +// Retrieve Click Track Settings +// GET /tracking_settings/click + public class Example { public static void main(String[] args) throws IOException { @@ -79,9 +82,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update Google Analytics Settings # -# PATCH /tracking_settings/google_analytics # +////////////////////////////////////////////////////////////////// +// Update Google Analytics Settings +// PATCH /tracking_settings/google_analytics + public class Example { public static void main(String[] args) throws IOException { @@ -101,9 +105,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve Google Analytics Settings # -# GET /tracking_settings/google_analytics # +////////////////////////////////////////////////////////////////// +// Retrieve Google Analytics Settings +// GET /tracking_settings/google_analytics + public class Example { public static void main(String[] args) throws IOException { @@ -122,9 +127,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update Open Tracking Settings # -# PATCH /tracking_settings/open # +////////////////////////////////////////////////////////////////// +// Update Open Tracking Settings +// PATCH /tracking_settings/open + public class Example { public static void main(String[] args) throws IOException { @@ -144,9 +150,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Get Open Tracking Settings # -# GET /tracking_settings/open # +////////////////////////////////////////////////////////////////// +// Get Open Tracking Settings +// GET /tracking_settings/open + public class Example { public static void main(String[] args) throws IOException { @@ -165,9 +172,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update Subscription Tracking Settings # -# PATCH /tracking_settings/subscription # +////////////////////////////////////////////////////////////////// +// Update Subscription Tracking Settings +// PATCH /tracking_settings/subscription + public class Example { public static void main(String[] args) throws IOException { @@ -187,9 +195,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve Subscription Tracking Settings # -# GET /tracking_settings/subscription # +////////////////////////////////////////////////////////////////// +// Retrieve Subscription Tracking Settings +// GET /tracking_settings/subscription + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/user/user.java b/examples/user/user.java index bc3c2796..c178ac49 100644 --- a/examples/user/user.java +++ b/examples/user/user.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Get a user's account information. # -# GET /user/account # +////////////////////////////////////////////////////////////////// +// Get a user's account information. +// GET /user/account + public class Example { public static void main(String[] args) throws IOException { @@ -32,9 +33,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve your credit balance # -# GET /user/credits # +////////////////////////////////////////////////////////////////// +// Retrieve your credit balance +// GET /user/credits + public class Example { public static void main(String[] args) throws IOException { @@ -53,9 +55,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update your account email address # -# PUT /user/email # +////////////////////////////////////////////////////////////////// +// Update your account email address +// PUT /user/email + public class Example { public static void main(String[] args) throws IOException { @@ -75,9 +78,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve your account email address # -# GET /user/email # +////////////////////////////////////////////////////////////////// +// Retrieve your account email address +// GET /user/email + public class Example { public static void main(String[] args) throws IOException { @@ -96,9 +100,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update your password # -# PUT /user/password # +////////////////////////////////////////////////////////////////// +// Update your password +// PUT /user/password + public class Example { public static void main(String[] args) throws IOException { @@ -118,9 +123,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update a user's profile # -# PATCH /user/profile # +////////////////////////////////////////////////////////////////// +// Update a user's profile +// PATCH /user/profile + public class Example { public static void main(String[] args) throws IOException { @@ -140,9 +146,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Get a user's profile # -# GET /user/profile # +////////////////////////////////////////////////////////////////// +// Get a user's profile +// GET /user/profile + public class Example { public static void main(String[] args) throws IOException { @@ -161,9 +168,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Cancel or pause a scheduled send # -# POST /user/scheduled_sends # +////////////////////////////////////////////////////////////////// +// Cancel or pause a scheduled send +// POST /user/scheduled_sends + public class Example { public static void main(String[] args) throws IOException { @@ -183,9 +191,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all scheduled sends # -# GET /user/scheduled_sends # +////////////////////////////////////////////////////////////////// +// Retrieve all scheduled sends +// GET /user/scheduled_sends + public class Example { public static void main(String[] args) throws IOException { @@ -204,9 +213,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update user scheduled send information # -# PATCH /user/scheduled_sends/{batch_id} # +////////////////////////////////////////////////////////////////// +// Update user scheduled send information +// PATCH /user/scheduled_sends/{batch_id} + public class Example { public static void main(String[] args) throws IOException { @@ -226,9 +236,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve scheduled send # -# GET /user/scheduled_sends/{batch_id} # +////////////////////////////////////////////////////////////////// +// Retrieve scheduled send +// GET /user/scheduled_sends/{batch_id} + public class Example { public static void main(String[] args) throws IOException { @@ -247,9 +258,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a cancellation or pause of a scheduled send # -# DELETE /user/scheduled_sends/{batch_id} # +////////////////////////////////////////////////////////////////// +// Delete a cancellation or pause of a scheduled send +// DELETE /user/scheduled_sends/{batch_id} + public class Example { public static void main(String[] args) throws IOException { @@ -268,9 +280,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update Enforced TLS settings # -# PATCH /user/settings/enforced_tls # +////////////////////////////////////////////////////////////////// +// Update Enforced TLS settings +// PATCH /user/settings/enforced_tls + public class Example { public static void main(String[] args) throws IOException { @@ -290,9 +303,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve current Enforced TLS settings. # -# GET /user/settings/enforced_tls # +////////////////////////////////////////////////////////////////// +// Retrieve current Enforced TLS settings. +// GET /user/settings/enforced_tls + public class Example { public static void main(String[] args) throws IOException { @@ -311,9 +325,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update your username # -# PUT /user/username # +////////////////////////////////////////////////////////////////// +// Update your username +// PUT /user/username + public class Example { public static void main(String[] args) throws IOException { @@ -333,9 +348,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve your username # -# GET /user/username # +////////////////////////////////////////////////////////////////// +// Retrieve your username +// GET /user/username + public class Example { public static void main(String[] args) throws IOException { @@ -354,9 +370,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update Event Notification Settings # -# PATCH /user/webhooks/event/settings # +////////////////////////////////////////////////////////////////// +// Update Event Notification Settings +// PATCH /user/webhooks/event/settings + public class Example { public static void main(String[] args) throws IOException { @@ -376,9 +393,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve Event Webhook settings # -# GET /user/webhooks/event/settings # +////////////////////////////////////////////////////////////////// +// Retrieve Event Webhook settings +// GET /user/webhooks/event/settings + public class Example { public static void main(String[] args) throws IOException { @@ -397,9 +415,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Test Event Notification Settings # -# POST /user/webhooks/event/test # +////////////////////////////////////////////////////////////////// +// Test Event Notification Settings +// POST /user/webhooks/event/test + public class Example { public static void main(String[] args) throws IOException { @@ -419,9 +438,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve Parse Webhook settings # -# GET /user/webhooks/parse/settings # +////////////////////////////////////////////////////////////////// +// Retrieve Parse Webhook settings +// GET /user/webhooks/parse/settings + public class Example { public static void main(String[] args) throws IOException { @@ -440,9 +460,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieves Inbound Parse Webhook statistics. # -# GET /user/webhooks/parse/stats # +////////////////////////////////////////////////////////////////// +// Retrieves Inbound Parse Webhook statistics. +// GET /user/webhooks/parse/stats + public class Example { public static void main(String[] args) throws IOException { diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java index 965190db..23adf16e 100644 --- a/examples/whitelabel/whitelabel.java +++ b/examples/whitelabel/whitelabel.java @@ -11,9 +11,10 @@ import java.util.HashMap; import java.util.Map; -################################################## -# Create a domain whitelabel. # -# POST /whitelabel/domains # +////////////////////////////////////////////////////////////////// +// Create a domain whitelabel. +// POST /whitelabel/domains + public class Example { public static void main(String[] args) throws IOException { @@ -33,9 +34,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# List all domain whitelabels. # -# GET /whitelabel/domains # +////////////////////////////////////////////////////////////////// +// List all domain whitelabels. +// GET /whitelabel/domains + public class Example { public static void main(String[] args) throws IOException { @@ -61,9 +63,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Get the default domain whitelabel. # -# GET /whitelabel/domains/default # +////////////////////////////////////////////////////////////////// +// Get the default domain whitelabel. +// GET /whitelabel/domains/default + public class Example { public static void main(String[] args) throws IOException { @@ -82,9 +85,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# List the domain whitelabel associated with the given user. # -# GET /whitelabel/domains/subuser # +////////////////////////////////////////////////////////////////// +// List the domain whitelabel associated with the given user. +// GET /whitelabel/domains/subuser + public class Example { public static void main(String[] args) throws IOException { @@ -103,9 +107,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Disassociate a domain whitelabel from a given user. # -# DELETE /whitelabel/domains/subuser # +////////////////////////////////////////////////////////////////// +// Disassociate a domain whitelabel from a given user. +// DELETE /whitelabel/domains/subuser + public class Example { public static void main(String[] args) throws IOException { @@ -124,9 +129,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update a domain whitelabel. # -# PATCH /whitelabel/domains/{domain_id} # +////////////////////////////////////////////////////////////////// +// Update a domain whitelabel. +// PATCH /whitelabel/domains/{domain_id} + public class Example { public static void main(String[] args) throws IOException { @@ -146,9 +152,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a domain whitelabel. # -# GET /whitelabel/domains/{domain_id} # +////////////////////////////////////////////////////////////////// +// Retrieve a domain whitelabel. +// GET /whitelabel/domains/{domain_id} + public class Example { public static void main(String[] args) throws IOException { @@ -167,9 +174,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a domain whitelabel. # -# DELETE /whitelabel/domains/{domain_id} # +////////////////////////////////////////////////////////////////// +// Delete a domain whitelabel. +// DELETE /whitelabel/domains/{domain_id} + public class Example { public static void main(String[] args) throws IOException { @@ -188,9 +196,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Associate a domain whitelabel with a given user. # -# POST /whitelabel/domains/{domain_id}/subuser # +////////////////////////////////////////////////////////////////// +// Associate a domain whitelabel with a given user. +// POST /whitelabel/domains/{domain_id}/subuser + public class Example { public static void main(String[] args) throws IOException { @@ -210,9 +219,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Add an IP to a domain whitelabel. # -# POST /whitelabel/domains/{id}/ips # +////////////////////////////////////////////////////////////////// +// Add an IP to a domain whitelabel. +// POST /whitelabel/domains/{id}/ips + public class Example { public static void main(String[] args) throws IOException { @@ -232,9 +242,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Remove an IP from a domain whitelabel. # -# DELETE /whitelabel/domains/{id}/ips/{ip} # +////////////////////////////////////////////////////////////////// +// Remove an IP from a domain whitelabel. +// DELETE /whitelabel/domains/{id}/ips/{ip} + public class Example { public static void main(String[] args) throws IOException { @@ -253,9 +264,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Validate a domain whitelabel. # -# POST /whitelabel/domains/{id}/validate # +////////////////////////////////////////////////////////////////// +// Validate a domain whitelabel. +// POST /whitelabel/domains/{id}/validate + public class Example { public static void main(String[] args) throws IOException { @@ -274,9 +286,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Create an IP whitelabel # -# POST /whitelabel/ips # +////////////////////////////////////////////////////////////////// +// Create an IP whitelabel +// POST /whitelabel/ips + public class Example { public static void main(String[] args) throws IOException { @@ -296,9 +309,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all IP whitelabels # -# GET /whitelabel/ips # +////////////////////////////////////////////////////////////////// +// Retrieve all IP whitelabels +// GET /whitelabel/ips + public class Example { public static void main(String[] args) throws IOException { @@ -322,9 +336,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve an IP whitelabel # -# GET /whitelabel/ips/{id} # +////////////////////////////////////////////////////////////////// +// Retrieve an IP whitelabel +// GET /whitelabel/ips/{id} + public class Example { public static void main(String[] args) throws IOException { @@ -343,9 +358,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete an IP whitelabel # -# DELETE /whitelabel/ips/{id} # +////////////////////////////////////////////////////////////////// +// Delete an IP whitelabel +// DELETE /whitelabel/ips/{id} + public class Example { public static void main(String[] args) throws IOException { @@ -364,9 +380,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Validate an IP whitelabel # -# POST /whitelabel/ips/{id}/validate # +////////////////////////////////////////////////////////////////// +// Validate an IP whitelabel +// POST /whitelabel/ips/{id}/validate + public class Example { public static void main(String[] args) throws IOException { @@ -385,9 +402,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Create a Link Whitelabel # -# POST /whitelabel/links # +////////////////////////////////////////////////////////////////// +// Create a Link Whitelabel +// POST /whitelabel/links + public class Example { public static void main(String[] args) throws IOException { @@ -411,9 +429,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve all link whitelabels # -# GET /whitelabel/links # +////////////////////////////////////////////////////////////////// +// Retrieve all link whitelabels +// GET /whitelabel/links + public class Example { public static void main(String[] args) throws IOException { @@ -435,9 +454,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a Default Link Whitelabel # -# GET /whitelabel/links/default # +////////////////////////////////////////////////////////////////// +// Retrieve a Default Link Whitelabel +// GET /whitelabel/links/default + public class Example { public static void main(String[] args) throws IOException { @@ -459,9 +479,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve Associated Link Whitelabel # -# GET /whitelabel/links/subuser # +////////////////////////////////////////////////////////////////// +// Retrieve Associated Link Whitelabel +// GET /whitelabel/links/subuser + public class Example { public static void main(String[] args) throws IOException { @@ -483,9 +504,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Disassociate a Link Whitelabel # -# DELETE /whitelabel/links/subuser # +////////////////////////////////////////////////////////////////// +// Disassociate a Link Whitelabel +// DELETE /whitelabel/links/subuser + public class Example { public static void main(String[] args) throws IOException { @@ -507,9 +529,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Update a Link Whitelabel # -# PATCH /whitelabel/links/{id} # +////////////////////////////////////////////////////////////////// +// Update a Link Whitelabel +// PATCH /whitelabel/links/{id} + public class Example { public static void main(String[] args) throws IOException { @@ -529,9 +552,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Retrieve a Link Whitelabel # -# GET /whitelabel/links/{id} # +////////////////////////////////////////////////////////////////// +// Retrieve a Link Whitelabel +// GET /whitelabel/links/{id} + public class Example { public static void main(String[] args) throws IOException { @@ -550,9 +574,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Delete a Link Whitelabel # -# DELETE /whitelabel/links/{id} # +////////////////////////////////////////////////////////////////// +// Delete a Link Whitelabel +// DELETE /whitelabel/links/{id} + public class Example { public static void main(String[] args) throws IOException { @@ -571,9 +596,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Validate a Link Whitelabel # -# POST /whitelabel/links/{id}/validate # +////////////////////////////////////////////////////////////////// +// Validate a Link Whitelabel +// POST /whitelabel/links/{id}/validate + public class Example { public static void main(String[] args) throws IOException { @@ -592,9 +618,10 @@ public static void main(String[] args) throws IOException { } } -################################################## -# Associate a Link Whitelabel # -# POST /whitelabel/links/{link_id}/subuser # +////////////////////////////////////////////////////////////////// +// Associate a Link Whitelabel +// POST /whitelabel/links/{link_id}/subuser + public class Example { public static void main(String[] args) throws IOException { From 20c0bc6361f1fd915e4f485acd54100d1f6d5d52 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 8 Jun 2016 20:02:42 -0700 Subject: [PATCH 037/439] Updated dependency --- build.gradle | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 1dc66dbf..5f099f96 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ buildscript { } dependencies { - compile 'com.sendgrid:java-http-client:2.0.0' + compile 'com.sendgrid:java-http-client:2.1.0' compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' diff --git a/pom.xml b/pom.xml index 02acf4f1..8d41fb8f 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ com.sendgrid java-http-client - 2.0.0 + 2.1.0 com.fasterxml.jackson.core From a77755d93cc79b85619c06e0ff088093d4cce701 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 8 Jun 2016 22:46:17 -0700 Subject: [PATCH 038/439] Fixed local tests and updated dependency --- build.gradle | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/SendGrid.java | 14 +- src/test/java/com/sendgrid/SendGridTest.java | 1323 ++++++++++++------ 4 files changed, 910 insertions(+), 431 deletions(-) diff --git a/build.gradle b/build.gradle index 5f099f96..f89c0787 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ buildscript { } dependencies { - compile 'com.sendgrid:java-http-client:2.1.0' + compile 'com.sendgrid:java-http-client:2.2.1' compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' diff --git a/pom.xml b/pom.xml index 8d41fb8f..bb452e3c 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ com.sendgrid java-http-client - 2.1.0 + 2.2.1 com.fasterxml.jackson.core diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 80335f4e..f24909db 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -26,10 +26,22 @@ public class SendGrid { * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys */ public SendGrid(String apiKey) { + this.client = new Client(); + initializeSendGrid(apiKey); + } + + /** + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + */ + public SendGrid(String apiKey, Boolean test) { + this.client = new Client(test); + initializeSendGrid(apiKey); + } + + public void initializeSendGrid(String apiKey) { this.apiKey = apiKey; this.host = "api.sendgrid.com"; this.version = "v3"; - this.client = new Client(); this.requestHeaders = new HashMap(); this.requestHeaders.put("Authorization", "Bearer " + apiKey); this.requestHeaders.put("Content-Type", "application/json"); diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index d1f4e02b..1f708670 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -71,13 +71,15 @@ public void testHost() { @Test public void test_access_settings_activity_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -91,13 +93,15 @@ public void test_access_settings_activity_get() throws IOException { @Test public void test_access_settings_whitelist_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -109,13 +113,15 @@ public void test_access_settings_whitelist_post() throws IOException { @Test public void test_access_settings_whitelist_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -126,13 +132,15 @@ public void test_access_settings_whitelist_get() throws IOException { @Test public void test_access_settings_whitelist_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -144,13 +152,15 @@ public void test_access_settings_whitelist_delete() throws IOException { @Test public void test_access_settings_whitelist__rule_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -161,13 +171,15 @@ public void test_access_settings_whitelist__rule_id__get() throws IOException { @Test public void test_access_settings_whitelist__rule_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -178,13 +190,15 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException @Test public void test_api_keys_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -196,13 +210,15 @@ public void test_api_keys_post() throws IOException { @Test public void test_api_keys_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -213,13 +229,15 @@ public void test_api_keys_get() throws IOException { @Test public void test_api_keys__api_key_id__put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PUT; @@ -231,13 +249,15 @@ public void test_api_keys__api_key_id__put() throws IOException { @Test public void test_api_keys__api_key_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -249,13 +269,15 @@ public void test_api_keys__api_key_id__patch() throws IOException { @Test public void test_api_keys__api_key_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -266,13 +288,15 @@ public void test_api_keys__api_key_id__get() throws IOException { @Test public void test_api_keys__api_key_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -283,48 +307,57 @@ public void test_api_keys__api_key_id__delete() throws IOException { @Test public void test_asm_groups_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; request.endpoint = "asm/groups"; - request.body = "{\"is_default\":false,\"description\":\"A group description\",\"name\":\"A group name\"}"; + request.body = "{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"; Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(201, response.statusCode); } @Test public void test_asm_groups_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; request.endpoint = "asm/groups"; + Map queryParams = new HashMap(); + queryParams.put("id", "1"); + request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @Test public void test_asm_groups__group_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.PATCH; @@ -336,13 +369,15 @@ public void test_asm_groups__group_id__patch() throws IOException { @Test public void test_asm_groups__group_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -353,13 +388,15 @@ public void test_asm_groups__group_id__get() throws IOException { @Test public void test_asm_groups__group_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -370,13 +407,15 @@ public void test_asm_groups__group_id__delete() throws IOException { @Test public void test_asm_groups__group_id__suppressions_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -388,13 +427,15 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { @Test public void test_asm_groups__group_id__suppressions_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -405,13 +446,15 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { @Test public void test_asm_groups__group_id__suppressions__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -420,15 +463,36 @@ public void test_asm_groups__group_id__suppressions__email__delete() throws IOEx Assert.assertEquals(204, response.statusCode); } + @Test + public void test_asm_suppressions_get() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/suppressions"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + @Test public void test_asm_suppressions_global_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -440,13 +504,15 @@ public void test_asm_suppressions_global_post() throws IOException { @Test public void test_asm_suppressions_global__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -457,13 +523,15 @@ public void test_asm_suppressions_global__email__get() throws IOException { @Test public void test_asm_suppressions_global__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -473,14 +541,35 @@ public void test_asm_suppressions_global__email__delete() throws IOException { } @Test - public void test_browsers_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); + public void test_asm_suppressions__email__get() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "asm/suppressions/{email}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_browsers_stats_get() throws IOException { + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -499,13 +588,15 @@ public void test_browsers_stats_get() throws IOException { @Test public void test_campaigns_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -517,13 +608,15 @@ public void test_campaigns_post() throws IOException { @Test public void test_campaigns_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -538,13 +631,15 @@ public void test_campaigns_get() throws IOException { @Test public void test_campaigns__campaign_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -556,13 +651,15 @@ public void test_campaigns__campaign_id__patch() throws IOException { @Test public void test_campaigns__campaign_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -573,13 +670,15 @@ public void test_campaigns__campaign_id__get() throws IOException { @Test public void test_campaigns__campaign_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -590,13 +689,15 @@ public void test_campaigns__campaign_id__delete() throws IOException { @Test public void test_campaigns__campaign_id__schedules_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -608,13 +709,15 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { @Test public void test_campaigns__campaign_id__schedules_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -626,13 +729,15 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { @Test public void test_campaigns__campaign_id__schedules_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -643,13 +748,15 @@ public void test_campaigns__campaign_id__schedules_get() throws IOException { @Test public void test_campaigns__campaign_id__schedules_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -660,13 +767,15 @@ public void test_campaigns__campaign_id__schedules_delete() throws IOException { @Test public void test_campaigns__campaign_id__schedules_now_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -677,13 +786,15 @@ public void test_campaigns__campaign_id__schedules_now_post() throws IOException @Test public void test_campaigns__campaign_id__schedules_test_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.POST; @@ -695,13 +806,15 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio @Test public void test_categories_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -717,13 +830,15 @@ public void test_categories_get() throws IOException { @Test public void test_categories_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -742,13 +857,15 @@ public void test_categories_stats_get() throws IOException { @Test public void test_categories_stats_sums_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -768,13 +885,15 @@ public void test_categories_stats_sums_get() throws IOException { @Test public void test_clients_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -790,13 +909,15 @@ public void test_clients_stats_get() throws IOException { @Test public void test_clients__client_type__stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -812,13 +933,15 @@ public void test_clients__client_type__stats_get() throws IOException { @Test public void test_contactdb_custom_fields_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -830,13 +953,15 @@ public void test_contactdb_custom_fields_post() throws IOException { @Test public void test_contactdb_custom_fields_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -847,13 +972,15 @@ public void test_contactdb_custom_fields_get() throws IOException { @Test public void test_contactdb_custom_fields__custom_field_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -864,13 +991,15 @@ public void test_contactdb_custom_fields__custom_field_id__get() throws IOExcept @Test public void test_contactdb_custom_fields__custom_field_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "202"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); request.method = Method.DELETE; @@ -881,13 +1010,15 @@ public void test_contactdb_custom_fields__custom_field_id__delete() throws IOExc @Test public void test_contactdb_lists_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -899,13 +1030,15 @@ public void test_contactdb_lists_post() throws IOException { @Test public void test_contactdb_lists_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -916,13 +1049,15 @@ public void test_contactdb_lists_get() throws IOException { @Test public void test_contactdb_lists_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -934,13 +1069,15 @@ public void test_contactdb_lists_delete() throws IOException { @Test public void test_contactdb_lists__list_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -955,13 +1092,15 @@ public void test_contactdb_lists__list_id__patch() throws IOException { @Test public void test_contactdb_lists__list_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -975,13 +1114,15 @@ public void test_contactdb_lists__list_id__get() throws IOException { @Test public void test_contactdb_lists__list_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "202"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); request.method = Method.DELETE; @@ -995,13 +1136,15 @@ public void test_contactdb_lists__list_id__delete() throws IOException { @Test public void test_contactdb_lists__list_id__recipients_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -1013,13 +1156,15 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException @Test public void test_contactdb_lists__list_id__recipients_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1035,13 +1180,15 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { @Test public void test_contactdb_lists__list_id__recipients__recipient_id__post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -1052,13 +1199,15 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__post() thro @Test public void test_contactdb_lists__list_id__recipients__recipient_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -1073,13 +1222,15 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th @Test public void test_contactdb_recipients_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.PATCH; @@ -1091,13 +1242,15 @@ public void test_contactdb_recipients_patch() throws IOException { @Test public void test_contactdb_recipients_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -1109,13 +1262,15 @@ public void test_contactdb_recipients_post() throws IOException { @Test public void test_contactdb_recipients_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1130,13 +1285,15 @@ public void test_contactdb_recipients_get() throws IOException { @Test public void test_contactdb_recipients_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.DELETE; @@ -1148,13 +1305,15 @@ public void test_contactdb_recipients_delete() throws IOException { @Test public void test_contactdb_recipients_billable_count_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1165,13 +1324,15 @@ public void test_contactdb_recipients_billable_count_get() throws IOException { @Test public void test_contactdb_recipients_count_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1182,13 +1343,15 @@ public void test_contactdb_recipients_count_get() throws IOException { @Test public void test_contactdb_recipients_search_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1202,13 +1365,15 @@ public void test_contactdb_recipients_search_get() throws IOException { @Test public void test_contactdb_recipients__recipient_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1219,13 +1384,15 @@ public void test_contactdb_recipients__recipient_id__get() throws IOException { @Test public void test_contactdb_recipients__recipient_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -1236,13 +1403,15 @@ public void test_contactdb_recipients__recipient_id__delete() throws IOException @Test public void test_contactdb_recipients__recipient_id__lists_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1253,13 +1422,15 @@ public void test_contactdb_recipients__recipient_id__lists_get() throws IOExcept @Test public void test_contactdb_reserved_fields_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1270,13 +1441,15 @@ public void test_contactdb_reserved_fields_get() throws IOException { @Test public void test_contactdb_segments_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; @@ -1288,13 +1461,15 @@ public void test_contactdb_segments_post() throws IOException { @Test public void test_contactdb_segments_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1305,13 +1480,15 @@ public void test_contactdb_segments_get() throws IOException { @Test public void test_contactdb_segments__segment_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -1326,13 +1503,15 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { @Test public void test_contactdb_segments__segment_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1346,13 +1525,15 @@ public void test_contactdb_segments__segment_id__get() throws IOException { @Test public void test_contactdb_segments__segment_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -1366,13 +1547,15 @@ public void test_contactdb_segments__segment_id__delete() throws IOException { @Test public void test_contactdb_segments__segment_id__recipients_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1387,13 +1570,15 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep @Test public void test_devices_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1411,13 +1596,15 @@ public void test_devices_stats_get() throws IOException { @Test public void test_geo_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1436,13 +1623,15 @@ public void test_geo_stats_get() throws IOException { @Test public void test_ips_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1460,13 +1649,15 @@ public void test_ips_get() throws IOException { @Test public void test_ips_assigned_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1477,13 +1668,15 @@ public void test_ips_assigned_get() throws IOException { @Test public void test_ips_pools_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; @@ -1495,13 +1688,15 @@ public void test_ips_pools_post() throws IOException { @Test public void test_ips_pools_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1512,13 +1707,15 @@ public void test_ips_pools_get() throws IOException { @Test public void test_ips_pools__pool_name__put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PUT; @@ -1530,13 +1727,15 @@ public void test_ips_pools__pool_name__put() throws IOException { @Test public void test_ips_pools__pool_name__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1547,13 +1746,15 @@ public void test_ips_pools__pool_name__get() throws IOException { @Test public void test_ips_pools__pool_name__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -1564,13 +1765,15 @@ public void test_ips_pools__pool_name__delete() throws IOException { @Test public void test_ips_pools__pool_name__ips_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -1582,13 +1785,15 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { @Test public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -1599,13 +1804,15 @@ public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { @Test public void test_ips_warmup_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; @@ -1617,13 +1824,15 @@ public void test_ips_warmup_post() throws IOException { @Test public void test_ips_warmup_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1634,13 +1843,15 @@ public void test_ips_warmup_get() throws IOException { @Test public void test_ips_warmup__ip_address__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1651,13 +1862,15 @@ public void test_ips_warmup__ip_address__get() throws IOException { @Test public void test_ips_warmup__ip_address__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -1668,13 +1881,15 @@ public void test_ips_warmup__ip_address__delete() throws IOException { @Test public void test_ips__ip_address__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1685,13 +1900,15 @@ public void test_ips__ip_address__get() throws IOException { @Test public void test_mail_batch_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -1702,13 +1919,15 @@ public void test_mail_batch_post() throws IOException { @Test public void test_mail_batch__batch_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1719,13 +1938,15 @@ public void test_mail_batch__batch_id__get() throws IOException { @Test public void test_mail_send_beta_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "202"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); request.method = Method.POST; @@ -1737,13 +1958,15 @@ public void test_mail_send_beta_post() throws IOException { @Test public void test_mail_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1758,13 +1981,15 @@ public void test_mail_settings_get() throws IOException { @Test public void test_mail_settings_address_whitelist_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -1776,13 +2001,15 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { @Test public void test_mail_settings_address_whitelist_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1793,13 +2020,15 @@ public void test_mail_settings_address_whitelist_get() throws IOException { @Test public void test_mail_settings_bcc_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -1811,13 +2040,15 @@ public void test_mail_settings_bcc_patch() throws IOException { @Test public void test_mail_settings_bcc_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1828,13 +2059,15 @@ public void test_mail_settings_bcc_get() throws IOException { @Test public void test_mail_settings_bounce_purge_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -1846,13 +2079,15 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { @Test public void test_mail_settings_bounce_purge_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1863,13 +2098,15 @@ public void test_mail_settings_bounce_purge_get() throws IOException { @Test public void test_mail_settings_footer_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -1881,13 +2118,15 @@ public void test_mail_settings_footer_patch() throws IOException { @Test public void test_mail_settings_footer_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1898,13 +2137,15 @@ public void test_mail_settings_footer_get() throws IOException { @Test public void test_mail_settings_forward_bounce_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -1916,13 +2157,15 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { @Test public void test_mail_settings_forward_bounce_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1933,13 +2176,15 @@ public void test_mail_settings_forward_bounce_get() throws IOException { @Test public void test_mail_settings_forward_spam_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -1951,13 +2196,15 @@ public void test_mail_settings_forward_spam_patch() throws IOException { @Test public void test_mail_settings_forward_spam_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -1968,13 +2215,15 @@ public void test_mail_settings_forward_spam_get() throws IOException { @Test public void test_mail_settings_plain_content_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -1986,13 +2235,15 @@ public void test_mail_settings_plain_content_patch() throws IOException { @Test public void test_mail_settings_plain_content_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2003,13 +2254,15 @@ public void test_mail_settings_plain_content_get() throws IOException { @Test public void test_mail_settings_spam_check_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -2021,13 +2274,15 @@ public void test_mail_settings_spam_check_patch() throws IOException { @Test public void test_mail_settings_spam_check_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2038,13 +2293,15 @@ public void test_mail_settings_spam_check_get() throws IOException { @Test public void test_mail_settings_template_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -2056,13 +2313,15 @@ public void test_mail_settings_template_patch() throws IOException { @Test public void test_mail_settings_template_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2073,13 +2332,15 @@ public void test_mail_settings_template_get() throws IOException { @Test public void test_mailbox_providers_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2098,13 +2359,15 @@ public void test_mailbox_providers_stats_get() throws IOException { @Test public void test_partner_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2119,13 +2382,15 @@ public void test_partner_settings_get() throws IOException { @Test public void test_partner_settings_new_relic_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -2137,13 +2402,15 @@ public void test_partner_settings_new_relic_patch() throws IOException { @Test public void test_partner_settings_new_relic_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2154,13 +2421,15 @@ public void test_partner_settings_new_relic_get() throws IOException { @Test public void test_scopes_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2171,13 +2440,15 @@ public void test_scopes_get() throws IOException { @Test public void test_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2195,13 +2466,15 @@ public void test_stats_get() throws IOException { @Test public void test_subusers_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; @@ -2213,13 +2486,15 @@ public void test_subusers_post() throws IOException { @Test public void test_subusers_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2235,13 +2510,15 @@ public void test_subusers_get() throws IOException { @Test public void test_subusers_reputations_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2255,13 +2532,15 @@ public void test_subusers_reputations_get() throws IOException { @Test public void test_subusers_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2280,13 +2559,15 @@ public void test_subusers_stats_get() throws IOException { @Test public void test_subusers_stats_monthly_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2305,13 +2586,15 @@ public void test_subusers_stats_monthly_get() throws IOException { @Test public void test_subusers_stats_sums_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2331,13 +2614,15 @@ public void test_subusers_stats_sums_get() throws IOException { @Test public void test_subusers__subuser_name__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.PATCH; @@ -2349,13 +2634,15 @@ public void test_subusers__subuser_name__patch() throws IOException { @Test public void test_subusers__subuser_name__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2366,13 +2653,15 @@ public void test_subusers__subuser_name__delete() throws IOException { @Test public void test_subusers__subuser_name__ips_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PUT; @@ -2384,13 +2673,15 @@ public void test_subusers__subuser_name__ips_put() throws IOException { @Test public void test_subusers__subuser_name__monitor_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PUT; @@ -2402,13 +2693,15 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { @Test public void test_subusers__subuser_name__monitor_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; @@ -2420,13 +2713,15 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { @Test public void test_subusers__subuser_name__monitor_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2437,13 +2732,15 @@ public void test_subusers__subuser_name__monitor_get() throws IOException { @Test public void test_subusers__subuser_name__monitor_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2454,13 +2751,15 @@ public void test_subusers__subuser_name__monitor_delete() throws IOException { @Test public void test_subusers__subuser_name__stats_monthly_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2478,13 +2777,15 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException @Test public void test_suppression_blocks_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2501,13 +2802,15 @@ public void test_suppression_blocks_get() throws IOException { @Test public void test_suppression_blocks_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2519,13 +2822,15 @@ public void test_suppression_blocks_delete() throws IOException { @Test public void test_suppression_blocks__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2536,13 +2841,15 @@ public void test_suppression_blocks__email__get() throws IOException { @Test public void test_suppression_blocks__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2553,13 +2860,15 @@ public void test_suppression_blocks__email__delete() throws IOException { @Test public void test_suppression_bounces_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2574,13 +2883,15 @@ public void test_suppression_bounces_get() throws IOException { @Test public void test_suppression_bounces_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2592,13 +2903,15 @@ public void test_suppression_bounces_delete() throws IOException { @Test public void test_suppression_bounces__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2609,13 +2922,15 @@ public void test_suppression_bounces__email__get() throws IOException { @Test public void test_suppression_bounces__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2629,13 +2944,15 @@ public void test_suppression_bounces__email__delete() throws IOException { @Test public void test_suppression_invalid_emails_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2652,13 +2969,15 @@ public void test_suppression_invalid_emails_get() throws IOException { @Test public void test_suppression_invalid_emails_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2670,13 +2989,15 @@ public void test_suppression_invalid_emails_delete() throws IOException { @Test public void test_suppression_invalid_emails__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2687,13 +3008,15 @@ public void test_suppression_invalid_emails__email__get() throws IOException { @Test public void test_suppression_invalid_emails__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2704,13 +3027,15 @@ public void test_suppression_invalid_emails__email__delete() throws IOException @Test public void test_suppression_spam_report__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2721,13 +3046,15 @@ public void test_suppression_spam_report__email__get() throws IOException { @Test public void test_suppression_spam_report__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2738,13 +3065,15 @@ public void test_suppression_spam_report__email__delete() throws IOException { @Test public void test_suppression_spam_reports_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2761,13 +3090,15 @@ public void test_suppression_spam_reports_get() throws IOException { @Test public void test_suppression_spam_reports_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2779,13 +3110,15 @@ public void test_suppression_spam_reports_delete() throws IOException { @Test public void test_suppression_unsubscribes_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2802,13 +3135,15 @@ public void test_suppression_unsubscribes_get() throws IOException { @Test public void test_templates_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -2820,13 +3155,15 @@ public void test_templates_post() throws IOException { @Test public void test_templates_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2837,13 +3174,15 @@ public void test_templates_get() throws IOException { @Test public void test_templates__template_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -2855,13 +3194,15 @@ public void test_templates__template_id__patch() throws IOException { @Test public void test_templates__template_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2872,13 +3213,15 @@ public void test_templates__template_id__get() throws IOException { @Test public void test_templates__template_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2889,13 +3232,15 @@ public void test_templates__template_id__delete() throws IOException { @Test public void test_templates__template_id__versions_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -2907,13 +3252,15 @@ public void test_templates__template_id__versions_post() throws IOException { @Test public void test_templates__template_id__versions__version_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -2925,13 +3272,15 @@ public void test_templates__template_id__versions__version_id__patch() throws IO @Test public void test_templates__template_id__versions__version_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2942,13 +3291,15 @@ public void test_templates__template_id__versions__version_id__get() throws IOEx @Test public void test_templates__template_id__versions__version_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -2959,13 +3310,15 @@ public void test_templates__template_id__versions__version_id__delete() throws I @Test public void test_templates__template_id__versions__version_id__activate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; @@ -2976,13 +3329,15 @@ public void test_templates__template_id__versions__version_id__activate_post() t @Test public void test_tracking_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -2997,13 +3352,15 @@ public void test_tracking_settings_get() throws IOException { @Test public void test_tracking_settings_click_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -3015,13 +3372,15 @@ public void test_tracking_settings_click_patch() throws IOException { @Test public void test_tracking_settings_click_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3032,13 +3391,15 @@ public void test_tracking_settings_click_get() throws IOException { @Test public void test_tracking_settings_google_analytics_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -3050,13 +3411,15 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { @Test public void test_tracking_settings_google_analytics_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3067,13 +3430,15 @@ public void test_tracking_settings_google_analytics_get() throws IOException { @Test public void test_tracking_settings_open_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -3085,13 +3450,15 @@ public void test_tracking_settings_open_patch() throws IOException { @Test public void test_tracking_settings_open_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3102,13 +3469,15 @@ public void test_tracking_settings_open_get() throws IOException { @Test public void test_tracking_settings_subscription_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -3120,13 +3489,15 @@ public void test_tracking_settings_subscription_patch() throws IOException { @Test public void test_tracking_settings_subscription_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3137,13 +3508,15 @@ public void test_tracking_settings_subscription_get() throws IOException { @Test public void test_user_account_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3154,13 +3527,15 @@ public void test_user_account_get() throws IOException { @Test public void test_user_credits_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3171,13 +3546,15 @@ public void test_user_credits_get() throws IOException { @Test public void test_user_email_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PUT; @@ -3189,13 +3566,15 @@ public void test_user_email_put() throws IOException { @Test public void test_user_email_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3206,13 +3585,15 @@ public void test_user_email_get() throws IOException { @Test public void test_user_password_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PUT; @@ -3224,13 +3605,15 @@ public void test_user_password_put() throws IOException { @Test public void test_user_profile_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -3242,13 +3625,15 @@ public void test_user_profile_patch() throws IOException { @Test public void test_user_profile_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3259,13 +3644,15 @@ public void test_user_profile_get() throws IOException { @Test public void test_user_scheduled_sends_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -3277,13 +3664,15 @@ public void test_user_scheduled_sends_post() throws IOException { @Test public void test_user_scheduled_sends_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3294,13 +3683,15 @@ public void test_user_scheduled_sends_get() throws IOException { @Test public void test_user_scheduled_sends__batch_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.PATCH; @@ -3312,13 +3703,15 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { @Test public void test_user_scheduled_sends__batch_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3329,13 +3722,15 @@ public void test_user_scheduled_sends__batch_id__get() throws IOException { @Test public void test_user_scheduled_sends__batch_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -3346,13 +3741,15 @@ public void test_user_scheduled_sends__batch_id__delete() throws IOException { @Test public void test_user_settings_enforced_tls_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -3364,13 +3761,15 @@ public void test_user_settings_enforced_tls_patch() throws IOException { @Test public void test_user_settings_enforced_tls_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3381,13 +3780,15 @@ public void test_user_settings_enforced_tls_get() throws IOException { @Test public void test_user_username_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PUT; @@ -3399,13 +3800,15 @@ public void test_user_username_put() throws IOException { @Test public void test_user_username_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3416,13 +3819,15 @@ public void test_user_username_get() throws IOException { @Test public void test_user_webhooks_event_settings_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -3434,13 +3839,15 @@ public void test_user_webhooks_event_settings_patch() throws IOException { @Test public void test_user_webhooks_event_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3451,13 +3858,15 @@ public void test_user_webhooks_event_settings_get() throws IOException { @Test public void test_user_webhooks_event_test_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.POST; @@ -3469,13 +3878,15 @@ public void test_user_webhooks_event_test_post() throws IOException { @Test public void test_user_webhooks_parse_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3486,13 +3897,15 @@ public void test_user_webhooks_parse_settings_get() throws IOException { @Test public void test_user_webhooks_parse_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3510,13 +3923,15 @@ public void test_user_webhooks_parse_stats_get() throws IOException { @Test public void test_whitelabel_domains_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -3528,13 +3943,15 @@ public void test_whitelabel_domains_post() throws IOException { @Test public void test_whitelabel_domains_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3552,13 +3969,15 @@ public void test_whitelabel_domains_get() throws IOException { @Test public void test_whitelabel_domains_default_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3569,13 +3988,15 @@ public void test_whitelabel_domains_default_get() throws IOException { @Test public void test_whitelabel_domains_subuser_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3586,13 +4007,15 @@ public void test_whitelabel_domains_subuser_get() throws IOException { @Test public void test_whitelabel_domains_subuser_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -3603,13 +4026,15 @@ public void test_whitelabel_domains_subuser_delete() throws IOException { @Test public void test_whitelabel_domains__domain_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -3621,13 +4046,15 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { @Test public void test_whitelabel_domains__domain_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3638,13 +4065,15 @@ public void test_whitelabel_domains__domain_id__get() throws IOException { @Test public void test_whitelabel_domains__domain_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -3655,13 +4084,15 @@ public void test_whitelabel_domains__domain_id__delete() throws IOException { @Test public void test_whitelabel_domains__domain_id__subuser_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -3673,13 +4104,15 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio @Test public void test_whitelabel_domains__id__ips_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; @@ -3691,13 +4124,15 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { @Test public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.DELETE; @@ -3708,13 +4143,15 @@ public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { @Test public void test_whitelabel_domains__id__validate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; @@ -3725,13 +4162,15 @@ public void test_whitelabel_domains__id__validate_post() throws IOException { @Test public void test_whitelabel_ips_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -3743,13 +4182,15 @@ public void test_whitelabel_ips_post() throws IOException { @Test public void test_whitelabel_ips_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3765,13 +4206,15 @@ public void test_whitelabel_ips_get() throws IOException { @Test public void test_whitelabel_ips__id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3782,13 +4225,15 @@ public void test_whitelabel_ips__id__get() throws IOException { @Test public void test_whitelabel_ips__id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -3799,13 +4244,15 @@ public void test_whitelabel_ips__id__delete() throws IOException { @Test public void test_whitelabel_ips__id__validate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; @@ -3816,13 +4263,15 @@ public void test_whitelabel_ips__id__validate_post() throws IOException { @Test public void test_whitelabel_links_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "201"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); request.method = Method.POST; @@ -3838,13 +4287,15 @@ public void test_whitelabel_links_post() throws IOException { @Test public void test_whitelabel_links_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3858,13 +4309,15 @@ public void test_whitelabel_links_get() throws IOException { @Test public void test_whitelabel_links_default_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3878,13 +4331,15 @@ public void test_whitelabel_links_default_get() throws IOException { @Test public void test_whitelabel_links_subuser_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3898,13 +4353,15 @@ public void test_whitelabel_links_subuser_get() throws IOException { @Test public void test_whitelabel_links_subuser_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -3918,13 +4375,15 @@ public void test_whitelabel_links_subuser_delete() throws IOException { @Test public void test_whitelabel_links__id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.PATCH; @@ -3936,13 +4395,15 @@ public void test_whitelabel_links__id__patch() throws IOException { @Test public void test_whitelabel_links__id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.GET; @@ -3953,13 +4414,15 @@ public void test_whitelabel_links__id__get() throws IOException { @Test public void test_whitelabel_links__id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "204"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.method = Method.DELETE; @@ -3970,13 +4433,15 @@ public void test_whitelabel_links__id__delete() throws IOException { @Test public void test_whitelabel_links__id__validate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; @@ -3987,13 +4452,15 @@ public void test_whitelabel_links__id__validate_post() throws IOException { @Test public void test_whitelabel_links__link_id__subuser_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY"); - sg.addRequestHeader("X-Mock", "200"); + SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { + sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); } + sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.method = Method.POST; From 025f4f002669507de4fc988e3e6631dbecd7a168 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 9 Jun 2016 22:19:44 -0700 Subject: [PATCH 039/439] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eaa4d0d7..545b172e 100644 --- a/README.md +++ b/README.md @@ -206,4 +206,4 @@ sendgrid-java is guided and supported by the SendGrid [Developer Experience Team sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. ![SendGrid Logo] -(https://assets3.sendgrid.com/mkt/assets/logos_brands/small/sglogo_2015_blue-9c87423c2ff2ff393ebce1ab3bd018a4.png) \ No newline at end of file +(https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) From 334c0832e462a0c3c84aca078e8c8cfdfd2300f6 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 10 Jun 2016 19:19:51 -0700 Subject: [PATCH 040/439] Updated dependency and Content-Type is now auto-set --- build.gradle | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/SendGrid.java | 1 - src/test/java/com/sendgrid/SendGridTest.java | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index f89c0787..fd696be8 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ buildscript { } dependencies { - compile 'com.sendgrid:java-http-client:2.2.1' + compile 'com.sendgrid:java-http-client:2.3.1' compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' diff --git a/pom.xml b/pom.xml index bb452e3c..3ffc3575 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ com.sendgrid java-http-client - 2.2.1 + 2.3.1 com.fasterxml.jackson.core diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index f24909db..d70b0608 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -44,7 +44,6 @@ public void initializeSendGrid(String apiKey) { this.version = "v3"; this.requestHeaders = new HashMap(); this.requestHeaders.put("Authorization", "Bearer " + apiKey); - this.requestHeaders.put("Content-Type", "application/json"); this.requestHeaders.put("User-agent", USER_AGENT); } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 1f708670..d54ee3b0 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -19,7 +19,6 @@ public Map buildDefaultHeaders() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); Map requestHeaders = new HashMap(); requestHeaders.put("Authorization", "Bearer " + SENDGRID_API_KEY); - requestHeaders.put("Content-Type", "application/json"); String USER_AGENT = "sendgrid/" + sg.getLibraryVersion() + ";java"; requestHeaders.put("User-agent", USER_AGENT); return requestHeaders; From cf07583a328414ab851bd7219f9e4c6a2e1ca5c6 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 13 Jun 2016 18:41:12 -0700 Subject: [PATCH 041/439] Version Bump v3.0.0: full v3 Web API support --- CHANGELOG.md | 2 +- README.md | 73 ++++++++--------------------------------- USAGE.md | 8 ++--- examples/mail/mail.java | 8 ++--- 4 files changed, 23 insertions(+), 68 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad24b539..738f8668 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Change Log All notable changes to this project will be documented in this file. -## [3.0.0] - XXXX-XX-XX +## [3.0.0] - 2016-06-13 ### Added - Breaking change to support the v3 Web API - New HTTP client diff --git a/README.md b/README.md index 545b172e..65fc45c7 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,7 @@ # Announcements -**NOTE: The `/mail/send/beta` endpoint is currently in beta! - -Since this is not a general release, we do not recommend POSTing production level traffic through this endpoint or integrating your production servers with this endpoint. - -When this endpoint is ready for general release, your code will require an update in order to use the official URI. - -By using this endpoint, you accept that you may encounter bugs and that the endpoint may be taken down for maintenance at any time. We cannot guarantee the continued availability of this beta endpoint. We hope that you like this new endpoint and we appreciate any [feedback](dx+mail-beta@sendgrid.com) that you can send our way.** - -**BREAKING CHANGE as of XXXX.XX.XX** +**BREAKING CHANGE as of 2016.06.14** Version `3.0.0` is a breaking change for the entire library. @@ -22,17 +14,17 @@ have the following resources to get you started quickly: - [SendGrid Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) - [Usage - Documentation](https://github.com/sendgrid/sendgrid-java/tree/v2beta/USAGE.md) + Documentation](https://github.com/sendgrid/sendgrid-java/tree/master/USAGE.md) - [Example - Code](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples) + Code](https://github.com/sendgrid/sendgrid-java/tree/master/examples) Thank you for your continued support! -All updates to this library is documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CHANGELOG.md). +All updates to this library is documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md). # Installation -## Environment Variables +## Setup Environment Variables First, get your free SendGrid account [here](https://sendgrid.com/free?source=sendgrid-java). @@ -43,44 +35,7 @@ echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env echo "sendgrid.env" >> .gitignore source ./sendgrid.env ``` -## TRYING OUT THE V3 BETA MAIL SEND - -```bash -git clone -b v3beta --single-branch https://github.com/sendgrid/sendgrid-java.git -cd sendgrid-java -./gradlew build -``` - -* Update the to and from [emails](https://github.com/sendgrid/sendgrid-java/blob/v3beta/examples/Mail/Example.java#L35). - -```bash -cd examples/helpers/mail -javac -classpath ../../examples/dependencies/jackson-annotations-2.7.0.jar:../../examples/dependencies/jackson-databind-2.7.3.jar:../../examples/dependencies/jackson-core-2.7.3.jar:../../../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ../../examples/dependencies/jackson-annotations-2.7.0.jar:../../examples/dependencies/jackson-databind-2.7.3.jar:../../examples/dependencies/jackson-core-2.7.3.jar:../../../build/libs/sendgrid-3.0.0-jar.jar:. Example -``` - -## TRYING OUT THE V3 BETA WEB API - -```bash -git clone -b v3beta --single-branch https://github.com/sendgrid/sendgrid-java.git -``` - -* Check out the documentation for [Web API v3 endpoints](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html). -* Review the corresponding [examples](https://github.com/sendgrid/sendgrid-python/blob/v3beta/examples). - -```bash -cd examples -touch Example.java -``` - -Add the example you want to test to Example.java, including the headers at the top of the file. - -``` bash -javac -classpath ./dependencies/jackson-annotations-2.7.0.jar:./dependencies/jackson-databind-2.7.3.jar:./dependencies/jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ./dependencies/jackson-annotations-2.7.0.jar:./dependencies/jackson-databind-2.7.3.jar:./dependencies/jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example -``` - -* Check out the documentation for [Web API v3 /mail/send/beta endpoint](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html). - -## Once we are out of v3 BETA, the following will apply +## Install Package Choose your installation method - Maven w/ Gradle (recommended), Maven or Jar file. @@ -117,7 +72,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://sendgrid-open-source.s3.amazonaws.com/sendgrid-java/sendgrid-java.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.0/sendgrid-java-3.0.0-jar.jar) ```java import com.sendgrid.*; @@ -181,8 +136,8 @@ try { # Usage - [SendGrid Docs](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) -- [Usage Docs](https://github.com/sendgrid/sendgrid-java/tree/v3beta/USAGE.md) -- [Example Code](https://github.com/sendgrid/sendgrid-java/tree/v3beta/examples) +- [Usage Docs](https://github.com/sendgrid/sendgrid-java/tree/master/USAGE.md) +- [Example Code](https://github.com/sendgrid/sendgrid-java/tree/master/examples) ## Roadmap @@ -190,14 +145,14 @@ If you are intersted in the future direction of this project, please take a look ## How to Contribute -We encourage contribution to our libraries, please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CONTRIBUTING.md) guide for details. +We encourage contribution to our libraries, please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) guide for details. Quick links: -- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CONTRIBUTING.md#feature_request) -- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CONTRIBUTING.md#submit_a_bug_report) -- [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CONTRIBUTING.md#cla) -- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/v3beta/CONTRIBUTING.md#improvements_to_the_codebase) +- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature_request) +- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit_a_bug_report) +- [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#cla) +- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements_to_the_codebase) # About diff --git a/USAGE.md b/USAGE.md index 9ea56ea9..3288e890 100644 --- a/USAGE.md +++ b/USAGE.md @@ -2561,7 +2561,7 @@ More Information: throw ex; } ``` -## v3 Mail Send Beta +## v3 Mail Send This endpoint allows you to send email over SendGrids v3 Web API, the most recent version of our API. If you are looking for documentation about the v2 Mail Send endpoint, please see our [v2 API Reference](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). @@ -2572,16 +2572,16 @@ For an overview of the v3 Mail Send endpoint, please visit our [v3 API Reference For more detailed information about how to use the v3 Mail Send endpoint, please visit our [Classroom](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/index.html). -### POST /mail/send/beta +### POST /mail/send -This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/v3beta/src/main/java/com/sendgrid/helpers/README.md). +This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/master/src/main/java/com/sendgrid/helpers/README.md). ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "mail/send/beta"; + request.endpoint = "mail/send"; request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/mail/mail.java b/examples/mail/mail.java index cc65ed8e..05694b98 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -56,10 +56,10 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// v3 Mail Send Beta -// POST /mail/send/beta +// v3 Mail Send +// POST /mail/send -// This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/v3beta/src/main/java/com/sendgrid/helpers/README.md). +// This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/master/src/main/java/com/sendgrid/helpers/README.md). public class Example { public static void main(String[] args) throws IOException { @@ -67,7 +67,7 @@ public static void main(String[] args) throws IOException { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.method = Method.POST; - request.endpoint = "mail/send/beta"; + request.endpoint = "mail/send"; request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); System.out.println(response.statusCode); From 127c31e9c5fa3247e313cceee268a77a9c268cb9 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 13 Jun 2016 18:42:18 -0700 Subject: [PATCH 042/439] Version Bump v3.0.0: full v3 Web API support --- CONTRIBUTING.md | 6 +++--- examples/helpers/mail/Example.java | 6 ++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 41a5e908..baa5be7b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -89,7 +89,7 @@ source ./sendgrid.env ##### Execute: ##### -See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/v3beta/examples) to get started quickly. +See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/master/examples) to get started quickly. Check out the documentation for [Web API v3 endpoints](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html). @@ -124,9 +124,9 @@ The interface to the SendGrid API. All PRs require passing tests before the PR will be reviewed. -All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tree/v3beta/src/test/java/com/sendgrid) directory. +All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid) directory. -For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/v3beta/src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. +For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. ```bash ./gradlew test -i diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index f5135860..a0f530bb 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -228,9 +228,8 @@ public static void baselineExample() throws IOException { Mail helloWorld = buildHelloEmail(); try { request.method = Method.POST; - request.endpoint = "mail/send/beta"; + request.endpoint = "mail/send"; request.requestBody = helloWorld.build(); - System.out.println(request.requestBody); // REMOVE Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); @@ -248,9 +247,8 @@ public static void kitchenSinkExample() throws IOException { Mail kitchenSink = buildKitchenSink(); try { request.method = Method.POST; - request.endpoint = "mail/send/beta"; + request.endpoint = "mail/send"; request.requestBody = kitchenSink.build(); - System.out.println(request.requestBody); // REMOVE Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.responseBody); From d512572d862dded9a4bb8c7ff0a4cf57b1c711e1 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 14 Jun 2016 18:22:18 -0700 Subject: [PATCH 043/439] Fix broken links --- src/main/java/com/sendgrid/helpers/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index 02421ae1..1bd745a4 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -6,7 +6,7 @@ # Quick Start -Run the [example](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples/mail) (make sure you have set your environment variable to include your SENDGRID_API_KEY). +Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) (make sure you have set your environment variable to include your SENDGRID_API_KEY). ```bash cd examples/mail @@ -15,5 +15,5 @@ javac -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-d ## Usage -- See the [example](https://github.com/sendgrid/sendgrid-java/tree/v2beta/examples/mail) for a complete working example. +- See the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) for a complete working example. - [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/overview.html) \ No newline at end of file From c3108dd25660bf410618391a3e83baa22519eb85 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 15 Jun 2016 16:01:47 -0700 Subject: [PATCH 044/439] Update docs and examples --- README.md | 69 ++++++++++--------- USAGE.md | 6 +- examples/accesssettings/accesssettings.java | 6 +- examples/apikeys/apikeys.java | 6 +- examples/asm/asm.java | 6 +- examples/browsers/browsers.java | 6 +- examples/campaigns/campaigns.java | 6 +- examples/categories/categories.java | 6 +- examples/clients/clients.java | 6 +- examples/contactdb/contactdb.java | 6 +- examples/devices/devices.java | 6 +- examples/geo/geo.java | 6 +- examples/ips/ips.java | 6 +- examples/mail/mail.java | 7 +- .../mailboxproviders/mailboxproviders.java | 6 +- examples/mailsettings/mailsettings.java | 6 +- examples/partnersettings/partnersettings.java | 6 +- examples/scopes/scopes.java | 6 +- examples/stats/stats.java | 6 +- examples/subusers/subusers.java | 6 +- examples/suppression/suppression.java | 6 +- examples/templates/templates.java | 6 +- .../trackingsettings/trackingsettings.java | 6 +- examples/user/user.java | 6 +- examples/whitelabel/whitelabel.java | 6 +- 25 files changed, 62 insertions(+), 152 deletions(-) diff --git a/README.md b/README.md index 65fc45c7..ecaf4fd3 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ import com.sendgrid.*; ## Dependencies -- The SendGrid Service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java)) +- The SendGrid Service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) # Quick Start @@ -91,24 +91,28 @@ import com.sendgrid.*; import com.sendgrid.*; import java.io.IOException; -Email from = new Email("test@example.com"); -String subject = "Hello World from the SendGrid Java Library"; -Email to = new Email("test@example.com"); -Content content = new Content("text/plain", "some text here"); -Mail mail = new Mail(from, subject, to, content); - -SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); -Request request = new Request(); -try { - request.method = Method.POST; - request.endpoint = "mail/send/beta"; - request.body = mail.build(); - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); -} catch (IOException ex) { - throw ex; +public class Example { + public static void main(String[] args) throws IOException { + Email from = new Email("test@example.com"); + String subject = "Hello World from the SendGrid Java Library"; + Email to = new Email("test@example.com"); + Content content = new Content("text/plain", "some text here"); + Mail mail = new Mail(from, subject, to, content); + + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + request.method = Method.POST; + request.endpoint = "mail/send"; + request.body = mail.build(); + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } } ``` @@ -118,18 +122,21 @@ try { import com.sendgrid.*; import java.io.IOException; -SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); -Request request = new Request(); -try { - Request request = new Request; - request.method = Method.GET; - request.endpoint = "api_keys"; - Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); -} catch (IOException ex) { - throw ex; +public class Example { + public static void main(String[] args) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "api_keys"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } } ``` diff --git a/USAGE.md b/USAGE.md index 3288e890..2eb29190 100644 --- a/USAGE.md +++ b/USAGE.md @@ -6,11 +6,7 @@ This documentation is based on our [OAI specification](https://github.com/sendgr import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/accesssettings/accesssettings.java b/examples/accesssettings/accesssettings.java index 3b704309..5073484f 100644 --- a/examples/accesssettings/accesssettings.java +++ b/examples/accesssettings/accesssettings.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/apikeys/apikeys.java b/examples/apikeys/apikeys.java index ebd0536b..1f6c8f79 100644 --- a/examples/apikeys/apikeys.java +++ b/examples/apikeys/apikeys.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/asm/asm.java b/examples/asm/asm.java index 74469470..a33f0f79 100644 --- a/examples/asm/asm.java +++ b/examples/asm/asm.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/browsers/browsers.java b/examples/browsers/browsers.java index 7d1ad5d1..e6085aef 100644 --- a/examples/browsers/browsers.java +++ b/examples/browsers/browsers.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/campaigns/campaigns.java b/examples/campaigns/campaigns.java index 8230c883..3f28881e 100644 --- a/examples/campaigns/campaigns.java +++ b/examples/campaigns/campaigns.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/categories/categories.java b/examples/categories/categories.java index bcc3597e..b6d2f507 100644 --- a/examples/categories/categories.java +++ b/examples/categories/categories.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/clients/clients.java b/examples/clients/clients.java index c0c345ca..1d48540c 100644 --- a/examples/clients/clients.java +++ b/examples/clients/clients.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java index b269a6bb..22683a36 100644 --- a/examples/contactdb/contactdb.java +++ b/examples/contactdb/contactdb.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/devices/devices.java b/examples/devices/devices.java index 57e49cf1..5dbe9cd5 100644 --- a/examples/devices/devices.java +++ b/examples/devices/devices.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/geo/geo.java b/examples/geo/geo.java index 2cb4a814..48309368 100644 --- a/examples/geo/geo.java +++ b/examples/geo/geo.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/ips/ips.java b/examples/ips/ips.java index 94289567..b9dfdbef 100644 --- a/examples/ips/ips.java +++ b/examples/ips/ips.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/mail/mail.java b/examples/mail/mail.java index 05694b98..bcd6d8ea 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; @@ -58,7 +54,6 @@ public static void main(String[] args) throws IOException { ////////////////////////////////////////////////////////////////// // v3 Mail Send // POST /mail/send - // This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/master/src/main/java/com/sendgrid/helpers/README.md). public class Example { diff --git a/examples/mailboxproviders/mailboxproviders.java b/examples/mailboxproviders/mailboxproviders.java index 7f1c2d65..6b412955 100644 --- a/examples/mailboxproviders/mailboxproviders.java +++ b/examples/mailboxproviders/mailboxproviders.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java index ffdfe4a7..b74b48bf 100644 --- a/examples/mailsettings/mailsettings.java +++ b/examples/mailsettings/mailsettings.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/partnersettings/partnersettings.java b/examples/partnersettings/partnersettings.java index 01018524..b63508a9 100644 --- a/examples/partnersettings/partnersettings.java +++ b/examples/partnersettings/partnersettings.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/scopes/scopes.java b/examples/scopes/scopes.java index 194782b1..f892f6ad 100644 --- a/examples/scopes/scopes.java +++ b/examples/scopes/scopes.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/stats/stats.java b/examples/stats/stats.java index 0a406d53..cc108212 100644 --- a/examples/stats/stats.java +++ b/examples/stats/stats.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java index dfe5d1dd..8ca30304 100644 --- a/examples/subusers/subusers.java +++ b/examples/subusers/subusers.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java index ca42a126..688ab413 100644 --- a/examples/suppression/suppression.java +++ b/examples/suppression/suppression.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/templates/templates.java b/examples/templates/templates.java index 3f1e32aa..c5ff8879 100644 --- a/examples/templates/templates.java +++ b/examples/templates/templates.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/trackingsettings/trackingsettings.java b/examples/trackingsettings/trackingsettings.java index 41bba5b6..82deebe4 100644 --- a/examples/trackingsettings/trackingsettings.java +++ b/examples/trackingsettings/trackingsettings.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/user/user.java b/examples/user/user.java index c178ac49..a7879b29 100644 --- a/examples/user/user.java +++ b/examples/user/user.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java index 23adf16e..baabe3b7 100644 --- a/examples/whitelabel/whitelabel.java +++ b/examples/whitelabel/whitelabel.java @@ -1,11 +1,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; +import com.sendgrid.*; import java.io.IOException; import java.util.HashMap; From bd16973c7dfd09507ff14b63decfa1b343c1ae6f Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 27 Jun 2016 14:03:09 -0700 Subject: [PATCH 045/439] Simplified contributing example, clarified personalization default --- CONTRIBUTING.md | 3 ++- examples/helpers/mail/Example.java | 15 +++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index baa5be7b..8679f102 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -94,6 +94,7 @@ See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/master/ Check out the documentation for [Web API v3 endpoints](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html). ```bash +./gradlew build cd examples touch Example.java ``` @@ -101,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ./dependencies/jackson-annotations-2.7.0.jar:./dependencies/jackson-databind-2.7.3.jar:./dependencies/jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ./dependencies/jackson-annotations-2.7.0.jar:./dependencies/jackson-databind-2.7.3.jar:./dependencies/jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/3.0.0/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.0/sendgrid-3.0.0-jar.jar:. Example ``` diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index a0f530bb..f40fac05 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -213,6 +213,9 @@ public static Mail buildHelloEmail() throws IOException { String subject = "Hello World from the SendGrid Java Library"; Email to = new Email("test@example.com"); Content content = new Content("text/plain", "some text here"); + // Note that when you use this constructor an initial personalization object + // is created for you. It can be accessed via + // mail.personalization.get(0) as it is a List object Mail mail = new Mail(from, subject, to, content); Email email = new Email("test2@example.com"); mail.personalization.get(0).addTo(email); @@ -229,11 +232,11 @@ public static void baselineExample() throws IOException { try { request.method = Method.POST; request.endpoint = "mail/send"; - request.requestBody = helloWorld.build(); + request.body = helloWorld.build(); Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } @@ -248,11 +251,11 @@ public static void kitchenSinkExample() throws IOException { try { request.method = Method.POST; request.endpoint = "mail/send"; - request.requestBody = kitchenSink.build(); + request.body = kitchenSink.build(); Response response = sg.api(request); System.out.println(response.statusCode); - System.out.println(response.responseBody); - System.out.println(response.responseHeaders); + System.out.println(response.body); + System.out.println(response.headers); } catch (IOException ex) { throw ex; } From f2360f18f97d85ed87d1a9258e68f52f4e187190 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 28 Jun 2016 12:51:05 -0700 Subject: [PATCH 046/439] Version Bump v3.0.1: Added default Accept header --- CHANGELOG.md | 4 ++++ README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/SendGrid.java | 1 + src/test/java/com/sendgrid/SendGridTest.java | 1 + 6 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 738f8668..ec6165d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.0.1] - 2016-06-28 +### Fixed +- Accept header via [Get Satisfaction](https://community.sendgrid.com/sendgrid/topics/sendgrid-v3-webapi-issue-with-accept-header-response-406-not-acceptable) + ## [3.0.0] - 2016-06-13 ### Added - Breaking change to support the v3 Web API diff --git a/README.md b/README.md index ecaf4fd3..e103d8bf 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.0.0' + compile 'com.sendgrid:sendgrid-java:3.0.1' } repositories { @@ -72,7 +72,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.0/sendgrid-java-3.0.0-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.1/sendgrid-java-3.0.1-jar.jar) ```java import com.sendgrid.*; diff --git a/build.gradle b/build.gradle index fd696be8..7ded3d21 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.0.0' +version = '3.0.1' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 3ffc3575..187d1d14 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.0.0 + 3.0.1 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index d70b0608..8841291e 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -45,6 +45,7 @@ public void initializeSendGrid(String apiKey) { this.requestHeaders = new HashMap(); this.requestHeaders.put("Authorization", "Bearer " + apiKey); this.requestHeaders.put("User-agent", USER_AGENT); + this.requestHeaders.put("Accept", "application/json"); } public String getLibraryVersion() { diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index d54ee3b0..e5defeb3 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -21,6 +21,7 @@ public Map buildDefaultHeaders() { requestHeaders.put("Authorization", "Bearer " + SENDGRID_API_KEY); String USER_AGENT = "sendgrid/" + sg.getLibraryVersion() + ";java"; requestHeaders.put("User-agent", USER_AGENT); + requestHeaders.put("Accept", "application/json"); return requestHeaders; } From 48f5cbc0c9726a8f1025f3f861ca9e8757856d44 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 5 Jul 2016 15:02:34 -0700 Subject: [PATCH 047/439] Version Bump v3.0.2: swagger/oai updates --- CHANGELOG.md | 4 + README.md | 9 +- USAGE.md | 313 +++++++++++++++++-- build.gradle | 2 +- examples/alerts/alerts.java | 121 +++++++ examples/apikeys/apikeys.java | 5 +- examples/asm/asm.java | 23 ++ examples/campaigns/campaigns.java | 4 +- examples/contactdb/contactdb.java | 13 +- examples/mail/mail.java | 3 +- examples/subusers/subusers.java | 6 +- examples/suppression/suppression.java | 4 +- examples/user/user.java | 92 +++++- pom.xml | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 235 ++++++++++++-- 15 files changed, 774 insertions(+), 62 deletions(-) create mode 100644 examples/alerts/alerts.java diff --git a/CHANGELOG.md b/CHANGELOG.md index ec6165d8..a9c0bf57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.0.2] - 2016-07-05 +### Updated +- Content based on our updated [Swagger/OAI doc](https://github.com/sendgrid/sendgrid-oai) + ## [3.0.1] - 2016-06-28 ### Fixed - Accept header via [Get Satisfaction](https://community.sendgrid.com/sendgrid/topics/sendgrid-v3-webapi-issue-with-accept-header-response-406-not-acceptable) diff --git a/README.md b/README.md index e103d8bf..7e26b7f0 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ **BREAKING CHANGE as of 2016.06.14** -Version `3.0.0` is a breaking change for the entire library. +Version `3.X.X` is a breaking change for the entire library. -Version 3.0.0 brings you full support for all Web API v3 endpoints. We +Version 3.X.X brings you full support for all Web API v3 endpoints. We have the following resources to get you started quickly: - [SendGrid @@ -17,6 +17,7 @@ have the following resources to get you started quickly: Documentation](https://github.com/sendgrid/sendgrid-java/tree/master/USAGE.md) - [Example Code](https://github.com/sendgrid/sendgrid-java/tree/master/examples) +- [Migration from v2 to v3](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/how_to_migrate_from_v2_to_v3_mail_send.html) Thank you for your continued support! @@ -47,7 +48,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.0.1' + compile 'com.sendgrid:sendgrid-java:3.0.2' } repositories { @@ -72,7 +73,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.1/sendgrid-java-3.0.1-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.2/sendgrid-java-3.0.2-jar.jar) ```java import com.sendgrid.*; diff --git a/USAGE.md b/USAGE.md index 2eb29190..7ec87202 100644 --- a/USAGE.md +++ b/USAGE.md @@ -23,6 +23,7 @@ public class Example { # Table of Contents * [ACCESS SETTINGS](#access_settings) +* [ALERTS](#alerts) * [API KEYS](#api_keys) * [ASM](#asm) * [BROWSERS](#browsers) @@ -213,6 +214,146 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ throw ex; } ``` + +# ALERTS + +## Create a new Alert + +**This endpoint allows you to create a new alert.** + +Alerts allow you to specify an email address to receive notifications regarding your email usage or statistics. +* Usage alerts allow you to set the threshold at which an alert will be sent. +* Stats notifications allow you to set how frequently you would like to receive email statistics reports. For example, "daily", "weekly", or "monthly". + +For more information about alerts, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/alerts.html). + +### POST /alerts + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "alerts"; + request.body = "{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all alerts + +**This endpoint allows you to retieve all of your alerts.** + +Alerts allow you to specify an email address to receive notifications regarding your email usage or statistics. +* Usage alerts allow you to set the threshold at which an alert will be sent. +* Stats notifications allow you to set how frequently you would like to receive email statistics reports. For example, "daily", "weekly", or "monthly". + +For more information about alerts, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/alerts.html). + +### GET /alerts + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "alerts"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Update an alert + +**This endpoint allows you to update an alert.** + +Alerts allow you to specify an email address to receive notifications regarding your email usage or statistics. +* Usage alerts allow you to set the threshold at which an alert will be sent. +* Stats notifications allow you to set how frequently you would like to receive email statistics reports. For example, "daily", "weekly", or "monthly". + +For more information about alerts, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/alerts.html). + +### PATCH /alerts/{alert_id} + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "alerts/{alert_id}"; + request.body = "{\"email_to\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a specific alert + +**This endpoint allows you to retrieve a specific alert.** + +Alerts allow you to specify an email address to receive notifications regarding your email usage or statistics. +* Usage alerts allow you to set the threshold at which an alert will be sent. +* Stats notifications allow you to set how frequently you would like to receive email statistics reports. For example, "daily", "weekly", or "monthly". + +For more information about alerts, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/alerts.html). + +### GET /alerts/{alert_id} + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "alerts/{alert_id}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete an alert + +**This endpoint allows you to delete an alert.** + +Alerts allow you to specify an email address to receive notifications regarding your email usage or statistics. +* Usage alerts allow you to set the threshold at which an alert will be sent. +* Stats notifications allow you to set how frequently you would like to receive email statistics reports. For example, "daily", "weekly", or "monthly". + +For more information about alerts, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/alerts.html). + +### DELETE /alerts/{alert_id} + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "alerts/{alert_id}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` # API KEYS @@ -237,7 +378,7 @@ See the [API Key Permissions List](https://sendgrid.com/docs/API_Reference/Web_A Request request = new Request(); request.method = Method.POST; request.endpoint = "api_keys"; - request.body = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + request.body = "{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.body); @@ -261,6 +402,9 @@ The API Keys feature allows customers to be able to generate an API Key credenti Request request = new Request(); request.method = Method.GET; request.endpoint = "api_keys"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.body); @@ -420,6 +564,10 @@ Each user can create up to 25 different suppression groups. This endpoint will return information for each group ID that you include in your request. To add a group ID to your request, simply append `&id=` followed by the group ID. +Suppressions are a list of email addresses that will not receive content sent under a given [group](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html). + +Suppression groups, or [unsubscribe groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html), allow you to label a category of content that you regularly send. This gives your recipients the ability to opt out of a specific set of your email. For example, you might define a group for your transactional email, and one for your marketing email so that your users can continue recieving your transactional email witout having to receive your marketing content. + ### GET /asm/groups @@ -573,6 +721,32 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups throw ex; } ``` +## Search for suppressions within a group + +**This endpoint allows you to search a suppression group for multiple suppressions.** + +When given a list of email addresses and a group ID, this endpoint will return only the email addresses that have been unsubscribed from the given group. + +Suppressions are a list of email addresses that will not receive content sent under a given [group](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html). + +### POST /asm/groups/{group_id}/suppressions/search + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/groups/{group_id}/suppressions/search"; + request.body = "{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` ## Delete a suppression from a suppression group **This endpoint allows you to remove a suppressed email address from the given suppression group.** @@ -600,7 +774,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups **This endpoint allows you to retrieve a list of all suppressions.** -Suppressions are email addresses that can be added to [groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html) to prevent certain types of emails from being delivered to those addresses. +Suppressions are a list of email addresses that will not receive content sent under a given [group](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html). ### GET /asm/suppressions @@ -693,9 +867,9 @@ A global suppression (or global unsubscribe) is an email address of a recipient ``` ## Retrieve all suppression groups for an email address -**This endpoint will return a list of all suppression groups, indicating if the given email address is suppressed for each group.** +**This endpoint returns the list of all groups that the given email address has been unsubscribed from.** -Suppressions are email addresses that can be added to [groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html) to prevent certain types of emails from being delivered to those addresses. +Suppressions are a list of email addresses that will not receive content sent under a given [group](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html). ### GET /asm/suppressions/{email} @@ -805,8 +979,8 @@ For more information: request.method = Method.GET; request.endpoint = "campaigns"; Map queryParams = new HashMap(); - queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1408,7 +1582,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.endpoint = "contactdb/lists/{list_id}"; request.body = "{\"name\":\"newlistname\"}"; Map queryParams = new HashMap(); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1434,7 +1608,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.method = Method.GET; request.endpoint = "contactdb/lists/{list_id}"; Map queryParams = new HashMap(); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1514,7 +1688,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1563,8 +1737,8 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.method = Method.DELETE; request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Map queryParams = new HashMap(); - queryParams.put("recipient_id", "0"); - queryParams.put("list_id", "0"); + queryParams.put("recipient_id", "1"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1757,7 +1931,8 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( request.method = Method.GET; request.endpoint = "contactdb/recipients/search"; Map queryParams = new HashMap(); - queryParams.put("{field_name}", "test_string"); + queryParams.put("%7Bfield_name%7D", "test_string"); + queryParams.put("{field_name}", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -1977,7 +2152,7 @@ For more information about segments in Marketing Campaigns, please see our [User request.method = Method.GET; request.endpoint = "contactdb/segments/{segment_id}"; Map queryParams = new HashMap(); - queryParams.put("segment_id", "0"); + queryParams.put("segment_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -2578,7 +2753,7 @@ This endpoint has a helper, check it out [here](https://github.com/sendgrid/send Request request = new Request(); request.method = Method.POST; request.endpoint = "mail/send"; - request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.body); @@ -3306,8 +3481,8 @@ For more information about Subusers: request.endpoint = "subusers"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); - queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3638,7 +3813,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ Map queryParams = new HashMap(); queryParams.put("date", "test_string"); queryParams.put("sort_by_direction", "asc"); - queryParams.put("limit", "0"); + queryParams.put("limit", "1"); queryParams.put("sort_by_metric", "test_string"); queryParams.put("offset", "1"); request.queryParams = queryParams; @@ -3786,8 +3961,8 @@ For more information see: request.method = Method.GET; request.endpoint = "suppression/bounces"; Map queryParams = new HashMap(); - queryParams.put("start_time", "0"); - queryParams.put("end_time", "0"); + queryParams.put("start_time", "1"); + queryParams.put("end_time", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -5189,11 +5364,35 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete throw ex; } ``` -## Retrieve Parse Webhook settings +## Create a parse setting + +**This endpoint allows you to create a new inbound parse setting.** + +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -**This endpoint allows you to retrieve your current inbound parse webhook settings.** +### POST /user/webhooks/parse/settings -SendGrid can parse the attachments and contents of incoming emails. The Parse API will POST the parsed email to a URL that you specify. For more information, see our Inbound [Parse Webhook documentation](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "user/webhooks/parse/settings"; + request.body = "{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve all parse settings + +**This endpoint allows you to retrieve all of your current inbound parse settings.** + +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). ### GET /user/webhooks/parse/settings @@ -5212,6 +5411,76 @@ SendGrid can parse the attachments and contents of incoming emails. The Parse AP throw ex; } ``` +## Update a parse setting + +**This endpoint allows you to update a specific inbound parse setting.** + +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). + +### PATCH /user/webhooks/parse/settings/{hostname} + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/webhooks/parse/settings/{hostname}"; + request.body = "{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Retrieve a specific parse setting + +**This endpoint allows you to retrieve a specific inbound parse setting.** + +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). + +### GET /user/webhooks/parse/settings/{hostname} + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/parse/settings/{hostname}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a parse setting + +**This endpoint allows you to delete a specific inbound parse setting.** + +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). + +### DELETE /user/webhooks/parse/settings/{hostname} + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "user/webhooks/parse/settings/{hostname}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` ## Retrieves Inbound Parse Webhook statistics. **This endpoint allows you to retrieve the statistics for your Parse Webhook useage.** diff --git a/build.gradle b/build.gradle index 7ded3d21..446ee4d4 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.0.1' +version = '3.0.2' ext.packaging = 'jar' allprojects { diff --git a/examples/alerts/alerts.java b/examples/alerts/alerts.java new file mode 100644 index 00000000..2ad8f27b --- /dev/null +++ b/examples/alerts/alerts.java @@ -0,0 +1,121 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a new Alert +// POST /alerts + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "alerts"; + request.body = "{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all alerts +// GET /alerts + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "alerts"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update an alert +// PATCH /alerts/{alert_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "alerts/{alert_id}"; + request.body = "{\"email_to\":\"example@example.com\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a specific alert +// GET /alerts/{alert_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "alerts/{alert_id}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete an alert +// DELETE /alerts/{alert_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "alerts/{alert_id}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/apikeys/apikeys.java b/examples/apikeys/apikeys.java index 1f6c8f79..83e00032 100644 --- a/examples/apikeys/apikeys.java +++ b/examples/apikeys/apikeys.java @@ -19,7 +19,7 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "api_keys"; - request.body = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + request.body = "{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.body); @@ -42,6 +42,9 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.GET; request.endpoint = "api_keys"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.body); diff --git a/examples/asm/asm.java b/examples/asm/asm.java index a33f0f79..e56a5676 100644 --- a/examples/asm/asm.java +++ b/examples/asm/asm.java @@ -167,6 +167,29 @@ public static void main(String[] args) throws IOException { } } +////////////////////////////////////////////////////////////////// +// Search for suppressions within a group +// POST /asm/groups/{group_id}/suppressions/search + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/groups/{group_id}/suppressions/search"; + request.body = "{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + ////////////////////////////////////////////////////////////////// // Delete a suppression from a suppression group // DELETE /asm/groups/{group_id}/suppressions/{email} diff --git a/examples/campaigns/campaigns.java b/examples/campaigns/campaigns.java index 3f28881e..f6a051df 100644 --- a/examples/campaigns/campaigns.java +++ b/examples/campaigns/campaigns.java @@ -43,8 +43,8 @@ public static void main(String[] args) throws IOException { request.method = Method.GET; request.endpoint = "campaigns"; Map queryParams = new HashMap(); - queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java index 22683a36..fa0ac9aa 100644 --- a/examples/contactdb/contactdb.java +++ b/examples/contactdb/contactdb.java @@ -178,7 +178,7 @@ public static void main(String[] args) throws IOException { request.endpoint = "contactdb/lists/{list_id}"; request.body = "{\"name\":\"newlistname\"}"; Map queryParams = new HashMap(); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -203,7 +203,7 @@ public static void main(String[] args) throws IOException { request.method = Method.GET; request.endpoint = "contactdb/lists/{list_id}"; Map queryParams = new HashMap(); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -278,7 +278,7 @@ public static void main(String[] args) throws IOException { Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -325,8 +325,8 @@ public static void main(String[] args) throws IOException { request.method = Method.DELETE; request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Map queryParams = new HashMap(); - queryParams.put("recipient_id", "0"); - queryParams.put("list_id", "0"); + queryParams.put("recipient_id", "1"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -490,6 +490,7 @@ public static void main(String[] args) throws IOException { request.method = Method.GET; request.endpoint = "contactdb/recipients/search"; Map queryParams = new HashMap(); + queryParams.put("%7Bfield_name%7D", "test_string"); queryParams.put("{field_name}", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); @@ -674,7 +675,7 @@ public static void main(String[] args) throws IOException { request.method = Method.GET; request.endpoint = "contactdb/segments/{segment_id}"; Map queryParams = new HashMap(); - queryParams.put("segment_id", "0"); + queryParams.put("segment_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/mail/mail.java b/examples/mail/mail.java index bcd6d8ea..bb856633 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -54,6 +54,7 @@ public static void main(String[] args) throws IOException { ////////////////////////////////////////////////////////////////// // v3 Mail Send // POST /mail/send + // This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/master/src/main/java/com/sendgrid/helpers/README.md). public class Example { @@ -63,7 +64,7 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "mail/send"; - request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); System.out.println(response.statusCode); System.out.println(response.body); diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java index 8ca30304..6a9500be 100644 --- a/examples/subusers/subusers.java +++ b/examples/subusers/subusers.java @@ -44,8 +44,8 @@ public static void main(String[] args) throws IOException { request.endpoint = "subusers"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); - queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -346,7 +346,7 @@ public static void main(String[] args) throws IOException { Map queryParams = new HashMap(); queryParams.put("date", "test_string"); queryParams.put("sort_by_direction", "asc"); - queryParams.put("limit", "0"); + queryParams.put("limit", "1"); queryParams.put("sort_by_metric", "test_string"); queryParams.put("offset", "1"); request.queryParams = queryParams; diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java index 688ab413..c5dbeaaa 100644 --- a/examples/suppression/suppression.java +++ b/examples/suppression/suppression.java @@ -115,8 +115,8 @@ public static void main(String[] args) throws IOException { request.method = Method.GET; request.endpoint = "suppression/bounces"; Map queryParams = new HashMap(); - queryParams.put("start_time", "0"); - queryParams.put("end_time", "0"); + queryParams.put("start_time", "1"); + queryParams.put("end_time", "1"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); diff --git a/examples/user/user.java b/examples/user/user.java index a7879b29..03c23df1 100644 --- a/examples/user/user.java +++ b/examples/user/user.java @@ -435,7 +435,30 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve Parse Webhook settings +// Create a parse setting +// POST /user/webhooks/parse/settings + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "user/webhooks/parse/settings"; + request.body = "{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all parse settings // GET /user/webhooks/parse/settings @@ -456,6 +479,73 @@ public static void main(String[] args) throws IOException { } } +////////////////////////////////////////////////////////////////// +// Update a parse setting +// PATCH /user/webhooks/parse/settings/{hostname} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/webhooks/parse/settings/{hostname}"; + request.body = "{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a specific parse setting +// GET /user/webhooks/parse/settings/{hostname} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/parse/settings/{hostname}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a parse setting +// DELETE /user/webhooks/parse/settings/{hostname} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "user/webhooks/parse/settings/{hostname}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + ////////////////////////////////////////////////////////////////// // Retrieves Inbound Parse Webhook statistics. // GET /user/webhooks/parse/stats diff --git a/pom.xml b/pom.xml index 187d1d14..70241bf9 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.0.1 + 3.0.2 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index e5defeb3..51bdcb1f 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -188,6 +188,103 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException Assert.assertEquals(204, response.statusCode); } + @Test + public void test_alerts_post() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "201"); + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "alerts"; + request.body = "{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_alerts_get() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "alerts"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_alerts__alert_id__patch() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "alerts/{alert_id}"; + request.body = "{\"email_to\":\"example@example.com\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_alerts__alert_id__get() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "alerts/{alert_id}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_alerts__alert_id__delete() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "204"); + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "alerts/{alert_id}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + @Test public void test_api_keys_post() throws IOException { SendGrid sg = null; @@ -203,7 +300,7 @@ public void test_api_keys_post() throws IOException { Request request = new Request(); request.method = Method.POST; request.endpoint = "api_keys"; - request.body = "{\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + request.body = "{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; Response response = sg.api(request); Assert.assertEquals(201, response.statusCode); } @@ -223,6 +320,9 @@ public void test_api_keys_get() throws IOException { Request request = new Request(); request.method = Method.GET; request.endpoint = "api_keys"; + Map queryParams = new HashMap(); + queryParams.put("limit", "1"); + request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); } @@ -444,6 +544,26 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { Assert.assertEquals(200, response.statusCode); } + @Test + public void test_asm_groups__group_id__suppressions_search_post() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "asm/groups/{group_id}/suppressions/search"; + request.body = "{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + @Test public void test_asm_groups__group_id__suppressions__email__delete() throws IOException { SendGrid sg = null; @@ -622,8 +742,8 @@ public void test_campaigns_get() throws IOException { request.method = Method.GET; request.endpoint = "campaigns"; Map queryParams = new HashMap(); - queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1084,7 +1204,7 @@ public void test_contactdb_lists__list_id__patch() throws IOException { request.endpoint = "contactdb/lists/{list_id}"; request.body = "{\"name\":\"newlistname\"}"; Map queryParams = new HashMap(); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1106,7 +1226,7 @@ public void test_contactdb_lists__list_id__get() throws IOException { request.method = Method.GET; request.endpoint = "contactdb/lists/{list_id}"; Map queryParams = new HashMap(); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1172,7 +1292,7 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { Map queryParams = new HashMap(); queryParams.put("page", "1"); queryParams.put("page_size", "1"); - queryParams.put("list_id", "0"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1213,8 +1333,8 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th request.method = Method.DELETE; request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; Map queryParams = new HashMap(); - queryParams.put("recipient_id", "0"); - queryParams.put("list_id", "0"); + queryParams.put("recipient_id", "1"); + queryParams.put("list_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(204, response.statusCode); @@ -1357,7 +1477,8 @@ public void test_contactdb_recipients_search_get() throws IOException { request.method = Method.GET; request.endpoint = "contactdb/recipients/search"; Map queryParams = new HashMap(); - queryParams.put("{field_name}", "test_string"); + queryParams.put("%7Bfield_name%7D", "test_string"); + queryParams.put("{field_name}", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1517,7 +1638,7 @@ public void test_contactdb_segments__segment_id__get() throws IOException { request.method = Method.GET; request.endpoint = "contactdb/segments/{segment_id}"; Map queryParams = new HashMap(); - queryParams.put("segment_id", "0"); + queryParams.put("segment_id", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -1937,7 +2058,7 @@ public void test_mail_batch__batch_id__get() throws IOException { } @Test - public void test_mail_send_beta_post() throws IOException { + public void test_mail_send_post() throws IOException { SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); @@ -1950,8 +2071,8 @@ public void test_mail_send_beta_post() throws IOException { Request request = new Request(); request.method = Method.POST; - request.endpoint = "mail/send/beta"; - request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"sub\":{\"%name%\":[\"John\",\"Jane\",\"Sam\"]}},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.endpoint = "mail/send"; + request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); Assert.assertEquals(202, response.statusCode); } @@ -2501,8 +2622,8 @@ public void test_subusers_get() throws IOException { request.endpoint = "subusers"; Map queryParams = new HashMap(); queryParams.put("username", "test_string"); - queryParams.put("limit", "0"); - queryParams.put("offset", "0"); + queryParams.put("limit", "1"); + queryParams.put("offset", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2767,7 +2888,7 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException Map queryParams = new HashMap(); queryParams.put("date", "test_string"); queryParams.put("sort_by_direction", "asc"); - queryParams.put("limit", "0"); + queryParams.put("limit", "1"); queryParams.put("sort_by_metric", "test_string"); queryParams.put("offset", "1"); request.queryParams = queryParams; @@ -2874,8 +2995,8 @@ public void test_suppression_bounces_get() throws IOException { request.method = Method.GET; request.endpoint = "suppression/bounces"; Map queryParams = new HashMap(); - queryParams.put("start_time", "0"); - queryParams.put("end_time", "0"); + queryParams.put("start_time", "1"); + queryParams.put("end_time", "1"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -3876,6 +3997,26 @@ public void test_user_webhooks_event_test_post() throws IOException { Assert.assertEquals(204, response.statusCode); } + @Test + public void test_user_webhooks_parse_settings_post() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "201"); + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "user/webhooks/parse/settings"; + request.body = "{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + @Test public void test_user_webhooks_parse_settings_get() throws IOException { SendGrid sg = null; @@ -3895,6 +4036,64 @@ public void test_user_webhooks_parse_settings_get() throws IOException { Assert.assertEquals(200, response.statusCode); } + @Test + public void test_user_webhooks_parse_settings__hostname__patch() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "user/webhooks/parse/settings/{hostname}"; + request.body = "{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_webhooks_parse_settings__hostname__get() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "user/webhooks/parse/settings/{hostname}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_user_webhooks_parse_settings__hostname__delete() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "204"); + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "user/webhooks/parse/settings/{hostname}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + @Test public void test_user_webhooks_parse_stats_get() throws IOException { SendGrid sg = null; From e76e7c207de84d7bb44a34fc193687fa502c7fb3 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 12 Jul 2016 10:44:32 -0700 Subject: [PATCH 048/439] Version Bump v3.0.3: Update docs, unit tests and examples to include Sender ID --- CHANGELOG.md | 4 + README.md | 4 +- USAGE.md | 151 ++++++++++++++++++- build.gradle | 2 +- examples/contactdb/contactdb.java | 1 - examples/senders/senders.java | 143 ++++++++++++++++++ pom.xml | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 119 ++++++++++++++- 8 files changed, 417 insertions(+), 9 deletions(-) create mode 100644 examples/senders/senders.java diff --git a/CHANGELOG.md b/CHANGELOG.md index a9c0bf57..d80ae836 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.0.3] - 2016-07-12 +### Added +- Update docs, unit tests and examples to include Sender ID + ## [3.0.2] - 2016-07-05 ### Updated - Content based on our updated [Swagger/OAI doc](https://github.com/sendgrid/sendgrid-oai) diff --git a/README.md b/README.md index 7e26b7f0..04800673 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.0.2' + compile 'com.sendgrid:sendgrid-java:3.0.3' } repositories { @@ -73,7 +73,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.2/sendgrid-java-3.0.2-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.3/sendgrid-java-3.0.3-jar.jar) ```java import com.sendgrid.*; diff --git a/USAGE.md b/USAGE.md index 7ec87202..98dcfb67 100644 --- a/USAGE.md +++ b/USAGE.md @@ -39,6 +39,7 @@ public class Example { * [MAILBOX PROVIDERS](#mailbox_providers) * [PARTNER SETTINGS](#partner_settings) * [SCOPES](#scopes) +* [SENDERS](#senders) * [STATS](#stats) * [SUBUSERS](#subusers) * [SUPPRESSION](#suppression) @@ -1931,8 +1932,7 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( request.method = Method.GET; request.endpoint = "contactdb/recipients/search"; Map queryParams = new HashMap(); - queryParams.put("%7Bfield_name%7D", "test_string"); - queryParams.put("{field_name}", "test_string"); + queryParams.put("{field_name}", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); System.out.println(response.statusCode); @@ -3398,6 +3398,153 @@ API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://s throw ex; } ``` + +# SENDERS + +## Create a Sender Identity + +**This endpoint allows you to create a new sender identity.** + +*You may create up to 100 unique sender identities.* + +Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. + +### POST /senders + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "senders"; + request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Get all Sender Identities + +**This endpoint allows you to retrieve a list of all sender identities that have been created for your account.** + +Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. + +### GET /senders + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "senders"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Update a Sender Identity + +**This endpoint allows you to update a sender identity.** + +Updates to `from.email` require re-verification. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. + +Partial updates are allowed, but fields that are marked as "required" in the POST (create) endpoint must not be nil if that field is included in the PATCH request. + +### PATCH /senders/{sender_id} + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "senders/{sender_id}"; + request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## View a Sender Identity + +**This endpoint allows you to retrieve a specific sender identity.** + +Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. + +### GET /senders/{sender_id} + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "senders/{sender_id}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Delete a Sender Identity + +**This endoint allows you to delete one of your sender identities.** + +Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. + +### DELETE /senders/{sender_id} + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "senders/{sender_id}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` +## Resend Sender Identity Verification + +**This enpdoint allows you to resend a sender identity verification email.** + +Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. + +### POST /senders/{sender_id}/resend_verification + + +```java + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "senders/{sender_id}/resend_verification"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + ``` # STATS diff --git a/build.gradle b/build.gradle index 446ee4d4..a19d0c70 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.0.2' +version = '3.0.3' ext.packaging = 'jar' allprojects { diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java index fa0ac9aa..e57e06a9 100644 --- a/examples/contactdb/contactdb.java +++ b/examples/contactdb/contactdb.java @@ -490,7 +490,6 @@ public static void main(String[] args) throws IOException { request.method = Method.GET; request.endpoint = "contactdb/recipients/search"; Map queryParams = new HashMap(); - queryParams.put("%7Bfield_name%7D", "test_string"); queryParams.put("{field_name}", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); diff --git a/examples/senders/senders.java b/examples/senders/senders.java new file mode 100644 index 00000000..f101b43f --- /dev/null +++ b/examples/senders/senders.java @@ -0,0 +1,143 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a Sender Identity +// POST /senders + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "senders"; + request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Get all Sender Identities +// GET /senders + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "senders"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update a Sender Identity +// PATCH /senders/{sender_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "senders/{sender_id}"; + request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// View a Sender Identity +// GET /senders/{sender_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "senders/{sender_id}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Sender Identity +// DELETE /senders/{sender_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "senders/{sender_id}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Resend Sender Identity Verification +// POST /senders/{sender_id}/resend_verification + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "senders/{sender_id}/resend_verification"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/pom.xml b/pom.xml index 70241bf9..a7c6384f 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.0.2 + 3.0.3 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 51bdcb1f..a7856fda 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -1477,8 +1477,7 @@ public void test_contactdb_recipients_search_get() throws IOException { request.method = Method.GET; request.endpoint = "contactdb/recipients/search"; Map queryParams = new HashMap(); - queryParams.put("%7Bfield_name%7D", "test_string"); - queryParams.put("{field_name}", "test_string"); + queryParams.put("{field_name}", "test_string"); request.queryParams = queryParams; Response response = sg.api(request); Assert.assertEquals(200, response.statusCode); @@ -2559,6 +2558,122 @@ public void test_scopes_get() throws IOException { Assert.assertEquals(200, response.statusCode); } + @Test + public void test_senders_post() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "201"); + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "senders"; + request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + Response response = sg.api(request); + Assert.assertEquals(201, response.statusCode); + } + + @Test + public void test_senders_get() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "senders"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_senders__sender_id__patch() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.PATCH; + request.endpoint = "senders/{sender_id}"; + request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_senders__sender_id__get() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + request.method = Method.GET; + request.endpoint = "senders/{sender_id}"; + Response response = sg.api(request); + Assert.assertEquals(200, response.statusCode); + } + + @Test + public void test_senders__sender_id__delete() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "204"); + + Request request = new Request(); + request.method = Method.DELETE; + request.endpoint = "senders/{sender_id}"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + + @Test + public void test_senders__sender_id__resend_verification_post() throws IOException { + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "204"); + + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "senders/{sender_id}/resend_verification"; + Response response = sg.api(request); + Assert.assertEquals(204, response.statusCode); + } + @Test public void test_stats_get() throws IOException { SendGrid sg = null; From c39c95bf36e34ba1adc728044e3984d98772b2d3 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 14 Jul 2016 18:22:20 -0700 Subject: [PATCH 049/439] Typo in the CONTRIBUTING.md file --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8679f102..c8c4e2e4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/3.0.0/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.0/sendgrid-3.0.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/3.0.3/sendgrid-3.0.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.3/sendgrid-3.0.3-jar.jar:. Example ``` From e47cac4e118f33a02fa84c666fd1aef2c1950e79 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 19 Jul 2016 11:42:42 -0700 Subject: [PATCH 050/439] Updated java-http-client dependency to fix #120 --- build.gradle | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/SendGrid.java | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index a19d0c70..29cc46fb 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ buildscript { } dependencies { - compile 'com.sendgrid:java-http-client:2.3.1' + compile 'com.sendgrid:java-http-client:2.3.2' compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' diff --git a/pom.xml b/pom.xml index a7c6384f..4cbc150f 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ com.sendgrid java-http-client - 2.3.1 + 2.3.2 com.fasterxml.jackson.core diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 8841291e..4f0ded91 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -32,6 +32,7 @@ public SendGrid(String apiKey) { /** * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + * @param test is true if you are unit testing */ public SendGrid(String apiKey, Boolean test) { this.client = new Client(test); From a958043ad0ce94fc194d11b2202318f9aa14806a Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 19 Jul 2016 11:58:43 -0700 Subject: [PATCH 051/439] Version Bump v3.0.4: Fix for #120 --- CHANGELOG.md | 5 +++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d80ae836..52a9930c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.0.4] - 2016-07-19 +### Fixed +- [Fix for issue #120](https://github.com/sendgrid/sendgrid-java/issues/120): Unsupported Media Type if subject has letters with accent (like 'é' ) +- Updated [java-http-client](https://github.com/sendgrid/java-http-client) dependency to [2.3.2](https://github.com/sendgrid/java-http-client/releases/tag/v2.3.2) + ## [3.0.3] - 2016-07-12 ### Added - Update docs, unit tests and examples to include Sender ID diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c8c4e2e4..9fdd5aeb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/3.0.3/sendgrid-3.0.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.3/sendgrid-3.0.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/3.0.4/sendgrid-3.0.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.4/sendgrid-3.0.4-jar.jar:. Example ``` diff --git a/README.md b/README.md index 04800673..e7da54a5 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.0.3' + compile 'com.sendgrid:sendgrid-java:3.0.4' } repositories { @@ -73,7 +73,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.3/sendgrid-java-3.0.3-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.4/sendgrid-java-3.0.4-jar.jar) ```java import com.sendgrid.*; diff --git a/build.gradle b/build.gradle index 29cc46fb..40715ef3 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.0.3' +version = '3.0.4' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 4cbc150f..05574a76 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.0.3 + 3.0.4 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java From af71b3504db6f2055f92b521e341a96e274416a4 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 19 Jul 2016 15:38:42 -0700 Subject: [PATCH 052/439] Added supported versions to the README --- CONTRIBUTING.md | 2 +- README.md | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9fdd5aeb..876d70ee 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -64,7 +64,7 @@ We welcome direct contributions to the sendgrid-java code base. Thank you! ##### Prerequisites ##### -- Java 1.7 through 1.8 +- Java version Oracle JDK 7, 8 or OpenJDK 7 - [java-http-client](https://github.com/sendgrid/java-http-client) ##### Initial setup: ##### diff --git a/README.md b/README.md index e7da54a5..321815f5 100644 --- a/README.md +++ b/README.md @@ -25,11 +25,14 @@ All updates to this library is documented in our [CHANGELOG](https://github.com/ # Installation -## Setup Environment Variables +## Prerequisites + +- Java version Oracle JDK 7, 8 or OpenJDK 7 +- The SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) -First, get your free SendGrid account [here](https://sendgrid.com/free?source=sendgrid-java). +## Setup Environment Variables -Next, update your environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys). +Update your environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys). ```bash echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env @@ -81,7 +84,6 @@ import com.sendgrid.*; ## Dependencies -- The SendGrid Service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) # Quick Start From 44fb445d81f90b02691caa4c100f6050bf0df5b1 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 20 Jul 2016 17:30:59 -0700 Subject: [PATCH 053/439] README documentation updates --- README.md | 80 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 53 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 321815f5..a9ba45f5 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,14 @@ -[![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) [![BuildStatus](https://maven-badges.herokuapp.com/maven-central/com.sendgrid/sendgrid-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.sendgrid/sendgrid-java) +[![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) -**This library allows you to quickly and easily use the SendGrid Web API via Java.** +**This library allows you to quickly and easily use the SendGrid Web API v3 via Java.** -# Announcements - -**BREAKING CHANGE as of 2016.06.14** - -Version `3.X.X` is a breaking change for the entire library. +Version 3.X.X of this library provides full support for all SendGrid [Web API v3](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) endpoints, including the new [v3 /mail/send](https://sendgrid.com/blog/introducing-v3mailsend-sendgrids-new-mail-endpoint). -Version 3.X.X brings you full support for all Web API v3 endpoints. We -have the following resources to get you started quickly: +This library represents the beginning of a new path for SendGrid. We want this library to be community driven and SendGrid led. We need your help to realize this goal. To help make sure we are building the right things in the right order, we ask that you create [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) or simply upvote or comment on existing issues or pull requests. -- [SendGrid - Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) -- [Usage - Documentation](https://github.com/sendgrid/sendgrid-java/tree/master/USAGE.md) -- [Example - Code](https://github.com/sendgrid/sendgrid-java/tree/master/examples) -- [Migration from v2 to v3](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/how_to_migrate_from_v2_to_v3_mail_send.html) +Please browse the rest of this README for further detail. -Thank you for your continued support! - -All updates to this library is documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md). +We appreciate your continued support, thank you! # Installation @@ -32,7 +19,7 @@ All updates to this library is documented in our [CHANGELOG](https://github.com/ ## Setup Environment Variables -Update your environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys). +Update the development environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys), for example: ```bash echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env @@ -90,6 +77,10 @@ import com.sendgrid.*; ## Hello Email +The following is the minimum needed code to send an email with the [/mail/send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) ([here](https://github.com/sendgrid/sendgrid-java/blob/master/examples/helpers/mail/Example.java#L30) is a full example): + +### With Mail Helper Class + ```java import com.sendgrid.*; import java.io.IOException; @@ -97,9 +88,9 @@ import java.io.IOException; public class Example { public static void main(String[] args) throws IOException { Email from = new Email("test@example.com"); - String subject = "Hello World from the SendGrid Java Library"; + String subject = "Hello World from the SendGrid Java Library!"; Email to = new Email("test@example.com"); - Content content = new Content("text/plain", "some text here"); + Content content = new Content("text/plain", "Hello, Email!"); Mail mail = new Mail(from, subject, to, content); SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -119,6 +110,35 @@ public class Example { } ``` +The `Mail` constructor creates a [personalization object](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/personalizations.html) for you. [Here](https://github.com/sendgrid/sendgrid-java/blob/master/examples/helpers/mail/Example.java#L221) is an example of how to add to it. + +### Without Mail Helper Class + +The following is the minimum needed code to send an email without the /mail/send Helper ([here](https://github.com/sendgrid/sendgrid-java/blob/master/examples/mail/mail.java#L54) is a full example): + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "mail/send"; + request.body = "{\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the SendGrid Java Library!\"}],\"from\":{\"email\":\"test@example.com\"},\"content\":[{\"type\":\"text/plain\",\"value\": \"Hello, Email!\"}]}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} +``` + ## General v3 Web API Usage ```java @@ -146,16 +166,22 @@ public class Example { # Usage - [SendGrid Docs](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) -- [Usage Docs](https://github.com/sendgrid/sendgrid-java/tree/master/USAGE.md) +- [Library Usage Docs](https://github.com/sendgrid/sendgrid-java/tree/master/USAGE.md) - [Example Code](https://github.com/sendgrid/sendgrid-java/tree/master/examples) +- [How-to: Migration from v2 to v3](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/how_to_migrate_from_v2_to_v3_mail_send.html) +- [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. + +# Announcements + +All updates to this library is documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). -## Roadmap +# Roadmap -If you are intersted in the future direction of this project, please take a look at our [milestones](https://github.com/sendgrid/sendgrid-java/milestones). We would love to hear your feedback. +If you are interested in the future direction of this project, please take a look at our open [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](https://github.com/sendgrid/sendgrid-java/pulls). We would love to hear your feedback. -## How to Contribute +# How to Contribute -We encourage contribution to our libraries, please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) guide for details. +We encourage contribution to our libraries (you might even score some nifty swag), please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) guide for details. Quick links: From c9887482b868e3fced15e0a4f7f712452f254a19 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 20 Jul 2016 17:41:39 -0700 Subject: [PATCH 054/439] Version Bump v3.0.5: README documentation update --- CHANGELOG.md | 7 +++++++ README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52a9930c..d7a851be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.0.5] - 2016-07-20 +### Added +- README updates +- Update introduction blurb to include information regarding our forward path +- Update the v3 /mail/send example to include non-helper usage +- Update the generic v3 example to include non-fluent interface usage + ## [3.0.4] - 2016-07-19 ### Fixed - [Fix for issue #120](https://github.com/sendgrid/sendgrid-java/issues/120): Unsupported Media Type if subject has letters with accent (like 'é' ) diff --git a/README.md b/README.md index a9ba45f5..6c526db2 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.0.4' + compile 'com.sendgrid:sendgrid-java:3.0.5' } repositories { @@ -63,7 +63,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.4/sendgrid-java-3.0.4-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.5/sendgrid-java-3.0.5-jar.jar) ```java import com.sendgrid.*; diff --git a/build.gradle b/build.gradle index 40715ef3..d37b5abe 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.0.4' +version = '3.0.5' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 05574a76..5883cca9 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.0.4 + 3.0.5 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java From e5471ae9b166c55993ae82f2af399c6e7ede4605 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 26 Jul 2016 10:26:52 -0700 Subject: [PATCH 055/439] Version Bump v3.0.6: Added troubleshooting section --- CHANGELOG.md | 4 ++ CONTRIBUTING.md | 2 +- README.md | 8 +++- TROUBLESHOOTING.md | 91 ++++++++++++++++++++++++++++++++++++++++++++++ build.gradle | 2 +- pom.xml | 2 +- 6 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 TROUBLESHOOTING.md diff --git a/CHANGELOG.md b/CHANGELOG.md index d7a851be..0a7a9790 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.0.6] - 2016-07-26 +### Added +- [Troubleshooting](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md) section + ## [3.0.5] - 2016-07-20 ### Added - README updates diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 876d70ee..88d4a3b8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/3.0.4/sendgrid-3.0.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.4/sendgrid-3.0.4-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/3.0.6/sendgrid-3.0.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.6/sendgrid-3.0.6-jar.jar:. Example ``` diff --git a/README.md b/README.md index 6c526db2..9767e448 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.0.5' + compile 'com.sendgrid:sendgrid-java:3.0.6' } repositories { @@ -63,7 +63,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.5/sendgrid-java-3.0.5-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.6/sendgrid-java-3.0.6-jar.jar) ```java import com.sendgrid.*; @@ -190,6 +190,10 @@ Quick links: - [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#cla) - [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements_to_the_codebase) +# Troubleshooting + +Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java/blob/master/TROUBLESHOOTING.md) for common library issues. + # About sendgrid-java is guided and supported by the SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md new file mode 100644 index 00000000..ad53e211 --- /dev/null +++ b/TROUBLESHOOTING.md @@ -0,0 +1,91 @@ +If you have a non-library SendGrid issue, please contact our [support team](https://support.sendgrid.com). + +If you can't find a solution below, please open an [issue](https://github.com/sendgrid/sendgrid-java/issues). + + +## Table of Contents + +* [Migrating from v2 to v3](#migrating) +* [Continue Using v2](#v2) +* [Testing v3 /mail/send Calls Directly](#testing) +* [Versions](#versions) +* [Environment Variables and Your SendGrid API Key](#environment) +* [Using the Package Manager](#package-manager) + + +## Migrating from v2 to v3 + +Please review [our guide](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/how_to_migrate_from_v2_to_v3_mail_send.html) on how to migrate from v2 to v3. + + +## Continue Using v2 + +[Here](https://github.com/sendgrid/sendgrid-java/tree/b64988f85474e04e9d75e17860d64ffacda1cdff) is the last working version with v2 support. + +### via Maven w/ Gradle + +Add the following to your build.gradle file in the root of your project. + +```groovy +... +dependencies { + ... + compile 'com.sendgrid:sendgrid-java:2.2.2' +} + +repositories { + mavenCentral() +} +... +``` + +### via jar file + +You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. + +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/2.2.2/sendgrid-java-2.2.2-jar.jar) + + +## Testing v3 /mail/send Calls Directly + +[Here](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/curl_examples.html) are some cURL examples for common use cases. + + +## Versions + +We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guarenteed to be a breaking change. Changes are documented in the [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. + + +## Environment Variables and Your SendGrid API Key + +All of our examples assume you are using [environment variables](https://github.com/sendgrid/sendgrid-java#setup-environment-variables) to hold your SendGrid API key. + +If you choose to add your SendGrid API key directly (not recommended): + +`System.getenv("SENDGRID_API_KEY")` + +becomes + +`"SENDGRID_API_KEY"` + +In the first case SENDGRID_API_KEY is in reference to the name of the environment variable, while the second case references the actual SendGrid API Key. + + +## Using the Package Manager + +We upload this library to [Maven](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/) whenever we make a release. This allows you to use [maven and gradle](https://maven.apache.org/) for easy installation. + +In most cases we recommend you download the latest version of the library, but if you need a different version, please use: + +```groovy +... +dependencies { + ... + compile 'com.sendgrid:sendgrid-java:X.X.X' +} + +repositories { + mavenCentral() +} +... +``` \ No newline at end of file diff --git a/build.gradle b/build.gradle index d37b5abe..e0e7eb1c 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.0.5' +version = '3.0.6' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 5883cca9..44db13e0 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.0.5 + 3.0.6 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java From feffaab9583ee4dba085880fcc9aa9ccd4a36b77 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 4 Aug 2016 14:43:30 -0700 Subject: [PATCH 056/439] Android compatability --- TROUBLESHOOTING.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index ad53e211..35b2b348 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -11,6 +11,7 @@ If you can't find a solution below, please open an [issue](https://github.com/se * [Versions](#versions) * [Environment Variables and Your SendGrid API Key](#environment) * [Using the Package Manager](#package-manager) +* [Android Compatibility](#android) ## Migrating from v2 to v3 @@ -88,4 +89,11 @@ repositories { mavenCentral() } ... -``` \ No newline at end of file +``` + + +## Android Compatibility + +Since Android SDK 23, HttpClient is no longer supported. Some workarounds can be found [here](http://stackoverflow.com/questions/32153318/httpclient-wont-import-in-android-studio). + +We have an issue to remove that dependency [here](https://github.com/sendgrid/java-http-client/issues/2), please upvote to move it up the queue. \ No newline at end of file From 7492ee08cb61d9760873a9a2e8c6eefad3ab5651 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 8 Aug 2016 11:14:47 -0700 Subject: [PATCH 057/439] Version Bump v3.0.7: Error handling improvements --- CHANGELOG.md | 8 ++++++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- build.gradle | 4 ++-- pom.xml | 4 ++-- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a7a9790..4a486e09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.0.7] - 2017-08-08 +### Added +- Updated dependency for [java-http-client](https://github.com/sendgrid/java-http-client/releases/tag/v2.3.3) +- Pull request [#11](https://github.com/sendgrid/java-http-client/pull/11) +- Solves [issue #10](https://github.com/sendgrid/java-http-client/issues/10): Improve Error Handling +- Now error messages are passed through from the SendGrid server +- BIG thanks to [shuron](https://github.com/shuron) / [Alexander Holbreich](https://github.com/aholbreich) for the pull request! + ## [3.0.6] - 2016-07-26 ### Added - [Troubleshooting](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md) section diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 88d4a3b8..50180316 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/3.0.6/sendgrid-3.0.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.6/sendgrid-3.0.6-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/3.0.7/sendgrid-3.0.7-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.7/sendgrid-3.0.7-jar.jar:. Example ``` diff --git a/README.md b/README.md index 9767e448..93467f46 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.0.6' + compile 'com.sendgrid:sendgrid-java:3.0.7' } repositories { @@ -63,7 +63,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.6/sendgrid-java-3.0.6-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.7/sendgrid-java-3.0.7-jar.jar) ```java import com.sendgrid.*; diff --git a/build.gradle b/build.gradle index e0e7eb1c..cca0a1c9 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.0.6' +version = '3.0.7' ext.packaging = 'jar' allprojects { @@ -45,7 +45,7 @@ buildscript { } dependencies { - compile 'com.sendgrid:java-http-client:2.3.2' + compile 'com.sendgrid:java-http-client:2.3.3' compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' diff --git a/pom.xml b/pom.xml index 44db13e0..8e73d33f 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.0.6 + 3.0.7 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -89,7 +89,7 @@ com.sendgrid java-http-client - 2.3.2 + 2.3.3 com.fasterxml.jackson.core From 7dd02e91782182a3f3d51faa6e3177d4c34ae120 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 9 Aug 2016 10:39:30 -0700 Subject: [PATCH 058/439] Version Bump v2.3.4: Fix Response Charset to UTF-8 --- CHANGELOG.md | 9 ++++++++- CONTRIBUTING.md | 2 +- README.md | 4 ++-- build.gradle | 4 ++-- pom.xml | 4 ++-- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a486e09..7a806890 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,14 @@ # Change Log All notable changes to this project will be documented in this file. -## [3.0.7] - 2017-08-08 +## [3.0.8] - 2016-08-09 +### Fixed +- Updated dependency for [java-http-client](https://github.com/sendgrid/java-http-client/releases/tag/v2.3.4) +- [Pull #7](https://github.com/sendgrid/java-http-client/pull/7): Fix Response Charset to UTF-8 +- Fixes [issue #6](https://github.com/sendgrid/java-http-client/issues/6): Multi-byte character got garbled on received mail +- BIG thanks to [Yoichi Kikuta](https://github.com/kikutaro) for the pull request! + +## [3.0.7] - 2016-08-08 ### Added - Updated dependency for [java-http-client](https://github.com/sendgrid/java-http-client/releases/tag/v2.3.3) - Pull request [#11](https://github.com/sendgrid/java-http-client/pull/11) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 50180316..15b6412c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/3.0.7/sendgrid-3.0.7-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.7/sendgrid-3.0.7-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/3.0.8/sendgrid-3.0.8-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.8/sendgrid-3.0.8-jar.jar:. Example ``` diff --git a/README.md b/README.md index 93467f46..a04a11d4 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.0.7' + compile 'com.sendgrid:sendgrid-java:3.0.8' } repositories { @@ -63,7 +63,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.7/sendgrid-java-3.0.7-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.8/sendgrid-java-3.0.8-jar.jar) ```java import com.sendgrid.*; diff --git a/build.gradle b/build.gradle index cca0a1c9..67913ce1 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.0.7' +version = '3.0.8' ext.packaging = 'jar' allprojects { @@ -45,7 +45,7 @@ buildscript { } dependencies { - compile 'com.sendgrid:java-http-client:2.3.3' + compile 'com.sendgrid:java-http-client:2.3.4' compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' diff --git a/pom.xml b/pom.xml index 8e73d33f..44e9021e 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.0.7 + 3.0.8 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -89,7 +89,7 @@ com.sendgrid java-http-client - 2.3.3 + 2.3.4 com.fasterxml.jackson.core From f19ba88e92ca546d66fca9aaa561cf2f20cf469b Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 24 Aug 2016 15:09:32 -0700 Subject: [PATCH 059/439] Add Table of Contents to README and create USE_CASES section --- README.md | 26 +++++++++++++ USE_CASES.md | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 USE_CASES.md diff --git a/README.md b/README.md index a04a11d4..7828f9f1 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,19 @@ Please browse the rest of this README for further detail. We appreciate your continued support, thank you! +# Table of Contents + +* [Installation](#installation) +* [Quick Start](#quick_start) +* [Usage](#usage) +* [Use Cases](#use_cases) +* [Announcements](#announcements) +* [Roadmap](#roadmap) +* [How to Contribute](#contribute) +* [Troubleshooting](#troubleshooting) +* [About](#about) + + # Installation ## Prerequisites @@ -73,6 +86,7 @@ import com.sendgrid.*; - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) + # Quick Start ## Hello Email @@ -163,6 +177,7 @@ public class Example { } ``` + # Usage - [SendGrid Docs](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) @@ -171,14 +186,23 @@ public class Example { - [How-to: Migration from v2 to v3](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/how_to_migrate_from_v2_to_v3_mail_send.html) - [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. + + +# Use Cases + +[Examples of common API use cases](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md), such as how to send an email with a transactional template. + + # Announcements All updates to this library is documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). + # Roadmap If you are interested in the future direction of this project, please take a look at our open [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](https://github.com/sendgrid/sendgrid-java/pulls). We would love to hear your feedback. + # How to Contribute We encourage contribution to our libraries (you might even score some nifty swag), please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) guide for details. @@ -190,10 +214,12 @@ Quick links: - [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#cla) - [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements_to_the_codebase) + # Troubleshooting Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java/blob/master/TROUBLESHOOTING.md) for common library issues. + # About sendgrid-java is guided and supported by the SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). diff --git a/USE_CASES.md b/USE_CASES.md new file mode 100644 index 00000000..76cec618 --- /dev/null +++ b/USE_CASES.md @@ -0,0 +1,101 @@ +This documentation provides examples for specific use cases. Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues) or make a pull request for any use cases you would like us to document here. Thank you! + +# Table of Contents + +* [Transactional Templates](#transactional_templates) + + +# Transactional Templates + +For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. + +Template ID (replace with your own): + +```text +13b8f94f-bcae-4ec6-b752-70d6cb59f932 +``` + +Email Subject: + +```text +<%subject%> +``` + +Template Body: + +```html + + + + + +Hello -name-, +

    +I'm glad you are trying out the template feature! +

    +<%body%> +

    +I hope you are having a great day in -city- :) +

    + + +``` + +## With Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + Email from = new Email("test@example.com"); + String subject = "I'm replacing the subject tag"; + Email to = new Email("test@example.com"); + Content content = new Content("text/html", "I'm replacing the body tag"); + Mail mail = new Mail(from, subject, to, content); + mail.personalization.get(0).addSubstitution("-name-", "Example User"); + mail.personalization.get(0).addSubstitution("-city-", "Denver"); + mail.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); + + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + request.method = Method.POST; + request.endpoint = "mail/send"; + request.body = mail.build(); + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} +``` + +## Without Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.method = Method.POST; + request.endpoint = "mail/send"; + request.body = "{\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"substitutions\":{\"-name-\":\"Example User\",\"-city-\":\"Denver\"},\"subject\":\"Hello World from the SendGrid Java Library!\"}],\"from\":{\"email\":\"test@example.com\"},\"content\":[{\"type\":\"text/html\",\"value\": \"I'm replacing the body tag\"}],\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"; + Response response = sg.api(request); + System.out.println(response.statusCode); + System.out.println(response.body); + System.out.println(response.headers); + } catch (IOException ex) { + throw ex; + } + } +} +``` \ No newline at end of file From d6ca1b40d3b32ddeaf742320badc7265ad3dc9cf Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 24 Aug 2016 15:29:31 -0700 Subject: [PATCH 060/439] Version Bump v3.0.9: Added TOC to README, Added USE_CASES.md --- CHANGELOG.md | 5 +++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a806890..62baabb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.0.9] - 2016-08-24 +### Added +- Table of Contents in the README +- Added a [USE_CASES.md](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md) section, with the first use case example for transactional templates + ## [3.0.8] - 2016-08-09 ### Fixed - Updated dependency for [java-http-client](https://github.com/sendgrid/java-http-client/releases/tag/v2.3.4) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 15b6412c..f3e4d87d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/3.0.8/sendgrid-3.0.8-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.8/sendgrid-3.0.8-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/3.0.9/sendgrid-3.0.9-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.9/sendgrid-3.0.9-jar.jar:. Example ``` diff --git a/README.md b/README.md index 7828f9f1..b3140d53 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.0.8' + compile 'com.sendgrid:sendgrid-java:3.0.9' } repositories { @@ -76,7 +76,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.8/sendgrid-java-3.0.8-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.9/sendgrid-java-3.0.9-jar.jar) ```java import com.sendgrid.*; diff --git a/build.gradle b/build.gradle index 67913ce1..92bc729d 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.0.8' +version = '3.0.9' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 44e9021e..10d4ba63 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.0.8 + 3.0.9 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java From 9d14b953c97477e968b9b36aafe5f0776c643918 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 12 Sep 2016 10:51:06 -0700 Subject: [PATCH 061/439] Breaking Changes Update --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index b3140d53..995fc2f6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ [![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) +Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! + **This library allows you to quickly and easily use the SendGrid Web API v3 via Java.** Version 3.X.X of this library provides full support for all SendGrid [Web API v3](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) endpoints, including the new [v3 /mail/send](https://sendgrid.com/blog/introducing-v3mailsend-sendgrids-new-mail-endpoint). @@ -195,6 +197,8 @@ public class Example { # Announcements +Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! + All updates to this library is documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). From 09d9114436ed13654b9ee77b31b2ae5b19b8351d Mon Sep 17 00:00:00 2001 From: David Maicher Date: Tue, 11 Oct 2016 18:42:39 +0200 Subject: [PATCH 062/439] [Enhancement] allow using custom Client --- pom.xml | 8 +++++++- src/main/java/com/sendgrid/SendGrid.java | 14 +++++++++----- src/test/java/com/sendgrid/SendGridTest.java | 14 ++++++++++---- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 10d4ba63..b9e4ab0c 100644 --- a/pom.xml +++ b/pom.xml @@ -109,7 +109,13 @@ junit junit-dep - 4.10 + 4.11 + test + + + org.mockito + mockito-core + 2.1.0 test diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 4f0ded91..b8af3a34 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -1,10 +1,5 @@ package com.sendgrid; -import com.sendgrid.Client; -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; - import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -39,6 +34,15 @@ public SendGrid(String apiKey, Boolean test) { initializeSendGrid(apiKey); } + /** + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + * @param client the Client to use (allows to customize its configuration) + */ + public SendGrid(String apiKey, Client client) { + this.client = client; + initializeSendGrid(apiKey); + } + public void initializeSendGrid(String apiKey) { this.apiKey = apiKey; this.host = "api.sendgrid.com"; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index a7856fda..dca0222d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -1,15 +1,12 @@ package com.sendgrid; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import static org.mockito.Mockito.*; public class SendGridTest { @@ -34,6 +31,15 @@ public void testInitialization() { Assert.assertEquals(sg.getRequestHeaders(), requestHeaders); } + @Test + public void testConstructWithClient() throws IOException { + Client client = mock(Client.class); + SendGrid sg = new SendGrid(SENDGRID_API_KEY, client); + Request request = new Request(); + sg.makeCall(request); + verify(client).api(request); + } + @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); From 168bef65f9d026aa8252ae6c09b4ba1d9ddac86d Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 11 Oct 2016 14:42:35 -0700 Subject: [PATCH 063/439] Version Bump v3.1.0: PR #158, Solves #138 [Enhancement] allow using custom Client, http proxy support --- CHANGELOG.md | 6 ++++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62baabb3..d1f8eb9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.1.0] - 2016-10-11 +### Added +- PR #158, Solves #138 +- [Enhancement] allow using custom Client, http proxy support +- BIG thanks to [David Maicher](https://github.com/dmaicher) for the pull request! + ## [3.0.9] - 2016-08-24 ### Added - Table of Contents in the README diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f3e4d87d..2edd95cd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/3.0.9/sendgrid-3.0.9-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.0.9/sendgrid-3.0.9-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/3.1.0/sendgrid-3.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.1.0/sendgrid-3.1.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 995fc2f6..09661eec 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.0.9' + compile 'com.sendgrid:sendgrid-java:3.1.0' } repositories { @@ -78,7 +78,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.0.9/sendgrid-java-3.0.9-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.1.0/sendgrid-java-3.1.0-jar.jar) ```java import com.sendgrid.*; diff --git a/build.gradle b/build.gradle index 92bc729d..8923ad3f 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.0.9' +version = '3.1.0' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index b9e4ab0c..fa9f0d15 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.0.9 + 3.1.0 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java From 8ceea4258a11521de31a0681f1108be5afc9c37d Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 12 Oct 2016 12:48:45 -0700 Subject: [PATCH 064/439] Update testing instructions --- CONTRIBUTING.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2edd95cd..2b81c9fe 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -129,6 +129,22 @@ All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tr For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. +1. Download [prism](https://stoplight.io/prism/) for your platform ([Mac OS X](https://github.com/stoplightio/prism/releases/download/v0.1.5/prism_darwin_amd64)) and save the binary to the sendgrid-ruby directory (or any directory you would like. The sendgrid-ruby directory is chosen mostly for convenience.) + +1. Add execute permissions + +```bash +chmod +x prism +``` + +1. In a separate terminal, cd into the directory you chose for prism and start the sendgrid local server which the tests will use. + +```bash +./prism run --mock --list --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json +``` + +1. Now you can run the test suite from the root of the project + ```bash ./gradlew test -i ``` From 207a872443b9f175e1a98cc490b35f70570c16de Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 12 Oct 2016 12:51:10 -0700 Subject: [PATCH 065/439] Formating adjustment --- CONTRIBUTING.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2b81c9fe..4487756e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -133,21 +133,21 @@ For the purposes of contributing to this repo, please update the [`SendGridTest. 1. Add execute permissions -```bash -chmod +x prism -``` + ```bash + chmod +x prism + ``` 1. In a separate terminal, cd into the directory you chose for prism and start the sendgrid local server which the tests will use. -```bash -./prism run --mock --list --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json -``` + ```bash + ./prism run --mock --list --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json + ``` 1. Now you can run the test suite from the root of the project -```bash -./gradlew test -i -``` + ```bash + ./gradlew test -i + ``` ## Style Guidelines & Naming Conventions @@ -211,4 +211,4 @@ Please run your code through: 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. -If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. \ No newline at end of file +If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. From c04e25f7f3b819f61a3b21085d1a697238982c30 Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Tue, 18 Oct 2016 21:59:45 +0200 Subject: [PATCH 066/439] Fix #134. Adds an attachment builder class that supports passing content as InputStream. --- .../helpers/mail/objects/Attachments.java | 81 +++++++++++++++++++ .../helpers/AttachmentBuilderTest.java | 49 +++++++++++ 2 files changed, 130 insertions(+) create mode 100644 src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 46c779f4..9323b837 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -1,8 +1,12 @@ package com.sendgrid; +import com.fasterxml.jackson.annotation.JsonIgnoreType; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.commons.codec.binary.Base64; + +import java.io.*; @JsonInclude(Include.NON_DEFAULT) public class Attachments { @@ -56,4 +60,81 @@ public String getContentId() { public void setContentId(String contentId) { this.contentId = contentId; } + + @JsonIgnoreType + public static class Builder { + + private static final int BYTE_BUFFER_SIZE = 4096; + + private String fileName; + private String content; + private String type; + private String disposition; + private String contentId; + + public Builder(String fileName, InputStream content) { + if (fileName == null) { + throw new IllegalArgumentException("File name mustn't be null"); + } + + if (content == null) { + throw new IllegalArgumentException("Content mustn't be null"); + } + + this.fileName = fileName; + this.content = encodeToBase64(content); + } + + public Builder(String fileName, String content) { + if (fileName == null) { + throw new IllegalArgumentException("File name mustn't be null"); + } + + if (content == null) { + throw new IllegalArgumentException("Content mustn't be null"); + } + + this.fileName = fileName; + this.content = content; + } + + private String encodeToBase64(InputStream content) { + int read = 0; + byte[] bytes = new byte[BYTE_BUFFER_SIZE]; + try(ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + while ((read = content.read(bytes)) != -1) { + baos.write(bytes, 0, read); + } + + return Base64.encodeBase64String(baos.toByteArray()); + } catch (IOException e) { + throw new RuntimeException("Unable to convert content stream to base 64 encoded string", e); + } + } + + public Builder withType(String type) { + this.type = type; + return this; + } + + public Builder withDisposition(String disposition) { + this.disposition = disposition; + return this; + } + + public Builder withContentId(String contentId) { + this.contentId = contentId; + return this; + } + + public Attachments build() { + Attachments attachments = new Attachments(); + attachments.setContent(content); + attachments.setFilename(fileName); + attachments.setDisposition(disposition); + attachments.setContentId(contentId); + attachments.setType(type); + return attachments; + } + } } diff --git a/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java b/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java new file mode 100644 index 00000000..824e8145 --- /dev/null +++ b/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java @@ -0,0 +1,49 @@ +package com.sendgrid.helpers; + +import com.sendgrid.Attachments; +import org.apache.commons.codec.binary.Base64; +import org.junit.Assert; +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.Charset; + +public class AttachmentBuilderTest { + + @Test + public void testCreateAttachments() { + String fileName = "book.txt"; + String type = "text/plain"; + String content = "This test checks if the builder works fine"; + InputStream contentStream = new ByteArrayInputStream(content.getBytes(Charset.forName("UTF-8"))); + String contentId = "someId"; + String dispositon = "someDisposition"; + + Attachments attachments = new Attachments.Builder(fileName, contentStream) + .withType(type) + .withContentId(contentId) + .withDisposition(dispositon) + .build(); + + Assert.assertEquals(attachments.getType(), type); + Assert.assertEquals(attachments.getFilename(), fileName); + Assert.assertEquals(attachments.getContentId(), contentId); + Assert.assertEquals(attachments.getDisposition(), dispositon); + Assert.assertEquals(attachments.getContent(), Base64.encodeBase64String(content.getBytes(Charset.forName("UTF-8")))); + } + + @Test(expected = IllegalArgumentException.class) + public void testCreateAttachmentsMissingRequiredFileNameParam() { + String content = "This test checks if the builder works fine"; + InputStream contentStream = new ByteArrayInputStream(content.getBytes(Charset.forName("UTF-8"))); + Attachments attachments = new Attachments.Builder(null, contentStream).build(); + } + + @Test(expected = IllegalArgumentException.class) + public void testCreateAttachmentsMissingRequiredContentParam() { + String type = "text"; + String content = null; + Attachments attachments = new Attachments.Builder(type, content).build(); + } +} From f2b1cea7e81264d27873e41b91a7d7faab911abe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Wrzeszcz?= Date: Thu, 1 Dec 2016 21:01:39 +0100 Subject: [PATCH 067/439] Simplified `makeCall()` method. --- src/main/java/com/sendgrid/SendGrid.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index b8af3a34..51f440ea 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -91,13 +91,7 @@ public void setHost(String host) { * Class makeCall makes the call to the SendGrid API, override this method for testing. */ public Response makeCall(Request request) throws IOException { - Response response = new Response(); - try { - response = client.api(request); - } catch (IOException ex) { - throw ex; - } - return response; + return client.api(request); } /** From bec414ff6d1cc9736e5e936e72653445ba7a6153 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 22 Mar 2017 09:38:31 -0700 Subject: [PATCH 068/439] Version Bump v3.2.0: #160 Adds an attachment builder that supports InputStream content --- CHANGELOG.md | 6 ++++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/helpers/README.md | 2 +- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1f8eb9d..cb1a6ca2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.2.0] - 2017-03-22 +### Added +- PR #160 +- [Enhancement] Adds an attachment builder that supports InputStream content +- BIG thanks to [Dmitry Avershin](https://github.com/dmitraver) for the pull request! + ## [3.1.0] - 2016-10-11 ### Added - PR #158, Solves #138 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4487756e..2ecf8392 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/3.1.0/sendgrid-3.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.1.0/sendgrid-3.1.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/3.2.0/sendgrid-3.2.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.2.0/sendgrid-3.2.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 09661eec..fdc1b1ce 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.1.0' + compile 'com.sendgrid:sendgrid-java:3.2.0' } repositories { @@ -78,7 +78,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.1.0/sendgrid-java-3.1.0-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.2.0/sendgrid-java-3.2.0-jar.jar) ```java import com.sendgrid.*; diff --git a/build.gradle b/build.gradle index 8923ad3f..baab4f4a 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.1.0' +version = '3.2.0' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index fa9f0d15..ef07695a 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.1.0 + 3.2.0 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index 1bd745a4..4c829e4a 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -10,7 +10,7 @@ Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples ```bash cd examples/mail -javac -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-databind-2.7.3.jar:../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ../examples/jackson-annotations-2.7.0.jar:../examples/jackson-databind-2.7.3.jar:../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.0.0-jar.jar:. Example +javac -classpath ../../build/libs/sendgrid-3.2.0-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.2.0-jar.jar:. Example ``` ## Usage From 3cabc413428042a10debc172f5685bfdc1434b40 Mon Sep 17 00:00:00 2001 From: SendGrid's DX Team Date: Tue, 4 Apr 2017 13:11:28 -0700 Subject: [PATCH 069/439] Update CLA process --- CONTRIBUTING.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2ecf8392..1d37e9a5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,13 +16,13 @@ We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to hel ## CLAs and CCLAs -Before you get started, SendGrid requires that a SendGrid Contributor License Agreement (CLA) or a SendGrid Company Contributor Licensing Agreement (CCLA) be filled out by every contributor to a SendGrid open source project. +Before you get started, SendGrid requires that a SendGrid Contributor License Agreement (CLA) be filled out by every contributor to a SendGrid open source project. -Our goal with the CLA and CCLA is to clarify the rights of our contributors and reduce other risks arising from inappropriate contributions. The CLA also clarifies the rights SendGrid holds in each contribution and helps to avoid misunderstandings over what rights each contributor is required to grant to SendGrid when making a contribution. In this way the CLA and CCLA encourage broad participation by our open source community and help us build strong open source projects, free from any individual contributor withholding or revoking rights to any contribution. +Our goal with the CLA is to clarify the rights of our contributors and reduce other risks arising from inappropriate contributions. The CLA also clarifies the rights SendGrid holds in each contribution and helps to avoid misunderstandings over what rights each contributor is required to grant to SendGrid when making a contribution. In this way the CLA encourages broad participation by our open source community and helps us build strong open source projects, free from any individual contributor withholding or revoking rights to any contribution. -SendGrid does not merge a pull request made against a SendGrid open source project until that pull request is associated with a signed CLA (or CCLA). Copies of the CLA and CCLA are available [here](https://drive.google.com/a/sendgrid.com/file/d/0B0PlcM9qA91LN2VEUTJWU2RIVXc/view). +SendGrid does not merge a pull request made against a SendGrid open source project until that pull request is associated with a signed CLA. Copies of the CLA are available [here](https://gist.github.com/SendGridDX/98b42c0a5d500058357b80278fde3be8#file-sendgrid_cla). -You may submit your completed [CLA or CCLA](https://drive.google.com/a/sendgrid.com/file/d/0B0PlcM9qA91LN2VEUTJWU2RIVXc/view) to SendGrid at [dx@sendgrid.com](mailto:dx@sendgrid.com). SendGrid will then confirm you are ready to begin making contributions. +When you create a Pull Request, after a few seconds, a comment will appear with a link to the CLA. Click the link and fill out the brief form and then click the "I agree" button and you are all set. You will not be asked to re-sign the CLA unless we make a change. There are a few ways to contribute, which we'll enumerate below: From 719a66fc8306fff035a1c7ebdfe72700756c4454 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 13 Apr 2017 16:12:15 -0700 Subject: [PATCH 070/439] Version Bump v3.2.1: #175 Simplified method. --- CHANGELOG.md | 6 ++++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb1a6ca2..55ffa558 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.2.1] - 2017-04-13 +### Added +- PR #175 +- Simplified `makeCall()` method. +- BIG thanks to [Rafał Wrzeszcz](https://github.com/rafalwrzeszcz) for the pull request! + ## [3.2.0] - 2017-03-22 ### Added - PR #160 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1d37e9a5..684993b1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/3.2.0/sendgrid-3.2.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.2.0/sendgrid-3.2.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/3.2.1/sendgrid-3.2.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.2.1/sendgrid-3.2.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index fdc1b1ce..cdd75dbd 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.2.0' + compile 'com.sendgrid:sendgrid-java:3.2.1' } repositories { @@ -78,7 +78,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.2.0/sendgrid-java-3.2.0-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.2.1/sendgrid-java-3.2.1-jar.jar) ```java import com.sendgrid.*; diff --git a/build.gradle b/build.gradle index baab4f4a..324bbf30 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.2.0' +version = '3.2.1' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index ef07695a..e40fb8d8 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.2.0 + 3.2.1 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java From e6c8356ca701df284ac0e202b18aa26c997477ba Mon Sep 17 00:00:00 2001 From: Diego Camargo Date: Tue, 18 Oct 2016 22:39:59 -0500 Subject: [PATCH 071/439] Modify SendGrid class to use getters and setters, let the tests use setters and getters --- build.gradle | 2 +- src/main/java/com/sendgrid/SendGrid.java | 16 +- src/test/java/com/sendgrid/MockSendGrid.java | 10 +- src/test/java/com/sendgrid/SendGridTest.java | 1940 +++++++++--------- 4 files changed, 938 insertions(+), 1030 deletions(-) diff --git a/build.gradle b/build.gradle index 324bbf30..0013f7f4 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ buildscript { } dependencies { - compile 'com.sendgrid:java-http-client:2.3.4' + compile 'com.sendgrid:java-http-client:4.0.0' compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 51f440ea..421b11a9 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -99,12 +99,16 @@ public Response makeCall(Request request) throws IOException { */ public Response api(Request request) throws IOException { Request req = new Request(); - req.method = request.method; - req.baseUri = this.host; - req.endpoint = "/" + version + "/" + request.endpoint; - req.body = request.body; - req.headers = this.requestHeaders; - req.queryParams = request.queryParams; + req.setMethod(request.getMethod()); + req.setBaseUri(this.host); + req.setEndpoint("/" + version + "/" + request.getEndpoint()); + req.setBody(request.getBody()); + for (Map.Entry header : this.requestHeaders.entrySet()) { + req.addHeader(header.getKey(), header.getValue()); + } + for (Map.Entry queryParam : request.getQueryParams().entrySet()) { + req.addQueryParam(queryParam.getKey(), queryParam.getValue()); + } return makeCall(req); } diff --git a/src/test/java/com/sendgrid/MockSendGrid.java b/src/test/java/com/sendgrid/MockSendGrid.java index 006b27c7..35f65ae1 100644 --- a/src/test/java/com/sendgrid/MockSendGrid.java +++ b/src/test/java/com/sendgrid/MockSendGrid.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.util.HashMap; +import java.util.Map; public class MockSendGrid extends SendGrid { Request request; @@ -13,10 +14,11 @@ public MockSendGrid(String apiKey) { public Response makeCall(Request request) throws IOException { this.request = request; Response response = new Response(); - response.statusCode = 200; - response.body = "{\"message\":\"success\"}"; - response.headers = new HashMap(); - response.headers.put("Test", "Header"); + response.setStatusCode(200); + response.setBody("{\"message\":\"success\"}"); + Map headers = new HashMap<>(); + headers.put("Test", "Header"); + response.setHeaders(headers); return response; } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index dca0222d..5ec45eab 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -88,13 +88,11 @@ public void test_access_settings_activity_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "access_settings/activity"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("access_settings/activity"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -110,11 +108,11 @@ public void test_access_settings_whitelist_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "access_settings/whitelist"; - request.body = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + request.setMethod(Method.POST); + request.setEndpoint("access_settings/whitelist"); + request.setBody("{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -130,10 +128,10 @@ public void test_access_settings_whitelist_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "access_settings/whitelist"; + request.setMethod(Method.GET); + request.setEndpoint("access_settings/whitelist"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -149,11 +147,11 @@ public void test_access_settings_whitelist_delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist"; - request.body = "{\"ids\":[1,2,3]}"; + request.setMethod(Method.DELETE); + request.setEndpoint("access_settings/whitelist"); + request.setBody("{\"ids\":[1,2,3]}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -169,10 +167,10 @@ public void test_access_settings_whitelist__rule_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "access_settings/whitelist/{rule_id}"; + request.setMethod(Method.GET); + request.setEndpoint("access_settings/whitelist/{rule_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -188,10 +186,10 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist/{rule_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("access_settings/whitelist/{rule_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -207,11 +205,11 @@ public void test_alerts_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "alerts"; - request.body = "{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("alerts"); + request.setBody("{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -227,10 +225,10 @@ public void test_alerts_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "alerts"; + request.setMethod(Method.GET); + request.setEndpoint("alerts"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -246,11 +244,11 @@ public void test_alerts__alert_id__patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "alerts/{alert_id}"; - request.body = "{\"email_to\":\"example@example.com\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("alerts/{alert_id}"); + request.setBody("{\"email_to\":\"example@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -266,10 +264,10 @@ public void test_alerts__alert_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "alerts/{alert_id}"; + request.setMethod(Method.GET); + request.setEndpoint("alerts/{alert_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -285,10 +283,10 @@ public void test_alerts__alert_id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "alerts/{alert_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("alerts/{alert_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -304,11 +302,11 @@ public void test_api_keys_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "api_keys"; - request.body = "{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + request.setMethod(Method.POST); + request.setEndpoint("api_keys"); + request.setBody("{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -324,13 +322,11 @@ public void test_api_keys_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "api_keys"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("api_keys"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -346,11 +342,11 @@ public void test_api_keys__api_key_id__put() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "api_keys/{api_key_id}"; - request.body = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("api_keys/{api_key_id}"); + request.setBody("{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -366,11 +362,11 @@ public void test_api_keys__api_key_id__patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "api_keys/{api_key_id}"; - request.body = "{\"name\":\"A New Hope\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("api_keys/{api_key_id}"); + request.setBody("{\"name\":\"A New Hope\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -386,10 +382,10 @@ public void test_api_keys__api_key_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "api_keys/{api_key_id}"; + request.setMethod(Method.GET); + request.setEndpoint("api_keys/{api_key_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -405,10 +401,10 @@ public void test_api_keys__api_key_id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "api_keys/{api_key_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("api_keys/{api_key_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -424,11 +420,11 @@ public void test_asm_groups_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/groups"; - request.body = "{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/groups"); + request.setBody("{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -444,13 +440,11 @@ public void test_asm_groups_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/groups"; - Map queryParams = new HashMap(); - queryParams.put("id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("asm/groups"); + request.addQueryParam("id", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -466,11 +460,11 @@ public void test_asm_groups__group_id__patch() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "asm/groups/{group_id}"; - request.body = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; + request.setMethod(Method.PATCH); + request.setEndpoint("asm/groups/{group_id}"); + request.setBody("{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -486,10 +480,10 @@ public void test_asm_groups__group_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}"; + request.setMethod(Method.GET); + request.setEndpoint("asm/groups/{group_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -505,10 +499,10 @@ public void test_asm_groups__group_id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("asm/groups/{group_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -524,11 +518,11 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/groups/{group_id}/suppressions"; - request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/groups/{group_id}/suppressions"); + request.setBody("{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -544,10 +538,10 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}/suppressions"; + request.setMethod(Method.GET); + request.setEndpoint("asm/groups/{group_id}/suppressions"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -563,11 +557,11 @@ public void test_asm_groups__group_id__suppressions_search_post() throws IOExcep sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/groups/{group_id}/suppressions/search"; - request.body = "{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/groups/{group_id}/suppressions/search"); + request.setBody("{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -583,10 +577,10 @@ public void test_asm_groups__group_id__suppressions__email__delete() throws IOEx sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}/suppressions/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("asm/groups/{group_id}/suppressions/{email}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -602,10 +596,10 @@ public void test_asm_suppressions_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/suppressions"; + request.setMethod(Method.GET); + request.setEndpoint("asm/suppressions"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -621,11 +615,11 @@ public void test_asm_suppressions_global_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/suppressions/global"; - request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/suppressions/global"); + request.setBody("{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -641,10 +635,10 @@ public void test_asm_suppressions_global__email__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/suppressions/global/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("asm/suppressions/global/{email}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -660,10 +654,10 @@ public void test_asm_suppressions_global__email__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "asm/suppressions/global/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("asm/suppressions/global/{email}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -679,10 +673,10 @@ public void test_asm_suppressions__email__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/suppressions/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("asm/suppressions/{email}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -698,18 +692,16 @@ public void test_browsers_stats_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "browsers/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("browsers", "test_string"); - queryParams.put("limit", "test_string"); - queryParams.put("offset", "test_string"); - queryParams.put("start_date", "2016-01-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("browsers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("browsers", "test_string"); + request.addQueryParam("limit", "test_string"); + request.addQueryParam("offset", "test_string"); + request.addQueryParam("start_date", "2016-01-01"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -725,11 +717,11 @@ public void test_campaigns_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns"; - request.body = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns"); + request.setBody("{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -745,14 +737,12 @@ public void test_campaigns_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "campaigns"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("campaigns"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -768,11 +758,11 @@ public void test_campaigns__campaign_id__patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}"; - request.body = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("campaigns/{campaign_id}"); + request.setBody("{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -788,10 +778,10 @@ public void test_campaigns__campaign_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}"; + request.setMethod(Method.GET); + request.setEndpoint("campaigns/{campaign_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -807,10 +797,10 @@ public void test_campaigns__campaign_id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("campaigns/{campaign_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -826,11 +816,11 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}/schedules"; - request.body = "{\"send_at\":1489451436}"; + request.setMethod(Method.PATCH); + request.setEndpoint("campaigns/{campaign_id}/schedules"); + request.setBody("{\"send_at\":1489451436}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -846,11 +836,11 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules"; - request.body = "{\"send_at\":1489771528}"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns/{campaign_id}/schedules"); + request.setBody("{\"send_at\":1489771528}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -866,10 +856,10 @@ public void test_campaigns__campaign_id__schedules_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}/schedules"; + request.setMethod(Method.GET); + request.setEndpoint("campaigns/{campaign_id}/schedules"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -885,10 +875,10 @@ public void test_campaigns__campaign_id__schedules_delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}/schedules"; + request.setMethod(Method.DELETE); + request.setEndpoint("campaigns/{campaign_id}/schedules"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -904,10 +894,10 @@ public void test_campaigns__campaign_id__schedules_now_post() throws IOException sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/now"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns/{campaign_id}/schedules/now"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -923,11 +913,11 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/test"; - request.body = "{\"to\":\"your.email@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns/{campaign_id}/schedules/test"); + request.setBody("{\"to\":\"your.email@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -943,15 +933,13 @@ public void test_categories_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "categories"; - Map queryParams = new HashMap(); - queryParams.put("category", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("categories"); + request.addQueryParam("category", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -967,18 +955,16 @@ public void test_categories_stats_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "categories/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("categories", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("categories/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("categories", "test_string"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -994,19 +980,17 @@ public void test_categories_stats_sums_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "categories/stats/sums"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("categories/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1022,15 +1006,13 @@ public void test_clients_stats_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "clients/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("clients/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1046,15 +1028,13 @@ public void test_clients__client_type__stats_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "clients/{client_type}/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("clients/{client_type}/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1070,11 +1050,11 @@ public void test_contactdb_custom_fields_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/custom_fields"; - request.body = "{\"type\":\"text\",\"name\":\"pet\"}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/custom_fields"); + request.setBody("{\"type\":\"text\",\"name\":\"pet\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -1090,10 +1070,10 @@ public void test_contactdb_custom_fields_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/custom_fields"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/custom_fields"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1109,10 +1089,10 @@ public void test_contactdb_custom_fields__custom_field_id__get() throws IOExcept sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/custom_fields/{custom_field_id}"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1128,10 +1108,10 @@ public void test_contactdb_custom_fields__custom_field_id__delete() throws IOExc sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/custom_fields/{custom_field_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); Response response = sg.api(request); - Assert.assertEquals(202, response.statusCode); + Assert.assertEquals(202, response.getStatusCode()); } @Test @@ -1147,11 +1127,11 @@ public void test_contactdb_lists_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/lists"; - request.body = "{\"name\":\"your list name\"}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists"); + request.setBody("{\"name\":\"your list name\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -1167,10 +1147,10 @@ public void test_contactdb_lists_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/lists"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1186,11 +1166,11 @@ public void test_contactdb_lists_delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/lists"; - request.body = "[1,2,3,4]"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists"); + request.setBody("[1,2,3,4]"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -1206,14 +1186,12 @@ public void test_contactdb_lists__list_id__patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "contactdb/lists/{list_id}"; - request.body = "{\"name\":\"newlistname\"}"; - Map queryParams = new HashMap(); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/lists/{list_id}"); + request.setBody("{\"name\":\"newlistname\"}"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1229,13 +1207,11 @@ public void test_contactdb_lists__list_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}"; - Map queryParams = new HashMap(); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1251,13 +1227,11 @@ public void test_contactdb_lists__list_id__delete() throws IOException { sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}"; - Map queryParams = new HashMap(); - queryParams.put("delete_contacts", "true"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}"); + request.addQueryParam("delete_contacts", "true"); Response response = sg.api(request); - Assert.assertEquals(202, response.statusCode); + Assert.assertEquals(202, response.getStatusCode()); } @Test @@ -1273,11 +1247,11 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients"; - request.body = "[\"recipient_id1\",\"recipient_id2\"]"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -1293,15 +1267,13 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}/recipients"; - Map queryParams = new HashMap(); - queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1317,10 +1289,10 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__post() thro sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -1336,14 +1308,12 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; - Map queryParams = new HashMap(); - queryParams.put("recipient_id", "1"); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + request.addQueryParam("recipient_id", "1"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -1359,11 +1329,11 @@ public void test_contactdb_recipients_patch() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "contactdb/recipients"; - request.body = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/recipients"); + request.setBody("[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -1379,11 +1349,11 @@ public void test_contactdb_recipients_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/recipients"; - request.body = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/recipients"); + request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -1399,14 +1369,12 @@ public void test_contactdb_recipients_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients"; - Map queryParams = new HashMap(); - queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1422,11 +1390,11 @@ public void test_contactdb_recipients_delete() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/recipients"; - request.body = "[\"recipient_id1\",\"recipient_id2\"]"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1442,10 +1410,10 @@ public void test_contactdb_recipients_billable_count_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/billable_count"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/billable_count"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1461,10 +1429,10 @@ public void test_contactdb_recipients_count_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/count"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/count"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1480,13 +1448,11 @@ public void test_contactdb_recipients_search_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/search"; - Map queryParams = new HashMap(); - queryParams.put("{field_name}", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/search"); + request.addQueryParam("{field_name}", "test_string"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1502,10 +1468,10 @@ public void test_contactdb_recipients__recipient_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/{recipient_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1521,10 +1487,10 @@ public void test_contactdb_recipients__recipient_id__delete() throws IOException sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/recipients/{recipient_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/recipients/{recipient_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -1540,10 +1506,10 @@ public void test_contactdb_recipients__recipient_id__lists_get() throws IOExcept sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}/lists"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/{recipient_id}/lists"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1559,10 +1525,10 @@ public void test_contactdb_reserved_fields_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/reserved_fields"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/reserved_fields"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1578,11 +1544,11 @@ public void test_contactdb_segments_post() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/segments"; - request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/segments"); + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1598,10 +1564,10 @@ public void test_contactdb_segments_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/segments"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1617,14 +1583,12 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "contactdb/segments/{segment_id}"; - request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; - Map queryParams = new HashMap(); - queryParams.put("segment_id", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); + request.addQueryParam("segment_id", "test_string"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1640,13 +1604,11 @@ public void test_contactdb_segments__segment_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}"; - Map queryParams = new HashMap(); - queryParams.put("segment_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.addQueryParam("segment_id", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1662,13 +1624,11 @@ public void test_contactdb_segments__segment_id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/segments/{segment_id}"; - Map queryParams = new HashMap(); - queryParams.put("delete_contacts", "true"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.addQueryParam("delete_contacts", "true"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -1684,14 +1644,12 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}/recipients"; - Map queryParams = new HashMap(); - queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments/{segment_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1707,17 +1665,15 @@ public void test_devices_stats_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "devices/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("devices/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1733,18 +1689,16 @@ public void test_geo_stats_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "geo/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("country", "US"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("geo/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("country", "US"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1760,17 +1714,15 @@ public void test_ips_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips"; - Map queryParams = new HashMap(); - queryParams.put("subuser", "test_string"); - queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("exclude_whitelabels", "true"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("ips"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("exclude_whitelabels", "true"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1786,10 +1738,10 @@ public void test_ips_assigned_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/assigned"; + request.setMethod(Method.GET); + request.setEndpoint("ips/assigned"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1805,11 +1757,11 @@ public void test_ips_pools_post() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "ips/pools"; - request.body = "{\"name\":\"marketing\"}"; + request.setMethod(Method.POST); + request.setEndpoint("ips/pools"); + request.setBody("{\"name\":\"marketing\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1825,10 +1777,10 @@ public void test_ips_pools_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/pools"; + request.setMethod(Method.GET); + request.setEndpoint("ips/pools"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1844,11 +1796,11 @@ public void test_ips_pools__pool_name__put() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "ips/pools/{pool_name}"; - request.body = "{\"name\":\"new_pool_name\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("ips/pools/{pool_name}"); + request.setBody("{\"name\":\"new_pool_name\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1864,10 +1816,10 @@ public void test_ips_pools__pool_name__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/pools/{pool_name}"; + request.setMethod(Method.GET); + request.setEndpoint("ips/pools/{pool_name}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1883,10 +1835,10 @@ public void test_ips_pools__pool_name__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}"; + request.setMethod(Method.DELETE); + request.setEndpoint("ips/pools/{pool_name}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -1902,11 +1854,11 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "ips/pools/{pool_name}/ips"; - request.body = "{\"ip\":\"0.0.0.0\"}"; + request.setMethod(Method.POST); + request.setEndpoint("ips/pools/{pool_name}/ips"); + request.setBody("{\"ip\":\"0.0.0.0\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -1922,10 +1874,10 @@ public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}/ips/{ip}"; + request.setMethod(Method.DELETE); + request.setEndpoint("ips/pools/{pool_name}/ips/{ip}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -1941,11 +1893,11 @@ public void test_ips_warmup_post() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "ips/warmup"; - request.body = "{\"ip\":\"0.0.0.0\"}"; + request.setMethod(Method.POST); + request.setEndpoint("ips/warmup"); + request.setBody("{\"ip\":\"0.0.0.0\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1961,10 +1913,10 @@ public void test_ips_warmup_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/warmup"; + request.setMethod(Method.GET); + request.setEndpoint("ips/warmup"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1980,10 +1932,10 @@ public void test_ips_warmup__ip_address__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/warmup/{ip_address}"; + request.setMethod(Method.GET); + request.setEndpoint("ips/warmup/{ip_address}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -1999,10 +1951,10 @@ public void test_ips_warmup__ip_address__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "ips/warmup/{ip_address}"; + request.setMethod(Method.DELETE); + request.setEndpoint("ips/warmup/{ip_address}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -2018,10 +1970,10 @@ public void test_ips__ip_address__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/{ip_address}"; + request.setMethod(Method.GET); + request.setEndpoint("ips/{ip_address}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2037,10 +1989,10 @@ public void test_mail_batch_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "mail/batch"; + request.setMethod(Method.POST); + request.setEndpoint("mail/batch"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -2056,10 +2008,10 @@ public void test_mail_batch__batch_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail/batch/{batch_id}"; + request.setMethod(Method.GET); + request.setEndpoint("mail/batch/{batch_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2075,11 +2027,11 @@ public void test_mail_send_post() throws IOException { sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "mail/send"; - request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"); Response response = sg.api(request); - Assert.assertEquals(202, response.statusCode); + Assert.assertEquals(202, response.getStatusCode()); } @Test @@ -2095,14 +2047,12 @@ public void test_mail_settings_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2118,11 +2068,11 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/address_whitelist"; - request.body = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/address_whitelist"); + request.setBody("{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2138,10 +2088,10 @@ public void test_mail_settings_address_whitelist_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/address_whitelist"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/address_whitelist"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2157,11 +2107,11 @@ public void test_mail_settings_bcc_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/bcc"; - request.body = "{\"enabled\":false,\"email\":\"email@example.com\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/bcc"); + request.setBody("{\"enabled\":false,\"email\":\"email@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2177,10 +2127,10 @@ public void test_mail_settings_bcc_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/bcc"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/bcc"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2196,11 +2146,11 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/bounce_purge"; - request.body = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/bounce_purge"); + request.setBody("{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2216,10 +2166,10 @@ public void test_mail_settings_bounce_purge_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/bounce_purge"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/bounce_purge"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2235,11 +2185,11 @@ public void test_mail_settings_footer_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/footer"; - request.body = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/footer"); + request.setBody("{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2255,10 +2205,10 @@ public void test_mail_settings_footer_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/footer"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/footer"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2274,11 +2224,11 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_bounce"; - request.body = "{\"enabled\":true,\"email\":\"example@example.com\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/forward_bounce"); + request.setBody("{\"enabled\":true,\"email\":\"example@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2294,10 +2244,10 @@ public void test_mail_settings_forward_bounce_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/forward_bounce"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/forward_bounce"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2313,11 +2263,11 @@ public void test_mail_settings_forward_spam_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_spam"; - request.body = "{\"enabled\":false,\"email\":\"\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/forward_spam"); + request.setBody("{\"enabled\":false,\"email\":\"\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2333,10 +2283,10 @@ public void test_mail_settings_forward_spam_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/forward_spam"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/forward_spam"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2352,11 +2302,11 @@ public void test_mail_settings_plain_content_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/plain_content"; - request.body = "{\"enabled\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/plain_content"); + request.setBody("{\"enabled\":false}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2372,10 +2322,10 @@ public void test_mail_settings_plain_content_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/plain_content"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/plain_content"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2391,11 +2341,11 @@ public void test_mail_settings_spam_check_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/spam_check"; - request.body = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/spam_check"); + request.setBody("{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2411,10 +2361,10 @@ public void test_mail_settings_spam_check_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/spam_check"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/spam_check"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2430,11 +2380,11 @@ public void test_mail_settings_template_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/template"; - request.body = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/template"); + request.setBody("{\"html_content\":\"<% body %>\",\"enabled\":true}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2450,10 +2400,10 @@ public void test_mail_settings_template_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/template"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/template"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2469,18 +2419,16 @@ public void test_mailbox_providers_stats_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mailbox_providers/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("mailbox_providers", "test_string"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("mailbox_providers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("mailbox_providers", "test_string"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2496,14 +2444,12 @@ public void test_partner_settings_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "partner_settings"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("partner_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2519,11 +2465,11 @@ public void test_partner_settings_new_relic_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "partner_settings/new_relic"; - request.body = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("partner_settings/new_relic"); + request.setBody("{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2539,10 +2485,10 @@ public void test_partner_settings_new_relic_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "partner_settings/new_relic"; + request.setMethod(Method.GET); + request.setEndpoint("partner_settings/new_relic"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2558,10 +2504,10 @@ public void test_scopes_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "scopes"; + request.setMethod(Method.GET); + request.setEndpoint("scopes"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2577,11 +2523,11 @@ public void test_senders_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "senders"; - request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + request.setMethod(Method.POST); + request.setEndpoint("senders"); + request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -2597,10 +2543,10 @@ public void test_senders_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "senders"; + request.setMethod(Method.GET); + request.setEndpoint("senders"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2616,11 +2562,11 @@ public void test_senders__sender_id__patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "senders/{sender_id}"; - request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("senders/{sender_id}"); + request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2636,10 +2582,10 @@ public void test_senders__sender_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "senders/{sender_id}"; + request.setMethod(Method.GET); + request.setEndpoint("senders/{sender_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2655,10 +2601,10 @@ public void test_senders__sender_id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "senders/{sender_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("senders/{sender_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -2674,10 +2620,10 @@ public void test_senders__sender_id__resend_verification_post() throws IOExcepti sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "senders/{sender_id}/resend_verification"; + request.setMethod(Method.POST); + request.setEndpoint("senders/{sender_id}/resend_verification"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -2693,17 +2639,15 @@ public void test_stats_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2719,11 +2663,11 @@ public void test_subusers_post() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "subusers"; - request.body = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("subusers"); + request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2739,15 +2683,13 @@ public void test_subusers_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2763,13 +2705,11 @@ public void test_subusers_reputations_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/reputations"; - Map queryParams = new HashMap(); - queryParams.put("usernames", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/reputations"); + request.addQueryParam("usernames", "test_string"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2785,18 +2725,16 @@ public void test_subusers_stats_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("subusers", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("subusers", "test_string"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2812,18 +2750,16 @@ public void test_subusers_stats_monthly_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/stats/monthly"; - Map queryParams = new HashMap(); - queryParams.put("subuser", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/monthly"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2839,19 +2775,17 @@ public void test_subusers_stats_sums_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/stats/sums"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2867,11 +2801,11 @@ public void test_subusers__subuser_name__patch() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "subusers/{subuser_name}"; - request.body = "{\"disabled\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("subusers/{subuser_name}"); + request.setBody("{\"disabled\":false}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -2887,10 +2821,10 @@ public void test_subusers__subuser_name__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}"; + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -2906,11 +2840,11 @@ public void test_subusers__subuser_name__ips_put() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/ips"; - request.body = "[\"127.0.0.1\"]"; + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/ips"); + request.setBody("[\"127.0.0.1\"]"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2926,11 +2860,11 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/monitor"; - request.body = "{\"frequency\":500,\"email\":\"example@example.com\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2946,11 +2880,11 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "subusers/{subuser_name}/monitor"; - request.body = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2966,10 +2900,10 @@ public void test_subusers__subuser_name__monitor_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/monitor"; + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/monitor"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -2985,10 +2919,10 @@ public void test_subusers__subuser_name__monitor_delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}/monitor"; + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}/monitor"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3004,17 +2938,15 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/stats/monthly"; - Map queryParams = new HashMap(); - queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/stats/monthly"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3030,16 +2962,14 @@ public void test_suppression_blocks_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/blocks"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/blocks"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3055,11 +2985,11 @@ public void test_suppression_blocks_delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/blocks"; - request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3075,10 +3005,10 @@ public void test_suppression_blocks__email__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/blocks/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/blocks/{email}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3094,10 +3024,10 @@ public void test_suppression_blocks__email__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/blocks/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks/{email}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3113,14 +3043,12 @@ public void test_suppression_bounces_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/bounces"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("end_time", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/bounces"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("end_time", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3136,11 +3064,11 @@ public void test_suppression_bounces_delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/bounces"; - request.body = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces"); + request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3156,10 +3084,10 @@ public void test_suppression_bounces__email__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/bounces/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/bounces/{email}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3175,13 +3103,11 @@ public void test_suppression_bounces__email__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/bounces/{email}"; - Map queryParams = new HashMap(); - queryParams.put("email_address", "example@example.com"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces/{email}"); + request.addQueryParam("email_address", "example@example.com"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3197,16 +3123,14 @@ public void test_suppression_invalid_emails_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/invalid_emails"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/invalid_emails"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3222,11 +3146,11 @@ public void test_suppression_invalid_emails_delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails"; - request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3242,10 +3166,10 @@ public void test_suppression_invalid_emails__email__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/invalid_emails/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/invalid_emails/{email}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3261,10 +3185,10 @@ public void test_suppression_invalid_emails__email__delete() throws IOException sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails/{email}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3280,10 +3204,10 @@ public void test_suppression_spam_report__email__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/spam_report/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_report/{email}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3299,10 +3223,10 @@ public void test_suppression_spam_report__email__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/spam_report/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_report/{email}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3318,16 +3242,14 @@ public void test_suppression_spam_reports_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/spam_reports"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_reports"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3343,11 +3265,11 @@ public void test_suppression_spam_reports_delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/spam_reports"; - request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_reports"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3363,16 +3285,14 @@ public void test_suppression_unsubscribes_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/unsubscribes"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/unsubscribes"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3388,11 +3308,11 @@ public void test_templates_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "templates"; - request.body = "{\"name\":\"example_name\"}"; + request.setMethod(Method.POST); + request.setEndpoint("templates"); + request.setBody("{\"name\":\"example_name\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -3408,10 +3328,10 @@ public void test_templates_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "templates"; + request.setMethod(Method.GET); + request.setEndpoint("templates"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3427,11 +3347,11 @@ public void test_templates__template_id__patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "templates/{template_id}"; - request.body = "{\"name\":\"new_example_name\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("templates/{template_id}"); + request.setBody("{\"name\":\"new_example_name\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3447,10 +3367,10 @@ public void test_templates__template_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "templates/{template_id}"; + request.setMethod(Method.GET); + request.setEndpoint("templates/{template_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3466,10 +3386,10 @@ public void test_templates__template_id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "templates/{template_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("templates/{template_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3485,11 +3405,11 @@ public void test_templates__template_id__versions_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions"; - request.body = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + request.setMethod(Method.POST); + request.setEndpoint("templates/{template_id}/versions"); + request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -3505,11 +3425,11 @@ public void test_templates__template_id__versions__version_id__patch() throws IO sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "templates/{template_id}/versions/{version_id}"; - request.body = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); + request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3525,10 +3445,10 @@ public void test_templates__template_id__versions__version_id__get() throws IOEx sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "templates/{template_id}/versions/{version_id}"; + request.setMethod(Method.GET); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3544,10 +3464,10 @@ public void test_templates__template_id__versions__version_id__delete() throws I sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "templates/{template_id}/versions/{version_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3563,10 +3483,10 @@ public void test_templates__template_id__versions__version_id__activate_post() t sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions/{version_id}/activate"; + request.setMethod(Method.POST); + request.setEndpoint("templates/{template_id}/versions/{version_id}/activate"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3582,14 +3502,12 @@ public void test_tracking_settings_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3605,11 +3523,11 @@ public void test_tracking_settings_click_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/click"; - request.body = "{\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/click"); + request.setBody("{\"enabled\":true}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3625,10 +3543,10 @@ public void test_tracking_settings_click_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/click"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/click"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3644,11 +3562,11 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/google_analytics"; - request.body = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/google_analytics"); + request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3664,10 +3582,10 @@ public void test_tracking_settings_google_analytics_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/google_analytics"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/google_analytics"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3683,11 +3601,11 @@ public void test_tracking_settings_open_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/open"; - request.body = "{\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/open"); + request.setBody("{\"enabled\":true}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3703,10 +3621,10 @@ public void test_tracking_settings_open_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/open"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/open"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3722,11 +3640,11 @@ public void test_tracking_settings_subscription_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/subscription"; - request.body = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/subscription"); + request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3742,10 +3660,10 @@ public void test_tracking_settings_subscription_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/subscription"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/subscription"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3761,10 +3679,10 @@ public void test_user_account_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/account"; + request.setMethod(Method.GET); + request.setEndpoint("user/account"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3780,10 +3698,10 @@ public void test_user_credits_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/credits"; + request.setMethod(Method.GET); + request.setEndpoint("user/credits"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3799,11 +3717,11 @@ public void test_user_email_put() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "user/email"; - request.body = "{\"email\":\"example@example.com\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("user/email"); + request.setBody("{\"email\":\"example@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3819,10 +3737,10 @@ public void test_user_email_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/email"; + request.setMethod(Method.GET); + request.setEndpoint("user/email"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3838,11 +3756,11 @@ public void test_user_password_put() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "user/password"; - request.body = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("user/password"); + request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3858,11 +3776,11 @@ public void test_user_profile_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/profile"; - request.body = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/profile"); + request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3878,10 +3796,10 @@ public void test_user_profile_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/profile"; + request.setMethod(Method.GET); + request.setEndpoint("user/profile"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3897,11 +3815,11 @@ public void test_user_scheduled_sends_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "user/scheduled_sends"; - request.body = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; + request.setMethod(Method.POST); + request.setEndpoint("user/scheduled_sends"); + request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -3917,10 +3835,10 @@ public void test_user_scheduled_sends_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/scheduled_sends"; + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3936,11 +3854,11 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/scheduled_sends/{batch_id}"; - request.body = "{\"status\":\"pause\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setBody("{\"status\":\"pause\"}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3956,10 +3874,10 @@ public void test_user_scheduled_sends__batch_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/scheduled_sends/{batch_id}"; + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends/{batch_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -3975,10 +3893,10 @@ public void test_user_scheduled_sends__batch_id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "user/scheduled_sends/{batch_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("user/scheduled_sends/{batch_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -3994,11 +3912,11 @@ public void test_user_settings_enforced_tls_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/settings/enforced_tls"; - request.body = "{\"require_tls\":true,\"require_valid_cert\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/settings/enforced_tls"); + request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4014,10 +3932,10 @@ public void test_user_settings_enforced_tls_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/settings/enforced_tls"; + request.setMethod(Method.GET); + request.setEndpoint("user/settings/enforced_tls"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4033,11 +3951,11 @@ public void test_user_username_put() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "user/username"; - request.body = "{\"username\":\"test_username\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("user/username"); + request.setBody("{\"username\":\"test_username\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4053,10 +3971,10 @@ public void test_user_username_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/username"; + request.setMethod(Method.GET); + request.setEndpoint("user/username"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4072,11 +3990,11 @@ public void test_user_webhooks_event_settings_patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/webhooks/event/settings"; - request.body = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/event/settings"); + request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4092,10 +4010,10 @@ public void test_user_webhooks_event_settings_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/event/settings"; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/event/settings"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4111,11 +4029,11 @@ public void test_user_webhooks_event_test_post() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "user/webhooks/event/test"; - request.body = "{\"url\":\"url\"}"; + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/event/test"); + request.setBody("{\"url\":\"url\"}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -4131,11 +4049,11 @@ public void test_user_webhooks_parse_settings_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "user/webhooks/parse/settings"; - request.body = "{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"; + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/parse/settings"); + request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -4151,10 +4069,10 @@ public void test_user_webhooks_parse_settings_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/parse/settings"; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4170,11 +4088,11 @@ public void test_user_webhooks_parse_settings__hostname__patch() throws IOExcept sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/webhooks/parse/settings/{hostname}"; - request.body = "{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4190,10 +4108,10 @@ public void test_user_webhooks_parse_settings__hostname__get() throws IOExceptio sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/parse/settings/{hostname}"; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4209,10 +4127,10 @@ public void test_user_webhooks_parse_settings__hostname__delete() throws IOExcep sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "user/webhooks/parse/settings/{hostname}"; + request.setMethod(Method.DELETE); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -4228,17 +4146,15 @@ public void test_user_webhooks_parse_stats_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/parse/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "test_string"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "test_string"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "test_string"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4254,11 +4170,11 @@ public void test_whitelabel_domains_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains"; - request.body = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -4274,17 +4190,15 @@ public void test_whitelabel_domains_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - queryParams.put("domain", "test_string"); - queryParams.put("exclude_subusers", "true"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("domain", "test_string"); + request.addQueryParam("exclude_subusers", "true"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4300,10 +4214,10 @@ public void test_whitelabel_domains_default_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains/default"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/default"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4319,10 +4233,10 @@ public void test_whitelabel_domains_subuser_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains/subuser"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/subuser"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4338,10 +4252,10 @@ public void test_whitelabel_domains_subuser_delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/subuser"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/subuser"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -4357,11 +4271,11 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "whitelabel/domains/{domain_id}"; - request.body = "{\"default\":false,\"custom_spf\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setBody("{\"default\":false,\"custom_spf\":true}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4377,10 +4291,10 @@ public void test_whitelabel_domains__domain_id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains/{domain_id}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/{domain_id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4396,10 +4310,10 @@ public void test_whitelabel_domains__domain_id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{domain_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{domain_id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -4415,11 +4329,11 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains/{domain_id}/subuser"; - request.body = "{\"username\":\"jane@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -4435,11 +4349,11 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/ips"; - request.body = "{\"ip\":\"192.168.0.1\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/ips"); + request.setBody("{\"ip\":\"192.168.0.1\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4455,10 +4369,10 @@ public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{id}/ips/{ip}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4474,10 +4388,10 @@ public void test_whitelabel_domains__id__validate_post() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/validate"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/validate"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4493,11 +4407,11 @@ public void test_whitelabel_ips_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/ips"; - request.body = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips"); + request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -4513,15 +4427,13 @@ public void test_whitelabel_ips_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/ips"; - Map queryParams = new HashMap(); - queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4537,10 +4449,10 @@ public void test_whitelabel_ips__id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/ips/{id}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4556,10 +4468,10 @@ public void test_whitelabel_ips__id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/ips/{id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -4575,10 +4487,10 @@ public void test_whitelabel_ips__id__validate_post() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/ips/{id}/validate"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips/{id}/validate"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4594,15 +4506,13 @@ public void test_whitelabel_links_post() throws IOException { sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/links"; - request.body = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links"); + request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - Assert.assertEquals(201, response.statusCode); + Assert.assertEquals(201, response.getStatusCode()); } @Test @@ -4618,13 +4528,11 @@ public void test_whitelabel_links_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4640,13 +4548,11 @@ public void test_whitelabel_links_default_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links/default"; - Map queryParams = new HashMap(); - queryParams.put("domain", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/default"); + request.addQueryParam("domain", "test_string"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4662,13 +4568,11 @@ public void test_whitelabel_links_subuser_get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links/subuser"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4684,13 +4588,11 @@ public void test_whitelabel_links_subuser_delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/links/subuser"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -4706,11 +4608,11 @@ public void test_whitelabel_links__id__patch() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "whitelabel/links/{id}"; - request.body = "{\"default\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/links/{id}"); + request.setBody("{\"default\":true}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4726,10 +4628,10 @@ public void test_whitelabel_links__id__get() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links/{id}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/{id}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4745,10 +4647,10 @@ public void test_whitelabel_links__id__delete() throws IOException { sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/links/{id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/{id}"); Response response = sg.api(request); - Assert.assertEquals(204, response.statusCode); + Assert.assertEquals(204, response.getStatusCode()); } @Test @@ -4764,10 +4666,10 @@ public void test_whitelabel_links__id__validate_post() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/links/{id}/validate"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{id}/validate"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } @Test @@ -4783,11 +4685,11 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/links/{link_id}/subuser"; - request.body = "{\"username\":\"jane@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{link_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); Response response = sg.api(request); - Assert.assertEquals(200, response.statusCode); + Assert.assertEquals(200, response.getStatusCode()); } } From 91edbe695f8252e970d05f3cc960815d67b4f77f Mon Sep 17 00:00:00 2001 From: Diego Camargo Date: Wed, 19 Oct 2016 21:47:45 -0500 Subject: [PATCH 072/439] Modified examples to use java-http-client version 4.0.0 --- examples/accesssettings/accesssettings.java | 78 ++-- examples/alerts/alerts.java | 54 +-- examples/apikeys/apikeys.java | 80 ++-- examples/asm/asm.java | 164 ++++---- examples/browsers/browsers.java | 24 +- examples/campaigns/campaigns.java | 126 +++--- examples/categories/categories.java | 68 ++-- examples/clients/clients.java | 36 +- examples/contactdb/contactdb.java | 384 +++++++++--------- examples/devices/devices.java | 22 +- examples/geo/geo.java | 24 +- examples/helpers/mail/Example.java | 24 +- examples/ips/ips.java | 160 ++++---- examples/mail/mail.java | 32 +- .../mailboxproviders/mailboxproviders.java | 24 +- examples/mailsettings/mailsettings.java | 214 +++++----- examples/partnersettings/partnersettings.java | 38 +- examples/scopes/scopes.java | 10 +- examples/senders/senders.java | 64 +-- examples/stats/stats.java | 22 +- examples/subusers/subusers.java | 218 +++++----- examples/suppression/suppression.java | 228 +++++------ examples/templates/templates.java | 108 ++--- .../trackingsettings/trackingsettings.java | 104 +++-- examples/user/user.java | 284 +++++++------ examples/whitelabel/whitelabel.java | 328 +++++++-------- 26 files changed, 1407 insertions(+), 1511 deletions(-) diff --git a/examples/accesssettings/accesssettings.java b/examples/accesssettings/accesssettings.java index 5073484f..5008bafd 100644 --- a/examples/accesssettings/accesssettings.java +++ b/examples/accesssettings/accesssettings.java @@ -1,11 +1,9 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; ////////////////////////////////////////////////////////////////// // Retrieve all recent access attempts @@ -17,15 +15,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "access_settings/activity"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("access_settings/activity"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -42,13 +38,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "access_settings/whitelist"; - request.body = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + request.setMethod(Method.POST); + request.setEndpoint("access_settings/whitelist"); + request.setBody("{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -65,12 +61,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "access_settings/whitelist"; + request.setMethod(Method.GET); + request.setEndpoint("access_settings/whitelist"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -87,13 +83,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist"; - request.body = "{\"ids\":[1,2,3]}"; + request.setMethod(Method.DELETE); + request.setEndpoint("access_settings/whitelist"); + request.setBody("{\"ids\":[1,2,3]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -110,12 +106,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "access_settings/whitelist/{rule_id}"; + request.setMethod(Method.GET); + request.setEndpoint("access_settings/whitelist/{rule_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -132,12 +128,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist/{rule_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("access_settings/whitelist/{rule_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/alerts/alerts.java b/examples/alerts/alerts.java index 2ad8f27b..a364c464 100644 --- a/examples/alerts/alerts.java +++ b/examples/alerts/alerts.java @@ -17,13 +17,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "alerts"; - request.body = "{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("alerts"); + request.setBody("{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -40,12 +40,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "alerts"; + request.setMethod(Method.GET); + request.setEndpoint("alerts"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -62,13 +62,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "alerts/{alert_id}"; - request.body = "{\"email_to\":\"example@example.com\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("alerts/{alert_id}"); + request.setBody("{\"email_to\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -85,12 +85,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "alerts/{alert_id}"; + request.setMethod(Method.GET); + request.setEndpoint("alerts/{alert_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -107,12 +107,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "alerts/{alert_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("alerts/{alert_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/apikeys/apikeys.java b/examples/apikeys/apikeys.java index 83e00032..d8e41909 100644 --- a/examples/apikeys/apikeys.java +++ b/examples/apikeys/apikeys.java @@ -1,11 +1,9 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; ////////////////////////////////////////////////////////////////// // Create API keys @@ -17,13 +15,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "api_keys"; - request.body = "{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + request.setMethod(Method.POST); + request.setEndpoint("api_keys"); + request.setBody("{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -40,15 +38,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "api_keys"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("api_keys"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -65,13 +61,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "api_keys/{api_key_id}"; - request.body = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("api_keys/{api_key_id}"); + request.setBody("{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -88,13 +84,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "api_keys/{api_key_id}"; - request.body = "{\"name\":\"A New Hope\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("api_keys/{api_key_id}"); + request.setBody("{\"name\":\"A New Hope\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -111,12 +107,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "api_keys/{api_key_id}"; + request.setMethod(Method.GET); + request.setEndpoint("api_keys/{api_key_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -133,12 +129,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "api_keys/{api_key_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("api_keys/{api_key_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/asm/asm.java b/examples/asm/asm.java index e56a5676..a22c5100 100644 --- a/examples/asm/asm.java +++ b/examples/asm/asm.java @@ -1,11 +1,9 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; ////////////////////////////////////////////////////////////////// // Create a new suppression group @@ -17,13 +15,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/groups"; - request.body = "{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/groups"); + request.setBody("{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -40,15 +38,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/groups"; - Map queryParams = new HashMap(); - queryParams.put("id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("asm/groups"); + request.addQueryParam("id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -65,13 +61,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "asm/groups/{group_id}"; - request.body = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; + request.setMethod(Method.PATCH); + request.setEndpoint("asm/groups/{group_id}"); + request.setBody("{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -88,12 +84,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}"; + request.setMethod(Method.GET); + request.setEndpoint("asm/groups/{group_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -110,12 +106,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("asm/groups/{group_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -132,13 +128,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/groups/{group_id}/suppressions"; - request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/groups/{group_id}/suppressions"); + request.setBody("{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -155,12 +151,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}/suppressions"; + request.setMethod(Method.GET); + request.setEndpoint("asm/groups/{group_id}/suppressions"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -177,13 +173,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/groups/{group_id}/suppressions/search"; - request.body = "{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/groups/{group_id}/suppressions/search"); + request.setBody("{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -200,12 +196,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}/suppressions/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("asm/groups/{group_id}/suppressions/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -222,12 +218,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/suppressions"; + request.setMethod(Method.GET); + request.setEndpoint("asm/suppressions"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -244,13 +240,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/suppressions/global"; - request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/suppressions/global"); + request.setBody("{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -267,12 +263,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/suppressions/global/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("asm/suppressions/global/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -289,12 +285,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "asm/suppressions/global/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("asm/suppressions/global/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -311,12 +307,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/suppressions/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("asm/suppressions/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/browsers/browsers.java b/examples/browsers/browsers.java index e6085aef..a4eca365 100644 --- a/examples/browsers/browsers.java +++ b/examples/browsers/browsers.java @@ -17,20 +17,18 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "browsers/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("browsers", "test_string"); - queryParams.put("limit", "test_string"); - queryParams.put("offset", "test_string"); - queryParams.put("start_date", "2016-01-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("browsers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("browsers", "test_string"); + request.addQueryParam("limit", "test_string"); + request.addQueryParam("offset", "test_string"); + request.addQueryParam("start_date", "2016-01-01"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/campaigns/campaigns.java b/examples/campaigns/campaigns.java index f6a051df..6345eca7 100644 --- a/examples/campaigns/campaigns.java +++ b/examples/campaigns/campaigns.java @@ -17,13 +17,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns"; - request.body = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns"); + request.setBody("{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -40,16 +40,14 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "campaigns"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("campaigns"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -66,13 +64,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}"; - request.body = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("campaigns/{campaign_id}"); + request.setBody("{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -89,12 +87,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}"; + request.setMethod(Method.GET); + request.setEndpoint("campaigns/{campaign_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -111,12 +109,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("campaigns/{campaign_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -133,13 +131,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}/schedules"; - request.body = "{\"send_at\":1489451436}"; + request.setMethod(Method.PATCH); + request.setEndpoint("campaigns/{campaign_id}/schedules"); + request.setBody("{\"send_at\":1489451436}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -156,13 +154,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules"; - request.body = "{\"send_at\":1489771528}"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns/{campaign_id}/schedules"); + request.setBody("{\"send_at\":1489771528}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -179,12 +177,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}/schedules"; + request.setMethod(Method.GET); + request.setEndpoint("campaigns/{campaign_id}/schedules"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -201,12 +199,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}/schedules"; + request.setMethod(Method.DELETE); + request.setEndpoint("campaigns/{campaign_id}/schedules"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -223,12 +221,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/now"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns/{campaign_id}/schedules/now"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -245,13 +243,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/test"; - request.body = "{\"to\":\"your.email@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns/{campaign_id}/schedules/test"); + request.setBody("{\"to\":\"your.email@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/categories/categories.java b/examples/categories/categories.java index b6d2f507..7ac73822 100644 --- a/examples/categories/categories.java +++ b/examples/categories/categories.java @@ -17,17 +17,15 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "categories"; - Map queryParams = new HashMap(); - queryParams.put("category", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("categories"); + request.addQueryParam("category", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -44,20 +42,18 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "categories/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("categories", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("categories/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("categories", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -74,21 +70,19 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "categories/stats/sums"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("categories/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/clients/clients.java b/examples/clients/clients.java index 1d48540c..9b755d86 100644 --- a/examples/clients/clients.java +++ b/examples/clients/clients.java @@ -17,17 +17,15 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "clients/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("clients/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -44,17 +42,15 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "clients/{client_type}/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("clients/{client_type}/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java index e57e06a9..1f971c8f 100644 --- a/examples/contactdb/contactdb.java +++ b/examples/contactdb/contactdb.java @@ -17,13 +17,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/custom_fields"; - request.body = "{\"type\":\"text\",\"name\":\"pet\"}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/custom_fields"); + request.setBody("{\"type\":\"text\",\"name\":\"pet\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -40,12 +40,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/custom_fields"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/custom_fields"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -62,12 +62,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/custom_fields/{custom_field_id}"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -84,12 +84,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/custom_fields/{custom_field_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -106,13 +106,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/lists"; - request.body = "{\"name\":\"your list name\"}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists"); + request.setBody("{\"name\":\"your list name\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -129,12 +129,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/lists"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -151,13 +151,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/lists"; - request.body = "[1,2,3,4]"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists"); + request.setBody("[1,2,3,4]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -174,16 +174,14 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "contactdb/lists/{list_id}"; - request.body = "{\"name\":\"newlistname\"}"; - Map queryParams = new HashMap(); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/lists/{list_id}"); + request.setBody("{\"name\":\"newlistname\"}"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -200,15 +198,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}"; - Map queryParams = new HashMap(); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -225,15 +221,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}"; - Map queryParams = new HashMap(); - queryParams.put("delete_contacts", "true"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}"); + request.addQueryParam("delete_contacts", "true"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -250,13 +244,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients"; - request.body = "[\"recipient_id1\",\"recipient_id2\"]"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -273,17 +267,15 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}/recipients"; - Map queryParams = new HashMap(); - queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -300,12 +292,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -322,16 +314,14 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; - Map queryParams = new HashMap(); - queryParams.put("recipient_id", "1"); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + request.addQueryParam("recipient_id", "1"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -348,13 +338,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "contactdb/recipients"; - request.body = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/recipients"); + request.setBody("[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -371,13 +361,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/recipients"; - request.body = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/recipients"); + request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -394,16 +384,14 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients"; - Map queryParams = new HashMap(); - queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -420,13 +408,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/recipients"; - request.body = "[\"recipient_id1\",\"recipient_id2\"]"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -443,12 +431,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/billable_count"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/billable_count"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -465,12 +453,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/count"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/count"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -487,15 +475,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/search"; - Map queryParams = new HashMap(); - queryParams.put("{field_name}", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/search"); + request.addQueryParam("{field_name}", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -512,12 +498,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/{recipient_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -534,12 +520,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/recipients/{recipient_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/recipients/{recipient_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -556,12 +542,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}/lists"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/{recipient_id}/lists"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -578,12 +564,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/reserved_fields"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/reserved_fields"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -600,13 +586,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/segments"; - request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/segments"); + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -623,12 +609,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/segments"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -645,16 +631,14 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "contactdb/segments/{segment_id}"; - request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; - Map queryParams = new HashMap(); - queryParams.put("segment_id", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); + request.addQueryParam("segment_id", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -671,15 +655,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}"; - Map queryParams = new HashMap(); - queryParams.put("segment_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.addQueryParam("segment_id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -696,15 +678,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/segments/{segment_id}"; - Map queryParams = new HashMap(); - queryParams.put("delete_contacts", "true"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.addQueryParam("delete_contacts", "true"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -721,16 +701,14 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}/recipients"; - Map queryParams = new HashMap(); - queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments/{segment_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/devices/devices.java b/examples/devices/devices.java index 5dbe9cd5..7c253eac 100644 --- a/examples/devices/devices.java +++ b/examples/devices/devices.java @@ -17,19 +17,17 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "devices/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("devices/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/geo/geo.java b/examples/geo/geo.java index 48309368..6b74fda9 100644 --- a/examples/geo/geo.java +++ b/examples/geo/geo.java @@ -17,20 +17,18 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "geo/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("country", "US"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("geo/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("country", "US"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index f40fac05..d595d0d3 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -230,13 +230,13 @@ public static void baselineExample() throws IOException { Request request = new Request(); Mail helloWorld = buildHelloEmail(); try { - request.method = Method.POST; - request.endpoint = "mail/send"; - request.body = helloWorld.build(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(helloWorld.build()); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -249,13 +249,13 @@ public static void kitchenSinkExample() throws IOException { Request request = new Request(); Mail kitchenSink = buildKitchenSink(); try { - request.method = Method.POST; - request.endpoint = "mail/send"; - request.body = kitchenSink.build(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(kitchenSink.build()); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/ips/ips.java b/examples/ips/ips.java index b9dfdbef..55c97644 100644 --- a/examples/ips/ips.java +++ b/examples/ips/ips.java @@ -17,19 +17,17 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips"; - Map queryParams = new HashMap(); - queryParams.put("subuser", "test_string"); - queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("exclude_whitelabels", "true"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("ips"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("exclude_whitelabels", "true"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -46,12 +44,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/assigned"; + request.setMethod(Method.GET); + request.setEndpoint("ips/assigned"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -68,13 +66,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "ips/pools"; - request.body = "{\"name\":\"marketing\"}"; + request.setMethod(Method.POST); + request.setEndpoint("ips/pools"); + request.setBody("{\"name\":\"marketing\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -91,12 +89,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/pools"; + request.setMethod(Method.GET); + request.setEndpoint("ips/pools"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -113,13 +111,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "ips/pools/{pool_name}"; - request.body = "{\"name\":\"new_pool_name\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("ips/pools/{pool_name}"); + request.setBody("{\"name\":\"new_pool_name\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -136,12 +134,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/pools/{pool_name}"; + request.setMethod(Method.GET); + request.setEndpoint("ips/pools/{pool_name}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -158,12 +156,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}"; + request.setMethod(Method.DELETE); + request.setEndpoint("ips/pools/{pool_name}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -180,13 +178,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "ips/pools/{pool_name}/ips"; - request.body = "{\"ip\":\"0.0.0.0\"}"; + request.setMethod(Method.POST); + request.setEndpoint("ips/pools/{pool_name}/ips"); + request.setBody("{\"ip\":\"0.0.0.0\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -203,12 +201,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}/ips/{ip}"; + request.setMethod(Method.DELETE); + request.setEndpoint("ips/pools/{pool_name}/ips/{ip}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -225,13 +223,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "ips/warmup"; - request.body = "{\"ip\":\"0.0.0.0\"}"; + request.setMethod(Method.POST); + request.setEndpoint("ips/warmup"); + request.setBody("{\"ip\":\"0.0.0.0\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -248,12 +246,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/warmup"; + request.setMethod(Method.GET); + request.setEndpoint("ips/warmup"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -270,12 +268,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/warmup/{ip_address}"; + request.setMethod(Method.GET); + request.setEndpoint("ips/warmup/{ip_address}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -292,12 +290,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "ips/warmup/{ip_address}"; + request.setMethod(Method.DELETE); + request.setEndpoint("ips/warmup/{ip_address}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -314,12 +312,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/{ip_address}"; + request.setMethod(Method.GET); + request.setEndpoint("ips/{ip_address}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/mail/mail.java b/examples/mail/mail.java index bb856633..52df8be6 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -17,12 +17,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "mail/batch"; + request.setMethod(Method.POST); + request.setEndpoint("mail/batch"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -39,12 +39,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail/batch/{batch_id}"; + request.setMethod(Method.GET); + request.setEndpoint("mail/batch/{batch_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -62,13 +62,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "mail/send"; - request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/mailboxproviders/mailboxproviders.java b/examples/mailboxproviders/mailboxproviders.java index 6b412955..4e0c6a06 100644 --- a/examples/mailboxproviders/mailboxproviders.java +++ b/examples/mailboxproviders/mailboxproviders.java @@ -17,20 +17,18 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mailbox_providers/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("mailbox_providers", "test_string"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("mailbox_providers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("mailbox_providers", "test_string"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java index b74b48bf..d42ffd2a 100644 --- a/examples/mailsettings/mailsettings.java +++ b/examples/mailsettings/mailsettings.java @@ -17,16 +17,14 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -43,13 +41,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/address_whitelist"; - request.body = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/address_whitelist"); + request.setBody("{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -66,12 +64,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/address_whitelist"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/address_whitelist"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -88,13 +86,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/bcc"; - request.body = "{\"enabled\":false,\"email\":\"email@example.com\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/bcc"); + request.setBody("{\"enabled\":false,\"email\":\"email@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -111,12 +109,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/bcc"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/bcc"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -133,13 +131,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/bounce_purge"; - request.body = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/bounce_purge"); + request.setBody("{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -156,12 +154,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/bounce_purge"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/bounce_purge"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -178,13 +176,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/footer"; - request.body = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/footer"); + request.setBody("{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -201,12 +199,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/footer"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/footer"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -223,13 +221,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_bounce"; - request.body = "{\"enabled\":true,\"email\":\"example@example.com\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/forward_bounce"); + request.setBody("{\"enabled\":true,\"email\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -246,12 +244,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/forward_bounce"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/forward_bounce"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -268,13 +266,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_spam"; - request.body = "{\"enabled\":false,\"email\":\"\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/forward_spam"); + request.setBody("{\"enabled\":false,\"email\":\"\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -291,12 +289,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/forward_spam"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/forward_spam"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -313,13 +311,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/plain_content"; - request.body = "{\"enabled\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/plain_content"); + request.setBody("{\"enabled\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -336,12 +334,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/plain_content"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/plain_content"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -358,13 +356,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/spam_check"; - request.body = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/spam_check"); + request.setBody("{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -381,12 +379,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/spam_check"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/spam_check"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -403,13 +401,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/template"; - request.body = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/template"); + request.setBody("{\"html_content\":\"<% body %>\",\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -426,12 +424,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/template"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/template"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/partnersettings/partnersettings.java b/examples/partnersettings/partnersettings.java index b63508a9..b4364bb9 100644 --- a/examples/partnersettings/partnersettings.java +++ b/examples/partnersettings/partnersettings.java @@ -17,16 +17,14 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "partner_settings"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("partner_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -43,13 +41,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "partner_settings/new_relic"; - request.body = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("partner_settings/new_relic"); + request.setBody("{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -66,12 +64,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "partner_settings/new_relic"; + request.setMethod(Method.GET); + request.setEndpoint("partner_settings/new_relic"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/scopes/scopes.java b/examples/scopes/scopes.java index f892f6ad..69d2db5d 100644 --- a/examples/scopes/scopes.java +++ b/examples/scopes/scopes.java @@ -17,12 +17,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "scopes"; + request.setMethod(Method.GET); + request.setEndpoint("scopes"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/senders/senders.java b/examples/senders/senders.java index f101b43f..d81630da 100644 --- a/examples/senders/senders.java +++ b/examples/senders/senders.java @@ -17,13 +17,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "senders"; - request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + request.setMethod(Method.POST); + request.setEndpoint("senders"); + request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -40,12 +40,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "senders"; + request.setMethod(Method.GET); + request.setEndpoint("senders"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -62,13 +62,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "senders/{sender_id}"; - request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("senders/{sender_id}"); + request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -85,12 +85,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "senders/{sender_id}"; + request.setMethod(Method.GET); + request.setEndpoint("senders/{sender_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -107,12 +107,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "senders/{sender_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("senders/{sender_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -129,12 +129,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "senders/{sender_id}/resend_verification"; + request.setMethod(Method.POST); + request.setEndpoint("senders/{sender_id}/resend_verification"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/stats/stats.java b/examples/stats/stats.java index cc108212..1dbe5c25 100644 --- a/examples/stats/stats.java +++ b/examples/stats/stats.java @@ -17,19 +17,17 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java index 6a9500be..6959ac8d 100644 --- a/examples/subusers/subusers.java +++ b/examples/subusers/subusers.java @@ -17,13 +17,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "subusers"; - request.body = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("subusers"); + request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -40,17 +40,15 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -67,15 +65,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/reputations"; - Map queryParams = new HashMap(); - queryParams.put("usernames", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/reputations"); + request.addQueryParam("usernames", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -92,20 +88,18 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("subusers", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("subusers", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -122,20 +116,18 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/stats/monthly"; - Map queryParams = new HashMap(); - queryParams.put("subuser", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/monthly"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -152,21 +144,19 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/stats/sums"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -183,13 +173,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "subusers/{subuser_name}"; - request.body = "{\"disabled\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("subusers/{subuser_name}"); + request.setBody("{\"disabled\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -206,12 +196,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}"; + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -228,13 +218,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/ips"; - request.body = "[\"127.0.0.1\"]"; + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/ips"); + request.setBody("[\"127.0.0.1\"]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -251,13 +241,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/monitor"; - request.body = "{\"frequency\":500,\"email\":\"example@example.com\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -274,13 +264,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "subusers/{subuser_name}/monitor"; - request.body = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -297,12 +287,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/monitor"; + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/monitor"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -319,12 +309,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}/monitor"; + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}/monitor"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -341,19 +331,17 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/stats/monthly"; - Map queryParams = new HashMap(); - queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/stats/monthly"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java index c5dbeaaa..049581a8 100644 --- a/examples/suppression/suppression.java +++ b/examples/suppression/suppression.java @@ -17,18 +17,16 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/blocks"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/blocks"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -45,13 +43,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/blocks"; - request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -68,12 +66,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/blocks/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/blocks/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -90,12 +88,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/blocks/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -112,16 +110,14 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/bounces"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("end_time", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/bounces"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("end_time", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -138,13 +134,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/bounces"; - request.body = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces"); + request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -161,12 +157,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/bounces/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/bounces/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -183,15 +179,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/bounces/{email}"; - Map queryParams = new HashMap(); - queryParams.put("email_address", "example@example.com"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces/{email}"); + request.addQueryParam("email_address", "example@example.com"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -208,18 +202,16 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/invalid_emails"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/invalid_emails"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -236,13 +228,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails"; - request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -259,12 +251,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/invalid_emails/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/invalid_emails/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -281,12 +273,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -303,12 +295,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/spam_report/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_report/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -325,12 +317,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/spam_report/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_report/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -347,18 +339,16 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/spam_reports"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_reports"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -375,13 +365,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/spam_reports"; - request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_reports"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -398,18 +388,16 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/unsubscribes"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/unsubscribes"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/templates/templates.java b/examples/templates/templates.java index c5ff8879..a16c4bed 100644 --- a/examples/templates/templates.java +++ b/examples/templates/templates.java @@ -17,13 +17,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "templates"; - request.body = "{\"name\":\"example_name\"}"; + request.setMethod(Method.POST); + request.setEndpoint("templates"); + request.setBody("{\"name\":\"example_name\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -40,12 +40,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "templates"; + request.setMethod(Method.GET); + request.setEndpoint("templates"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -62,13 +62,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "templates/{template_id}"; - request.body = "{\"name\":\"new_example_name\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("templates/{template_id}"); + request.setBody("{\"name\":\"new_example_name\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -85,12 +85,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "templates/{template_id}"; + request.setMethod(Method.GET); + request.setEndpoint("templates/{template_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -107,12 +107,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "templates/{template_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("templates/{template_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -129,13 +129,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions"; - request.body = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + request.setMethod(Method.POST); + request.setEndpoint("templates/{template_id}/versions"); + request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -152,13 +152,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "templates/{template_id}/versions/{version_id}"; - request.body = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); + request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -175,12 +175,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "templates/{template_id}/versions/{version_id}"; + request.setMethod(Method.GET); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -197,12 +197,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "templates/{template_id}/versions/{version_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -219,12 +219,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions/{version_id}/activate"; + request.setMethod(Method.POST); + request.setEndpoint("templates/{template_id}/versions/{version_id}/activate"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/trackingsettings/trackingsettings.java b/examples/trackingsettings/trackingsettings.java index 82deebe4..17b8d0d0 100644 --- a/examples/trackingsettings/trackingsettings.java +++ b/examples/trackingsettings/trackingsettings.java @@ -17,16 +17,14 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -43,13 +41,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/click"; - request.body = "{\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/click"); + request.setBody("{\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -66,12 +64,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/click"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/click"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -88,13 +86,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/google_analytics"; - request.body = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/google_analytics"); + request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -111,12 +109,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/google_analytics"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/google_analytics"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -133,13 +131,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/open"; - request.body = "{\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/open"); + request.setBody("{\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -156,12 +154,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/open"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/open"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -178,13 +176,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/subscription"; - request.body = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/subscription"); + request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -201,12 +199,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/subscription"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/subscription"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/user/user.java b/examples/user/user.java index 03c23df1..9c5ff95c 100644 --- a/examples/user/user.java +++ b/examples/user/user.java @@ -17,12 +17,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/account"; + request.setMethod(Method.GET); + request.setEndpoint("user/account"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -39,12 +39,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/credits"; + request.setMethod(Method.GET); + request.setEndpoint("user/credits"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -61,13 +61,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "user/email"; - request.body = "{\"email\":\"example@example.com\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("user/email"); + request.setBody("{\"email\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -84,12 +84,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/email"; + request.setMethod(Method.GET); + request.setEndpoint("user/email"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -106,13 +106,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "user/password"; - request.body = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("user/password"); + request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -129,13 +129,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/profile"; - request.body = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/profile"); + request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -152,12 +152,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/profile"; + request.setMethod(Method.GET); + request.setEndpoint("user/profile"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -174,13 +174,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "user/scheduled_sends"; - request.body = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; + request.setMethod(Method.POST); + request.setEndpoint("user/scheduled_sends"); + request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -197,12 +197,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/scheduled_sends"; + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -219,13 +219,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/scheduled_sends/{batch_id}"; - request.body = "{\"status\":\"pause\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setBody("{\"status\":\"pause\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -242,12 +242,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/scheduled_sends/{batch_id}"; + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends/{batch_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -264,12 +264,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "user/scheduled_sends/{batch_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("user/scheduled_sends/{batch_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -286,13 +286,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/settings/enforced_tls"; - request.body = "{\"require_tls\":true,\"require_valid_cert\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/settings/enforced_tls"); + request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -309,12 +309,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/settings/enforced_tls"; + request.setMethod(Method.GET); + request.setEndpoint("user/settings/enforced_tls"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -331,13 +331,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "user/username"; - request.body = "{\"username\":\"test_username\"}"; + request.setMethod(Method.PUT); + request.setBody("user/username"); + request.setBody("{\"username\":\"test_username\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -354,12 +354,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/username"; + request.setMethod(Method.GET); + request.setEndpoint("user/username"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -376,13 +376,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/webhooks/event/settings"; - request.body = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/event/settings"); + request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -399,12 +399,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/event/settings"; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/event/settings"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -421,13 +421,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "user/webhooks/event/test"; - request.body = "{\"url\":\"url\"}"; + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/event/test"); + request.setBody("{\"url\":\"url\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -444,13 +444,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "user/webhooks/parse/settings"; - request.body = "{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"; + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/parse/settings"); + request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -467,12 +467,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/parse/settings"; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -489,13 +489,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/webhooks/parse/settings/{hostname}"; - request.body = "{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -512,12 +512,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/parse/settings/{hostname}"; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -534,12 +534,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "user/webhooks/parse/settings/{hostname}"; + request.setMethod(Method.DELETE); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -556,19 +556,17 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/parse/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "test_string"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "test_string"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java index baabe3b7..4c668de5 100644 --- a/examples/whitelabel/whitelabel.java +++ b/examples/whitelabel/whitelabel.java @@ -17,13 +17,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains"; - request.body = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -40,19 +40,17 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - queryParams.put("domain", "test_string"); - queryParams.put("exclude_subusers", "true"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("domain", "test_string"); + request.addQueryParam("exclude_subusers", "true"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -69,12 +67,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains/default"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/default"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -91,12 +89,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains/subuser"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/subuser"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -113,12 +111,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/subuser"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/subuser"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -135,13 +133,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "whitelabel/domains/{domain_id}"; - request.body = "{\"default\":false,\"custom_spf\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setBody("{\"default\":false,\"custom_spf\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -158,12 +156,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains/{domain_id}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/{domain_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -180,12 +178,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{domain_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{domain_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -202,13 +200,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains/{domain_id}/subuser"; - request.body = "{\"username\":\"jane@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -225,13 +223,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/ips"; - request.body = "{\"ip\":\"192.168.0.1\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/ips"); + request.setBody("{\"ip\":\"192.168.0.1\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -248,12 +246,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{id}/ips/{ip}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -270,12 +268,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/validate"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/validate"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -292,13 +290,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/ips"; - request.body = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips"); + request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -315,17 +313,15 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/ips"; - Map queryParams = new HashMap(); - queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -342,12 +338,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/ips/{id}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -364,12 +360,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/ips/{id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -386,12 +382,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/ips/{id}/validate"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips/{id}/validate"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -408,17 +404,15 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/links"; - request.body = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links"); + request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -435,15 +429,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -460,15 +452,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links/default"; - Map queryParams = new HashMap(); - queryParams.put("domain", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/default"); + request.addQueryParam("domain", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -485,15 +475,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links/subuser"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -510,15 +498,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/links/subuser"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -535,13 +521,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "whitelabel/links/{id}"; - request.body = "{\"default\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/links/{id}"); + request.setBody("{\"default\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -558,12 +544,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links/{id}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/{id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -580,12 +566,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/links/{id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/{id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -602,12 +588,12 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/links/{id}/validate"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{id}/validate"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -624,13 +610,13 @@ public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/links/{link_id}/subuser"; - request.body = "{\"username\":\"jane@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{link_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } From 9a25e070252c3ddef12f4ce72b47520c689dcc21 Mon Sep 17 00:00:00 2001 From: Diego Camargo Date: Wed, 19 Oct 2016 22:02:12 -0500 Subject: [PATCH 073/439] Update documentation for java-http-client version 4.0.0 --- README.md | 34 +- USAGE.md | 2864 ++++++++++++++++++++++++-------------------------- USE_CASES.md | 24 +- 3 files changed, 1412 insertions(+), 1510 deletions(-) diff --git a/README.md b/README.md index cdd75dbd..1c6fc2e1 100644 --- a/README.md +++ b/README.md @@ -112,13 +112,13 @@ public class Example { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); try { - request.method = Method.POST; - request.endpoint = "mail/send"; - request.body = mail.build(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -141,13 +141,13 @@ public class Example { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "mail/send"; - request.body = "{\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the SendGrid Java Library!\"}],\"from\":{\"email\":\"test@example.com\"},\"content\":[{\"type\":\"text/plain\",\"value\": \"Hello, Email!\"}]}"; + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the SendGrid Java Library!\"}],\"from\":{\"email\":\"test@example.com\"},\"content\":[{\"type\":\"text/plain\",\"value\": \"Hello, Email!\"}]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -166,12 +166,12 @@ public class Example { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); try { Request request = new Request(); - request.method = Method.GET; - request.endpoint = "api_keys"; + request.setMethod(Method.GET); + request.setEndpoint("api_keys"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/USAGE.md b/USAGE.md index 98dcfb67..d729f75e 100644 --- a/USAGE.md +++ b/USAGE.md @@ -67,15 +67,13 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "access_settings/activity"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("access_settings/activity"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -97,13 +95,13 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "access_settings/whitelist"; - request.body = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + request.setMethod(Method.POST); + request.setEndpoint("access_settings/whitelist"); + request.setBody("{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -123,12 +121,12 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "access_settings/whitelist"; + request.setMethod(Method.GET); + request.setEndpoint("access_settings/whitelist"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -150,13 +148,13 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist"; - request.body = "{\"ids\":[1,2,3]}"; + request.setMethod(Method.DELETE); + request.setEndpoint("access_settings/whitelist"); + request.setBody("{\"ids\":[1,2,3]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -178,12 +176,12 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "access_settings/whitelist/{rule_id}"; + request.setMethod(Method.GET); + request.setEndpoint("access_settings/whitelist/{rule_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -205,12 +203,12 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "access_settings/whitelist/{rule_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("access_settings/whitelist/{rule_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -235,13 +233,13 @@ For more information about alerts, please see our [User Guide](https://sendgrid. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "alerts"; - request.body = "{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("alerts"); + request.setBody("{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -263,12 +261,12 @@ For more information about alerts, please see our [User Guide](https://sendgrid. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "alerts"; + request.setMethod(Method.GET); + request.setEndpoint("alerts"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -290,13 +288,13 @@ For more information about alerts, please see our [User Guide](https://sendgrid. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "alerts/{alert_id}"; - request.body = "{\"email_to\":\"example@example.com\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("alerts/{alert_id}"); + request.setBody("{\"email_to\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -318,12 +316,12 @@ For more information about alerts, please see our [User Guide](https://sendgrid. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "alerts/{alert_id}"; + request.setMethod(Method.GET); + request.setEndpoint("alerts/{alert_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -345,12 +343,12 @@ For more information about alerts, please see our [User Guide](https://sendgrid. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "alerts/{alert_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("alerts/{alert_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -377,13 +375,13 @@ See the [API Key Permissions List](https://sendgrid.com/docs/API_Reference/Web_A try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "api_keys"; - request.body = "{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"; + request.setMethod(Method.POST); + request.setEndpoint("api_keys"); + request.setBody("{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -401,15 +399,13 @@ The API Keys feature allows customers to be able to generate an API Key credenti try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "api_keys"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("api_keys"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -431,13 +427,13 @@ The API Keys feature allows customers to be able to generate an API Key credenti try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "api_keys/{api_key_id}"; - request.body = "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("api_keys/{api_key_id}"); + request.setBody("{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -463,13 +459,13 @@ The API Keys feature allows customers to be able to generate an API Key credenti try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "api_keys/{api_key_id}"; - request.body = "{\"name\":\"A New Hope\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("api_keys/{api_key_id}"); + request.setBody("{\"name\":\"A New Hope\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -487,12 +483,12 @@ If the API Key ID does not exist an HTTP 404 will be returned. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "api_keys/{api_key_id}"; + request.setMethod(Method.GET); + request.setEndpoint("api_keys/{api_key_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -518,12 +514,12 @@ The API Keys feature allows customers to be able to generate an API Key credenti try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "api_keys/{api_key_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("api_keys/{api_key_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -548,13 +544,13 @@ Each user can create up to 25 different suppression groups. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/groups"; - request.body = "{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/groups"); + request.setBody("{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product) Suggestions\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -576,15 +572,13 @@ Suppression groups, or [unsubscribe groups](https://sendgrid.com/docs/API_Refere try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/groups"; - Map queryParams = new HashMap(); - queryParams.put("id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("asm/groups"); + request.addQueryParam("id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -606,13 +600,13 @@ Each user can create up to 25 different suppression groups. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "asm/groups/{group_id}"; - request.body = "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"; + request.setMethod(Method.PATCH); + request.setEndpoint("asm/groups/{group_id}"); + request.setBody("{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -634,12 +628,12 @@ Each user can create up to 25 different suppression groups. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}"; + request.setMethod(Method.GET); + request.setEndpoint("asm/groups/{group_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -663,12 +657,12 @@ Each user can create up to 25 different suppression groups. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("asm/groups/{group_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -688,13 +682,13 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/groups/{group_id}/suppressions"; - request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/groups/{group_id}/suppressions"); + request.setBody("{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -712,12 +706,12 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/groups/{group_id}/suppressions"; + request.setMethod(Method.GET); + request.setEndpoint("asm/groups/{group_id}/suppressions"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -737,13 +731,13 @@ Suppressions are a list of email addresses that will not receive content sent un try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/groups/{group_id}/suppressions/search"; - request.body = "{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/groups/{group_id}/suppressions/search"); + request.setBody("{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -761,12 +755,12 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "asm/groups/{group_id}/suppressions/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("asm/groups/{group_id}/suppressions/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -784,12 +778,12 @@ Suppressions are a list of email addresses that will not receive content sent un try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/suppressions"; + request.setMethod(Method.GET); + request.setEndpoint("asm/suppressions"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -807,13 +801,13 @@ A global suppression (or global unsubscribe) is an email address of a recipient try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "asm/suppressions/global"; - request.body = "{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"; + request.setMethod(Method.POST); + request.setEndpoint("asm/suppressions/global"); + request.setBody("{\"recipient_emails\":[\"test1@example.com\",\"test2@example.com\"]}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -833,12 +827,12 @@ A global suppression (or global unsubscribe) is an email address of a recipient try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/suppressions/global/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("asm/suppressions/global/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -856,12 +850,12 @@ A global suppression (or global unsubscribe) is an email address of a recipient try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "asm/suppressions/global/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("asm/suppressions/global/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -879,12 +873,12 @@ Suppressions are a list of email addresses that will not receive content sent un try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "asm/suppressions/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("asm/suppressions/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -907,20 +901,18 @@ Advanced Stats provide a more in-depth view of your email statistics and the act try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "browsers/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("browsers", "test_string"); - queryParams.put("limit", "test_string"); - queryParams.put("offset", "test_string"); - queryParams.put("start_date", "2016-01-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("browsers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("browsers", "test_string"); + request.addQueryParam("limit", "test_string"); + request.addQueryParam("offset", "test_string"); + request.addQueryParam("start_date", "2016-01-01"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -947,13 +939,13 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns"; - request.body = "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns"); + request.setBody("{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our) spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -977,16 +969,14 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "campaigns"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("campaigns"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1006,13 +996,13 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}"; - request.body = "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("campaigns/{campaign_id}"); + request.setBody("{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1034,12 +1024,12 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}"; + request.setMethod(Method.GET); + request.setEndpoint("campaigns/{campaign_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1061,12 +1051,12 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("campaigns/{campaign_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1086,13 +1076,13 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "campaigns/{campaign_id}/schedules"; - request.body = "{\"send_at\":1489451436}"; + request.setMethod(Method.PATCH); + request.setEndpoint("campaigns/{campaign_id}/schedules"); + request.setBody("{\"send_at\":1489451436}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1112,13 +1102,13 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules"; - request.body = "{\"send_at\":1489771528}"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns/{campaign_id}/schedules"); + request.setBody("{\"send_at\":1489771528}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1138,12 +1128,12 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "campaigns/{campaign_id}/schedules"; + request.setMethod(Method.GET); + request.setEndpoint("campaigns/{campaign_id}/schedules"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1166,12 +1156,12 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "campaigns/{campaign_id}/schedules"; + request.setMethod(Method.DELETE); + request.setEndpoint("campaigns/{campaign_id}/schedules"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1193,12 +1183,12 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/now"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns/{campaign_id}/schedules/now"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1220,13 +1210,13 @@ For more information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "campaigns/{campaign_id}/schedules/test"; - request.body = "{\"to\":\"your.email@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("campaigns/{campaign_id}/schedules/test"); + request.setBody("{\"to\":\"your.email@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1247,17 +1237,15 @@ Categories can help organize your email analytics by enabling you to tag emails try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "categories"; - Map queryParams = new HashMap(); - queryParams.put("category", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("categories"); + request.addQueryParam("category", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1277,20 +1265,18 @@ Categories allow you to group your emails together according to broad topics tha try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "categories/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("categories", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("categories/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("categories", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1310,21 +1296,19 @@ Categories allow you to group your emails together according to broad topics tha try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "categories/stats/sums"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("categories/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1347,17 +1331,15 @@ Advanced Stats provide a more in-depth view of your email statistics and the act try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "clients/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("clients/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1383,17 +1365,15 @@ Advanced Stats provide a more in-depth view of your email statistics and the act try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "clients/{client_type}/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("clients/{client_type}/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1414,13 +1394,13 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/custom_fields"; - request.body = "{\"type\":\"text\",\"name\":\"pet\"}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/custom_fields"); + request.setBody("{\"type\":\"text\",\"name\":\"pet\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1438,12 +1418,12 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/custom_fields"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/custom_fields"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1461,12 +1441,12 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/custom_fields/{custom_field_id}"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1484,12 +1464,12 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/custom_fields/{custom_field_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1507,13 +1487,13 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/lists"; - request.body = "{\"name\":\"your list name\"}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists"); + request.setBody("{\"name\":\"your list name\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1531,12 +1511,12 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/lists"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1554,13 +1534,13 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/lists"; - request.body = "[1,2,3,4]"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists"); + request.setBody("[1,2,3,4]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1579,16 +1559,14 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "contactdb/lists/{list_id}"; - request.body = "{\"name\":\"newlistname\"}"; - Map queryParams = new HashMap(); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/lists/{list_id}"); + request.setBody("{\"name\":\"newlistname\"}"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1606,15 +1584,13 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}"; - Map queryParams = new HashMap(); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1632,15 +1608,13 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}"; - Map queryParams = new HashMap(); - queryParams.put("delete_contacts", "true"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}"); + request.addQueryParam("delete_contacts", "true"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1660,13 +1634,13 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients"; - request.body = "[\"recipient_id1\",\"recipient_id2\"]"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1684,17 +1658,15 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/lists/{list_id}/recipients"; - Map queryParams = new HashMap(); - queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1712,12 +1684,12 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1735,16 +1707,14 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/lists/{list_id}/recipients/{recipient_id}"; - Map queryParams = new HashMap(); - queryParams.put("recipient_id", "1"); - queryParams.put("list_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + request.addQueryParam("recipient_id", "1"); + request.addQueryParam("list_id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1766,13 +1736,13 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "contactdb/recipients"; - request.body = "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"; + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/recipients"); + request.setBody("[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1792,13 +1762,13 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/recipients"; - request.body = "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/recipients"); + request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last)_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1819,16 +1789,14 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients"; - Map queryParams = new HashMap(); - queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1848,13 +1816,13 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/recipients"; - request.body = "[\"recipient_id1\",\"recipient_id2\"]"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1874,12 +1842,12 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/billable_count"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/billable_count"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1897,12 +1865,12 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/count"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/count"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1929,15 +1897,13 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/search"; - Map queryParams = new HashMap(); - queryParams.put("{field_name}", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/search"); + request.addQueryParam("{field_name}", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1955,12 +1921,12 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/{recipient_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -1978,12 +1944,12 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/recipients/{recipient_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/recipients/{recipient_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2003,12 +1969,12 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/recipients/{recipient_id}/lists"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/{recipient_id}/lists"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2026,12 +1992,12 @@ The contactdb is a database of your contacts for [SendGrid Marketing Campaigns]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/reserved_fields"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/reserved_fields"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2069,13 +2035,13 @@ For more information about segments in Marketing Campaigns, please see our [User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "contactdb/segments"; - request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + request.setMethod(Method.POST); + request.setEndpoint("contactdb/segments"); + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and)_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2095,12 +2061,12 @@ For more information about segments in Marketing Campaigns, please see our [User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/segments"; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2120,16 +2086,14 @@ For more information about segments in Marketing Campaigns, please see our [User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "contactdb/segments/{segment_id}"; - request.body = "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; - Map queryParams = new HashMap(); - queryParams.put("segment_id", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and)_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; + request.addQueryParam("segment_id", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2149,15 +2113,13 @@ For more information about segments in Marketing Campaigns, please see our [User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}"; - Map queryParams = new HashMap(); - queryParams.put("segment_id", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.addQueryParam("segment_id", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2179,15 +2141,13 @@ For more information about segments in Marketing Campaigns, please see our [User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "contactdb/segments/{segment_id}"; - Map queryParams = new HashMap(); - queryParams.put("delete_contacts", "true"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.addQueryParam("delete_contacts", "true"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2207,16 +2167,14 @@ For more information about segments in Marketing Campaigns, please see our [User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "contactdb/segments/{segment_id}/recipients"; - Map queryParams = new HashMap(); - queryParams.put("page", "1"); - queryParams.put("page_size", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments/{segment_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2248,19 +2206,17 @@ Advanced Stats provide a more in-depth view of your email statistics and the act try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "devices/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("devices/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2283,20 +2239,18 @@ Advanced Stats provide a more in-depth view of your email statistics and the act try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "geo/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("country", "US"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("geo/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("country", "US"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2319,19 +2273,17 @@ A single IP address or a range of IP addresses may be dedicated to an account in try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips"; - Map queryParams = new HashMap(); - queryParams.put("subuser", "test_string"); - queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("exclude_whitelabels", "true"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("ips"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("exclude_whitelabels", "true"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2349,12 +2301,12 @@ A single IP address or a range of IP addresses may be dedicated to an account in try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/assigned"; + request.setMethod(Method.GET); + request.setEndpoint("ips/assigned"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2378,13 +2330,13 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "ips/pools"; - request.body = "{\"name\":\"marketing\"}"; + request.setMethod(Method.POST); + request.setEndpoint("ips/pools"); + request.setBody("{\"name\":\"marketing\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2406,12 +2358,12 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/pools"; + request.setMethod(Method.GET); + request.setEndpoint("ips/pools"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2433,13 +2385,13 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "ips/pools/{pool_name}"; - request.body = "{\"name\":\"new_pool_name\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("ips/pools/{pool_name}"); + request.setBody("{\"name\":\"new_pool_name\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2461,12 +2413,12 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/pools/{pool_name}"; + request.setMethod(Method.GET); + request.setEndpoint("ips/pools/{pool_name}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2488,12 +2440,12 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}"; + request.setMethod(Method.DELETE); + request.setEndpoint("ips/pools/{pool_name}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2513,13 +2465,13 @@ A single IP address or a range of IP addresses may be dedicated to an account in try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "ips/pools/{pool_name}/ips"; - request.body = "{\"ip\":\"0.0.0.0\"}"; + request.setMethod(Method.POST); + request.setEndpoint("ips/pools/{pool_name}/ips"); + request.setBody("{\"ip\":\"0.0.0.0\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2539,12 +2491,12 @@ A single IP address or a range of IP addresses may be dedicated to an account in try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "ips/pools/{pool_name}/ips/{ip}"; + request.setMethod(Method.DELETE); + request.setEndpoint("ips/pools/{pool_name}/ips/{ip}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2564,13 +2516,13 @@ For more general information about warming up IPs, please see our [Classroom](ht try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "ips/warmup"; - request.body = "{\"ip\":\"0.0.0.0\"}"; + request.setMethod(Method.POST); + request.setEndpoint("ips/warmup"); + request.setBody("{\"ip\":\"0.0.0.0\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2590,12 +2542,12 @@ For more general information about warming up IPs, please see our [Classroom](ht try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/warmup"; + request.setMethod(Method.GET); + request.setEndpoint("ips/warmup"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2615,12 +2567,12 @@ For more general information about warming up IPs, please see our [Classroom](ht try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/warmup/{ip_address}"; + request.setMethod(Method.GET); + request.setEndpoint("ips/warmup/{ip_address}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2640,12 +2592,12 @@ For more general information about warming up IPs, please see our [Classroom](ht try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "ips/warmup/{ip_address}"; + request.setMethod(Method.DELETE); + request.setEndpoint("ips/warmup/{ip_address}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2665,12 +2617,12 @@ A single IP address or a range of IP addresses may be dedicated to an account in try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "ips/{ip_address}"; + request.setMethod(Method.GET); + request.setEndpoint("ips/{ip_address}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2695,12 +2647,12 @@ More Information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "mail/batch"; + request.setMethod(Method.POST); + request.setEndpoint("mail/batch"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2722,12 +2674,12 @@ More Information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail/batch/{batch_id}"; + request.setMethod(Method.GET); + request.setEndpoint("mail/batch/{batch_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2751,13 +2703,13 @@ This endpoint has a helper, check it out [here](https://github.com/sendgrid/send try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "mail/send"; - request.body = "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\")[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2778,16 +2730,14 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2807,13 +2757,13 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/address_whitelist"; - request.body = "{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/address_whitelist"); + request.setBody("{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2833,12 +2783,12 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/address_whitelist"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/address_whitelist"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2858,13 +2808,13 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/bcc"; - request.body = "{\"enabled\":false,\"email\":\"email@example.com\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/bcc"); + request.setBody("{\"enabled\":false,\"email\":\"email@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2884,12 +2834,12 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/bcc"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/bcc"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2909,13 +2859,13 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/bounce_purge"; - request.body = "{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/bounce_purge"); + request.setBody("{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2935,12 +2885,12 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/bounce_purge"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/bounce_purge"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2960,13 +2910,13 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/footer"; - request.body = "{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/footer"); + request.setBody("{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -2986,12 +2936,12 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/footer"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/footer"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3011,13 +2961,13 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_bounce"; - request.body = "{\"enabled\":true,\"email\":\"example@example.com\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/forward_bounce"); + request.setBody("{\"enabled\":true,\"email\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3037,12 +2987,12 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/forward_bounce"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/forward_bounce"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3062,13 +3012,13 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/forward_spam"; - request.body = "{\"enabled\":false,\"email\":\"\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/forward_spam"); + request.setBody("{\"enabled\":false,\"email\":\"\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3088,12 +3038,12 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/forward_spam"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/forward_spam"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3113,13 +3063,13 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/plain_content"; - request.body = "{\"enabled\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/plain_content"); + request.setBody("{\"enabled\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3139,12 +3089,12 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/plain_content"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/plain_content"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3164,13 +3114,13 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/spam_check"; - request.body = "{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/spam_check"); + request.setBody("{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3190,12 +3140,12 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/spam_check"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/spam_check"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3217,13 +3167,13 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "mail_settings/template"; - request.body = "{\"html_content\":\"<% body %>\",\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/template"); + request.setBody("{\"html_content\":\"<% body %>\",\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3245,12 +3195,12 @@ Mail settings allow you to tell SendGrid specific things to do to every email th try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mail_settings/template"; + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/template"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3273,20 +3223,18 @@ Advanced Stats provide a more in-depth view of your email statistics and the act try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "mailbox_providers/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("mailbox_providers", "test_string"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("mailbox_providers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("mailbox_providers", "test_string"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3307,16 +3255,14 @@ Our partner settings allow you to integrate your SendGrid account with our partn try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "partner_settings"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("partner_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3336,13 +3282,13 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "partner_settings/new_relic"; - request.body = "{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("partner_settings/new_relic"); + request.setBody("{\"enable_subuser_statistics\":true,\"enabled\":true,\"license_key\":\"\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3362,12 +3308,12 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "partner_settings/new_relic"; + request.setMethod(Method.GET); + request.setEndpoint("partner_settings/new_relic"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3388,12 +3334,12 @@ API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://s try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "scopes"; + request.setMethod(Method.GET); + request.setEndpoint("scopes"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3416,13 +3362,13 @@ Sender Identities are required to be verified before use. If your domain has bee try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "senders"; - request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + request.setMethod(Method.POST); + request.setEndpoint("senders"); + request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example) INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3440,12 +3386,12 @@ Sender Identities are required to be verified before use. If your domain has bee try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "senders"; + request.setMethod(Method.GET); + request.setEndpoint("senders"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3465,13 +3411,13 @@ Partial updates are allowed, but fields that are marked as "required" in the POS try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "senders/{sender_id}"; - request.body = "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("senders/{sender_id}"); + request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example) INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3489,12 +3435,12 @@ Sender Identities are required to be verified before use. If your domain has bee try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "senders/{sender_id}"; + request.setMethod(Method.GET); + request.setEndpoint("senders/{sender_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3512,12 +3458,12 @@ Sender Identities are required to be verified before use. If your domain has bee try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "senders/{sender_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("senders/{sender_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3535,12 +3481,12 @@ Sender Identities are required to be verified before use. If your domain has bee try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "senders/{sender_id}/resend_verification"; + request.setMethod(Method.POST); + request.setEndpoint("senders/{sender_id}/resend_verification"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3561,19 +3507,17 @@ Parent accounts will see aggregated stats for their account and all subuser acco try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3597,13 +3541,13 @@ For more information about Subusers: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "subusers"; - request.body = "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("subusers"); + request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\)":\"John@example.com\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3624,17 +3568,15 @@ For more information about Subusers: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3652,15 +3594,13 @@ This endpoint allows you to request the reputations for your subusers. try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/reputations"; - Map queryParams = new HashMap(); - queryParams.put("usernames", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/reputations"); + request.addQueryParam("usernames", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3682,20 +3622,18 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/stats"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("subusers", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("subusers", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3718,20 +3656,18 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/stats/monthly"; - Map queryParams = new HashMap(); - queryParams.put("subuser", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/monthly"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3752,21 +3688,19 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/stats/sums"; - Map queryParams = new HashMap(); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("sort_by_direction", "asc"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3787,13 +3721,13 @@ For more information about Subusers: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "subusers/{subuser_name}"; - request.body = "{\"disabled\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("subusers/{subuser_name}"); + request.setBody("{\"disabled\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3814,12 +3748,12 @@ For more information about Subusers: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}"; + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3840,13 +3774,13 @@ More information: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/ips"; - request.body = "[\"127.0.0.1\"]"; + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/ips"); + request.setBody("[\"127.0.0.1\"]"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3862,13 +3796,13 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "subusers/{subuser_name}/monitor"; - request.body = "{\"frequency\":500,\"email\":\"example@example.com\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3884,13 +3818,13 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "subusers/{subuser_name}/monitor"; - request.body = "{\"frequency\":50000,\"email\":\"example@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3906,12 +3840,12 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/monitor"; + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/monitor"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3927,12 +3861,12 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "subusers/{subuser_name}/monitor"; + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}/monitor"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3955,19 +3889,17 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "subusers/{subuser_name}/stats/monthly"; - Map queryParams = new HashMap(); - queryParams.put("date", "test_string"); - queryParams.put("sort_by_direction", "asc"); - queryParams.put("limit", "1"); - queryParams.put("sort_by_metric", "test_string"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/stats/monthly"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -3990,18 +3922,16 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/blocks"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/blocks"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4026,13 +3956,13 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/blocks"; - request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4052,12 +3982,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/blocks/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/blocks/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4077,12 +4007,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/blocks/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4105,16 +4035,14 @@ For more information see: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/bounces"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("end_time", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/bounces"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("end_time", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4140,13 +4068,13 @@ Note: the `delete_all` and `emails` parameters should be used independently of e try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/bounces"; - request.body = "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces"); + request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4170,12 +4098,12 @@ For more information see: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/bounces/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/bounces/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4199,15 +4127,13 @@ For more information see: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/bounces/{email}"; - Map queryParams = new HashMap(); - queryParams.put("email_address", "example@example.com"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces/{email}"); + request.addQueryParam("email_address", "example@example.com"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4229,18 +4155,16 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/invalid_emails"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/invalid_emails"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4267,13 +4191,13 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails"; - request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4295,12 +4219,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/invalid_emails/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/invalid_emails/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4322,12 +4246,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/invalid_emails/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4347,12 +4271,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/spam_report/{email}"; + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_report/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4372,12 +4296,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/spam_report/{email}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_report/{email}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4397,18 +4321,16 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/spam_reports"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_reports"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4433,13 +4355,13 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "suppression/spam_reports"; - request.body = "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_reports"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4457,18 +4379,16 @@ A global suppression (or global unsubscribe) is an email address of a recipient try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "suppression/unsubscribes"; - Map queryParams = new HashMap(); - queryParams.put("start_time", "1"); - queryParams.put("limit", "1"); - queryParams.put("end_time", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("suppression/unsubscribes"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4491,13 +4411,13 @@ Transactional templates are templates created specifically for transactional ema try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "templates"; - request.body = "{\"name\":\"example_name\"}"; + request.setMethod(Method.POST); + request.setEndpoint("templates"); + request.setBody("{\"name\":\"example_name\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4517,12 +4437,12 @@ Transactional templates are templates created specifically for transactional ema try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "templates"; + request.setMethod(Method.GET); + request.setEndpoint("templates"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4543,13 +4463,13 @@ Transactional templates are templates created specifically for transactional ema try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "templates/{template_id}"; - request.body = "{\"name\":\"new_example_name\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("templates/{template_id}"); + request.setBody("{\"name\":\"new_example_name\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4570,12 +4490,12 @@ Transactional templates are templates created specifically for transactional ema try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "templates/{template_id}"; + request.setMethod(Method.GET); + request.setEndpoint("templates/{template_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4596,12 +4516,12 @@ Transactional templates are templates created specifically for transactional ema try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "templates/{template_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("templates/{template_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4622,13 +4542,13 @@ For more information about transactional templates, please see our [User Guide]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions"; - request.body = "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + request.setMethod(Method.POST); + request.setEndpoint("templates/{template_id}/versions"); + request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\")<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4654,13 +4574,13 @@ For more information about transactional templates, please see our [User Guide]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "templates/{template_id}/versions/{version_id}"; - request.body = "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); + request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example)_name\",\"plain_content\":\"<%body%>\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4686,12 +4606,12 @@ For more information about transactional templates, please see our [User Guide]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "templates/{template_id}/versions/{version_id}"; + request.setMethod(Method.GET); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4717,12 +4637,12 @@ For more information about transactional templates, please see our [User Guide]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "templates/{template_id}/versions/{version_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4749,12 +4669,12 @@ For more information about transactional templates, please see our [User Guide]( try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "templates/{template_id}/versions/{version_id}/activate"; + request.setMethod(Method.POST); + request.setEndpoint("templates/{template_id}/versions/{version_id}/activate"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4777,16 +4697,14 @@ For more information about tracking, please see our [User Guide](https://sendgri try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4806,13 +4724,13 @@ For more information about tracking, please see our [User Guide](https://sendgri try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/click"; - request.body = "{\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/click"); + request.setBody("{\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4832,12 +4750,12 @@ For more information about tracking, please see our [User Guide](https://sendgri try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/click"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/click"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4861,13 +4779,13 @@ For more information about tracking, please see our [User Guide](https://sendgri try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/google_analytics"; - request.body = "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/google_analytics"); + request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm)_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4891,12 +4809,12 @@ For more information about tracking, please see our [User Guide](https://sendgri try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/google_analytics"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/google_analytics"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4918,13 +4836,13 @@ For more information about tracking, please see our [User Guide](https://sendgri try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/open"; - request.body = "{\"enabled\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/open"); + request.setBody("{\"enabled\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4946,12 +4864,12 @@ For more information about tracking, please see our [User Guide](https://sendgri try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/open"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/open"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -4973,13 +4891,13 @@ For more information about tracking, please see our [User Guide](https://sendgri try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "tracking_settings/subscription"; - request.body = "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/subscription"); + request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page) html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5001,12 +4919,12 @@ For more information about tracking, please see our [User Guide](https://sendgri try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "tracking_settings/subscription"; + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings/subscription"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5033,12 +4951,12 @@ For more information about your user profile: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/account"; + request.setMethod(Method.GET); + request.setEndpoint("user/account"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5056,12 +4974,12 @@ Your monthly credit allotment limits the number of emails you may send before in try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/credits"; + request.setMethod(Method.GET); + request.setEndpoint("user/credits"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5083,13 +5001,13 @@ For more information about your user profile: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "user/email"; - request.body = "{\"email\":\"example@example.com\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("user/email"); + request.setBody("{\"email\":\"example@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5111,12 +5029,12 @@ For more information about your user profile: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/email"; + request.setMethod(Method.GET); + request.setEndpoint("user/email"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5138,13 +5056,13 @@ For more information about your user profile: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "user/password"; - request.body = "{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("user/password"); + request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5168,13 +5086,13 @@ It should be noted that any one or more of the parameters can be updated via the try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/profile"; - request.body = "{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/profile"); + request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5194,12 +5112,12 @@ For more information about your user profile: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/profile"; + request.setMethod(Method.GET); + request.setEndpoint("user/profile"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5220,13 +5138,13 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "user/scheduled_sends"; - request.body = "{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"; + request.setMethod(Method.POST); + request.setEndpoint("user/scheduled_sends"); + request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5244,12 +5162,12 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/scheduled_sends"; + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5267,13 +5185,13 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/scheduled_sends/{batch_id}"; - request.body = "{\"status\":\"pause\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setBody("{\"status\":\"pause\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5291,12 +5209,12 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/scheduled_sends/{batch_id}"; + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends/{batch_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5314,12 +5232,12 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "user/scheduled_sends/{batch_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("user/scheduled_sends/{batch_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5339,13 +5257,13 @@ The Enforced TLS settings specify whether or not the recipient is required to su try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/settings/enforced_tls"; - request.body = "{\"require_tls\":true,\"require_valid_cert\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/settings/enforced_tls"); + request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5365,12 +5283,12 @@ The Enforced TLS settings specify whether or not the recipient is required to su try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/settings/enforced_tls"; + request.setMethod(Method.GET); + request.setEndpoint("user/settings/enforced_tls"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5392,13 +5310,13 @@ For more information about your user profile: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PUT; - request.endpoint = "user/username"; - request.body = "{\"username\":\"test_username\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("user/username"); + request.setBody("{\"username\":\"test_username\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5420,12 +5338,12 @@ For more information about your user profile: try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/username"; + request.setMethod(Method.GET); + request.setEndpoint("user/username"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5447,13 +5365,13 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/webhooks/event/settings"; - request.body = "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/event/settings"); + request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\)",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5475,12 +5393,12 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/event/settings"; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/event/settings"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5500,13 +5418,13 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "user/webhooks/event/test"; - request.body = "{\"url\":\"url\"}"; + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/event/test"); + request.setBody("{\"url\":\"url\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5524,13 +5442,13 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "user/webhooks/parse/settings"; - request.body = "{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"; + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/parse/settings"); + request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam)_check\":true}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5548,12 +5466,12 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/parse/settings"; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5571,13 +5489,13 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "user/webhooks/parse/settings/{hostname}"; - request.body = "{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"; + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5595,12 +5513,12 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/parse/settings/{hostname}"; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5618,12 +5536,12 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "user/webhooks/parse/settings/{hostname}"; + request.setMethod(Method.DELETE); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5643,19 +5561,17 @@ There are a number of pre-made integrations for the SendGrid Parse Webhook which try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "user/webhooks/parse/stats"; - Map queryParams = new HashMap(); - queryParams.put("aggregated_by", "day"); - queryParams.put("limit", "test_string"); - queryParams.put("start_date", "2016-01-01"); - queryParams.put("end_date", "2016-04-01"); - queryParams.put("offset", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "test_string"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5682,13 +5598,13 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains"; - request.body = "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic)_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5709,19 +5625,17 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - queryParams.put("domain", "test_string"); - queryParams.put("exclude_subusers", "true"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("domain", "test_string"); + request.addQueryParam("exclude_subusers", "true"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5746,12 +5660,12 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains/default"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/default"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5778,12 +5692,12 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains/subuser"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/subuser"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5810,12 +5724,12 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/subuser"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/subuser"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5835,13 +5749,13 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "whitelabel/domains/{domain_id}"; - request.body = "{\"default\":false,\"custom_spf\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setBody("{\"default\":false,\"custom_spf\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5862,12 +5776,12 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/domains/{domain_id}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/{domain_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5887,12 +5801,12 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{domain_id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{domain_id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5919,13 +5833,13 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains/{domain_id}/subuser"; - request.body = "{\"username\":\"jane@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5950,13 +5864,13 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/ips"; - request.body = "{\"ip\":\"192.168.0.1\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/ips"); + request.setBody("{\"ip\":\"192.168.0.1\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -5982,12 +5896,12 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/domains/{id}/ips/{ip}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6012,12 +5926,12 @@ For more information on whitelabeling, please see our [User Guide](https://sendg try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/domains/{id}/validate"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/validate"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6039,13 +5953,13 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/ips"; - request.body = "{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips"); + request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6067,17 +5981,15 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/ips"; - Map queryParams = new HashMap(); - queryParams.put("ip", "test_string"); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6097,12 +6009,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/ips/{id}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6122,12 +6034,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/ips/{id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6147,12 +6059,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/ips/{id}/validate"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips/{id}/validate"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6172,17 +6084,15 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/links"; - request.body = "{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - queryParams.put("offset", "1"); - request.queryParams = queryParams; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links"); + request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6202,15 +6112,13 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links"; - Map queryParams = new HashMap(); - queryParams.put("limit", "1"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6237,15 +6145,13 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links/default"; - Map queryParams = new HashMap(); - queryParams.put("domain", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/default"); + request.addQueryParam("domain", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6269,15 +6175,13 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links/subuser"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6301,15 +6205,13 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/links/subuser"; - Map queryParams = new HashMap(); - queryParams.put("username", "test_string"); - request.queryParams = queryParams; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6329,13 +6231,13 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.PATCH; - request.endpoint = "whitelabel/links/{id}"; - request.body = "{\"default\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/links/{id}"); + request.setBody("{\"default\":true}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6355,12 +6257,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.GET; - request.endpoint = "whitelabel/links/{id}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/{id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6380,12 +6282,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.DELETE; - request.endpoint = "whitelabel/links/{id}"; + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/{id}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6405,12 +6307,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/links/{id}/validate"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{id}/validate"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -6434,13 +6336,13 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "whitelabel/links/{link_id}/subuser"; - request.body = "{\"username\":\"jane@example.com\"}"; + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{link_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } diff --git a/USE_CASES.md b/USE_CASES.md index 76cec618..1bfb62f0 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -61,13 +61,13 @@ public class Example { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); try { - request.method = Method.POST; - request.endpoint = "mail/send"; - request.body = mail.build(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } @@ -86,13 +86,13 @@ public class Example { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.method = Method.POST; - request.endpoint = "mail/send"; - request.body = "{\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"substitutions\":{\"-name-\":\"Example User\",\"-city-\":\"Denver\"},\"subject\":\"Hello World from the SendGrid Java Library!\"}],\"from\":{\"email\":\"test@example.com\"},\"content\":[{\"type\":\"text/html\",\"value\": \"I'm replacing the body tag\"}],\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"; + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"substitutions\":{\"-name-\":\"Example User\",\"-city-\":\"Denver\"},\"subject\":\"Hello World from the SendGrid Java Library!\"}],\"from\":{\"email\":\"test@example.com\"},\"content\":[{\"type\":\"text/html\",\"value\": \"I'm replacing the body tag\"}],\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); Response response = sg.api(request); - System.out.println(response.statusCode); - System.out.println(response.body); - System.out.println(response.headers); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } catch (IOException ex) { throw ex; } From a5139990c0b8b62dc5555e98dc3fe5ef60f03a63 Mon Sep 17 00:00:00 2001 From: Diego Camargo Date: Sun, 23 Apr 2017 12:27:01 -0500 Subject: [PATCH 074/439] Bump version of java-http-client dependency to 4.1.0 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0013f7f4..b1523baf 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ buildscript { } dependencies { - compile 'com.sendgrid:java-http-client:4.0.0' + compile 'com.sendgrid:java-http-client:4.1.0' compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' From 275326de15bda5ebaa330f211d8e134ab836f388 Mon Sep 17 00:00:00 2001 From: Jared Dellitt Date: Wed, 17 May 2017 14:31:08 -0500 Subject: [PATCH 075/439] Return correct Email in getFrom --- src/main/java/com/sendgrid/helpers/mail/Mail.java | 6 +++--- src/test/java/com/sendgrid/helpers/MailTest.java | 11 ++++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index db4c5134..beba5a53 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -61,8 +61,8 @@ public Mail(Email from, String subject, Email to, Content content) } @JsonProperty("from") - public Email getFrom(Email from) { - return from; + public Email getFrom() { + return this.from; } public void setFrom(Email from) { @@ -281,4 +281,4 @@ public String buildPretty() throws IOException { throw ex; } } -} \ No newline at end of file +} diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 21f709c0..e6383998 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -216,4 +216,13 @@ public void testKitchenSink() throws IOException { Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } -} \ No newline at end of file + + @Test + public void fromShouldReturnCorrectFrom() { + Mail mail = new Mail(); + Email from = new Email(); + mail.setFrom(from); + + Assert.assertSame(from, mail.getFrom()); + } +} From 48dc3a9536158ad4da2c261cd149f9dffc3d90d8 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 18 May 2017 12:17:56 -0700 Subject: [PATCH 076/439] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index cdd75dbd..4e959f1c 100644 --- a/README.md +++ b/README.md @@ -80,10 +80,6 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies [sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.2.1/sendgrid-java-3.2.1-jar.jar) -```java -import com.sendgrid.*; -``` - ## Dependencies - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) From 575b0f423ae4d29e137e825ccdbaf4a200a8c3c5 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 18 May 2017 12:19:21 -0700 Subject: [PATCH 077/439] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 4e959f1c..a7fe0a46 100644 --- a/README.md +++ b/README.md @@ -62,12 +62,6 @@ repositories { ... ``` -Then import the library - in the file appropriate to your Java project. - -```java -import com.sendgrid.SendGrid; -``` - ### via Maven ``` From 3c3ca491a0ccbe0f18522744e0f52736dbb7f26a Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 18 May 2017 18:27:21 -0700 Subject: [PATCH 078/439] Version Bump v4.0.0: PR #162 Update java http client dependency to 4.1.0 from 2.3.4 --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 4 ++-- 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55ffa558..a159391c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,33 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.0.0] - 2017-04-18 +### BREAKING CHANGE +- PR #162 Update java http client dependency to [4.1.0 from 2.3.4](https://github.com/sendgrid/java-http-client/releases) +- BIG thanks to [Diego Camargo](https://github.com/belfazt) for the pull request! +- The breaking change is that variables that were public are now private and accessable only via getters and setters +- The `Request` object attributes are now only accessable through getters/setters +- `request.method` is now `request.setMethod(string)` +- `request.endpoint` is now `request.setEndpoint(string)` +- `request.body` is now `request.setBody(string)` +- The `Response` object attributes are now only accessable through getters/setters +- `response.statusCode` is now `response.getStatusCode()` +- `response.body` is now `response.getBody()` +- `response.headers` is now `response.getHeaders()` +- Adding a query parameter goes from: + +```java +Map queryParams = new HashMap(); + request.addQueryParam("limit", "1"); +queryParams.put("limit", "1"); +request.queryParams = queryParams; +``` + +to: + +```java +request.addQueryParam("limit", "1"); +``` + ## [3.2.1] - 2017-04-13 ### Added - PR #175 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 684993b1..84e4086b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/3.2.1/sendgrid-3.2.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/3.2.1/sendgrid-3.2.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.0.0/sendgrid-4.0.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.0.0/sendgrid-4.0.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 9f1c0307..44b80ff9 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:3.2.1' + compile 'com.sendgrid:sendgrid-java:4.0.0' } repositories { @@ -72,7 +72,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/3.2.1/sendgrid-java-3.2.1-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/4.0.0/sendgrid-java-4.0.0-jar.jar) ## Dependencies diff --git a/build.gradle b/build.gradle index b1523baf..3472af63 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '3.2.1' +version = '4.0.0' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index e40fb8d8..333e70b4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 3.2.1 + 4.0.0 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -89,7 +89,7 @@ com.sendgrid java-http-client - 2.3.4 + 4.1.0 com.fasterxml.jackson.core From aeda57647def5dd267b95eadc0b17cbd430e88d0 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 18 May 2017 18:29:11 -0700 Subject: [PATCH 079/439] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a159391c..926808e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,8 @@ All notable changes to this project will be documented in this file. - Adding a query parameter goes from: ```java -Map queryParams = new HashMap(); + request.addQueryParam("limit", "1"); +Map queryParams = new HashMap(); +request.addQueryParam("limit", "1"); queryParams.put("limit", "1"); request.queryParams = queryParams; ``` From 0ed95fac3e8e95d6dca856188d08545338bf82fc Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 22 May 2017 10:04:56 -0700 Subject: [PATCH 080/439] Version Bump v4.0.1: PR #199 Return correct Email in getFrom --- CHANGELOG.md | 5 +++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 926808e0..da0691eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.0.1] - 2017-05-22 +### Fix +- PR #199 Return correct Email in getFrom +- BIG thanks to [Jared Dellitt](https://github.com/jareddellitt) + ## [4.0.0] - 2017-04-18 ### BREAKING CHANGE - PR #162 Update java http client dependency to [4.1.0 from 2.3.4](https://github.com/sendgrid/java-http-client/releases) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 84e4086b..8d62343b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.0.0/sendgrid-4.0.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.0.0/sendgrid-4.0.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.0.1/sendgrid-4.0.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.0.1/sendgrid-4.0.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 44b80ff9..0917ec36 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.0.0' + compile 'com.sendgrid:sendgrid-java:4.0.1' } repositories { @@ -72,7 +72,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/4.0.0/sendgrid-java-4.0.0-jar.jar) +[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/4.0.1/sendgrid-java-4.0.1-jar.jar) ## Dependencies diff --git a/build.gradle b/build.gradle index 3472af63..edd5355c 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.0.0' +version = '4.0.1' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 333e70b4..59da7a97 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.0.0 + 4.0.1 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java From 2a865194df573a0fe5d7fbdffcc819938174e547 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 22 May 2017 11:06:10 -0700 Subject: [PATCH 081/439] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0917ec36..d9499578 100644 --- a/README.md +++ b/README.md @@ -94,9 +94,9 @@ import java.io.IOException; public class Example { public static void main(String[] args) throws IOException { Email from = new Email("test@example.com"); - String subject = "Hello World from the SendGrid Java Library!"; + String subject = "Sending with SendGrid is Fun"; Email to = new Email("test@example.com"); - Content content = new Content("text/plain", "Hello, Email!"); + Content content = new Content("text/plain", "and easy to do anywhere, even with Java"); Mail mail = new Mail(from, subject, to, content); SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -133,7 +133,7 @@ public class Example { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the SendGrid Java Library!\"}],\"from\":{\"email\":\"test@example.com\"},\"content\":[{\"type\":\"text/plain\",\"value\": \"Hello, Email!\"}]}"); + request.setBody("{\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"subject\":\"Sending with SendGrid is Fun\"}],\"from\":{\"email\":\"test@example.com\"},\"content\":[{\"type\":\"text/plain\",\"value\": \"and easy to do anywhere, even with Java\"}]}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); From d85382c6a2b0980c858888329226b52e94512e30 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 28 Jun 2017 12:10:08 -0700 Subject: [PATCH 082/439] Update test to match Hello World in README --- .../java/com/sendgrid/helpers/MailTest.java | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index e6383998..e4eedd58 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -10,30 +10,13 @@ public class MailTest { @Test public void testHelloWorld() throws IOException { - Mail mail = new Mail(); - - Email fromEmail = new Email(); - fromEmail.setEmail("test@example.com"); - mail.setFrom(fromEmail); - - Personalization personalization = new Personalization(); - Email to = new Email(); - to.setEmail("test@example.com"); - personalization.addTo(to); - - mail.addPersonalization(personalization); - - mail.setSubject("Hello World from the SendGrid Java Library"); - - Content content = new Content(); - content.setType("text/plain"); - content.setValue("some text here"); - mail.addContent(content); - content.setType("text/html"); - content.setValue("some text here"); - mail.addContent(content); + Email from = new Email("test@example.com"); + String subject = "Sending with SendGrid is Fun"; + Email to = new Email("test@example.com"); + Content content = new Content("text/plain", "and easy to do anywhere, even with Java"); + Mail mail = new Mail(from, subject, to, content); - Assert.assertEquals(mail.build(), "{\"from\":{\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}]}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}]}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"email\":\"test@example.com\"},\"subject\":\"Sending with SendGrid is Fun\",\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}]}],\"content\":[{\"type\":\"text/plain\",\"value\":\"and easy to do anywhere, even with Java\"}]}"); } @Test From 708d3ec9ca44b317207b4723c0472ff0ce561d1f Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 25 Jul 2017 13:28:15 -0700 Subject: [PATCH 083/439] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d9499578..c8cccf0a 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,7 @@ public class Example { - [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. - + # Use Cases [Examples of common API use cases](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md), such as how to send an email with a transactional template. From f178ff092b54572830d861f3e86c29478010cf5e Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 25 Jul 2017 13:29:12 -0700 Subject: [PATCH 084/439] Ignore .settings --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1d9351de..afeac5ba 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ repo gradle.properties target *.class -examples/Example.java \ No newline at end of file +examples/Example.java +.settings \ No newline at end of file From 1882915b3ff3982681075c89c031fb134d71fa55 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 25 Jul 2017 15:35:20 -0700 Subject: [PATCH 085/439] Update link to fat jar download --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c8cccf0a..d4809565 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](http://repo1.maven.org/maven2/com/sendgrid/sendgrid-java/4.0.1/sendgrid-java-4.0.1-jar.jar) +[sendgrid-java-latest.jar](http://dx.sendgrid.com/downloads/sendgrid-java/sendgrid-java-latest.jar) ## Dependencies From 82a94450bd9a2f939498e8310075a93b7431c4dd Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 25 Jul 2017 16:25:55 -0700 Subject: [PATCH 086/439] Fix upload script --- .travis.yml | 2 +- build.gradle | 12 +++--- scripts/generate_upload_policy.php | 62 ------------------------------ scripts/s3policy.json | 10 ----- scripts/s3upload.sh | 31 --------------- scripts/upload.sh | 15 ++++++++ 6 files changed, 22 insertions(+), 110 deletions(-) delete mode 100755 scripts/generate_upload_policy.php delete mode 100755 scripts/s3policy.json delete mode 100755 scripts/s3upload.sh create mode 100755 scripts/upload.sh diff --git a/.travis.yml b/.travis.yml index 881ccd72..54267b90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ jdk: - openjdk7 after_script: - "./gradlew build" -- "./scripts/s3upload.sh" +- "./scripts/upload.sh" env: global: - S3_POLICY: ewogICJleHBpcmF0aW9uIjogIjIxMDAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCIgfSwKICAgIHsiYnVja2V0IjogInNlbmRncmlkLW9wZW4tc291cmNlIiB9LAogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgInNlbmRncmlkLWphdmEvIl0sCiAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMjA0OCwgMjY4NDM1NDU2XSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi96aXAiXQogIF0KfQo= diff --git a/build.gradle b/build.gradle index edd5355c..b243c67e 100644 --- a/build.gradle +++ b/build.gradle @@ -75,11 +75,6 @@ fatJar { // copy fatJar to base project directory so they will be in git (and on github for download) build << { - copy { - println "Copying ${fatJar.archiveName} to $projectDir/repo/com/sendgrid/$version" - from("$buildDir/libs/${fatJar.archiveName}") - into("$projectDir/repo/com/sendgrid/$version") - } copy { println "Copying ${fatJar.archiveName} to $projectDir/repo/com/sendgrid" from("$buildDir/libs/${fatJar.archiveName}") @@ -90,7 +85,12 @@ build << { task renameSendGridVersionJarToSendGridJar { doLast { - file("$projectDir/repo/com/sendgrid/${fatJar.archiveName}").renameTo(file("$projectDir/repo/com/sendgrid/sendgrid-jar.jar")) + file("$projectDir/repo/com/sendgrid/${fatJar.archiveName}").renameTo(file("$projectDir/repo/com/sendgrid/sendgrid-java-latest.jar")) + copy { + from("$buildDir/libs/${fatJar.archiveName}") + into("$projectDir/repo/com/sendgrid") + } + file("$projectDir/repo/com/sendgrid/${fatJar.archiveName}").renameTo(file("$projectDir/repo/com/sendgrid/sendgrid-java-${version}.jar")) } } diff --git a/scripts/generate_upload_policy.php b/scripts/generate_upload_policy.php deleted file mode 100755 index 18fdf829..00000000 --- a/scripts/generate_upload_policy.php +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env php -$blocksize) - $key=pack('H*', $hashfunc($key)); - $key=str_pad($key,$blocksize,chr(0x00)); - $ipad=str_repeat(chr(0x36),$blocksize); - $opad=str_repeat(chr(0x5c),$blocksize); - $hmac = pack( - 'H*',$hashfunc( - ($key^$opad).pack( - 'H*',$hashfunc( - ($key^$ipad).$data - ) - ) - ) - ); - return bin2hex($hmac); -} - -/* - * Used to encode a field for Amazon Auth - * (taken from the Amazon S3 PHP example library) - */ -function hex2b64($str) -{ - $raw = ''; - for ($i=0; $i < strlen($str); $i+=2) - { - $raw .= chr(hexdec(substr($str, $i, 2))); - } - return base64_encode($raw); -} - -if (count($argv) != 3) { - echo "Usage: " . $argv[0] . " \n"; - exit(1); -} - -$policy = file_get_contents($argv[1]); -$secret = $argv[2]; - -/* - * Base64 encode the Policy Document and then - * create HMAC SHA-1 signature of the base64 encoded policy - * using the secret key. Finally, encode it for Amazon Authentication. - */ -$base64_policy = base64_encode($policy); -$signature = hex2b64(hmacsha1($secret, $base64_policy)); -echo "S3_POLICY=\"" . $base64_policy . "\"\nS3_SIGNATURE=\"" . $signature . "\"\n" -?> diff --git a/scripts/s3policy.json b/scripts/s3policy.json deleted file mode 100755 index 01c8108e..00000000 --- a/scripts/s3policy.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "expiration": "2100-01-01T12:00:00.000Z", - "conditions": [ - {"acl": "public-read" }, - {"bucket": "sendgrid-open-source" }, - ["starts-with", "$key", "sendgrid-java/"], - ["content-length-range", 2048, 268435456], - ["eq", "$Content-Type", "application/zip"] - ] -} diff --git a/scripts/s3upload.sh b/scripts/s3upload.sh deleted file mode 100755 index 420580a5..00000000 --- a/scripts/s3upload.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# From: -# http://raamdev.com/2008/using-curl-to-upload-files-via-post-to-amazon-s3/ - -GIT_VERSION=`git rev-parse --short HEAD` - -curl -X POST \ - -F "key=sendgrid-java/versions/sendgrid-java-$GIT_VERSION.jar" \ - -F "acl=public-read" \ - -F "AWSAccessKeyId=$S3_ACCESS_KEY" \ - -F "Policy=$S3_POLICY" \ - -F "Signature=$S3_SIGNATURE" \ - -F "Content-Type=application/zip" \ - -F "file=@./repo/com/sendgrid/sendgrid-jar.jar" \ - https://s3.amazonaws.com/$S3_BUCKET - -if [ "$TRAVIS_BRANCH" = "master" ] -then - curl -X POST \ - -F "key=sendgrid-java/sendgrid-java.jar" \ - -F "acl=public-read" \ - -F "AWSAccessKeyId=$S3_ACCESS_KEY" \ - -F "Policy=$S3_POLICY" \ - -F "Signature=$S3_SIGNATURE" \ - -F "Content-Type=application/zip" \ - -F "file=@./repo/com/sendgrid/sendgrid-jar.jar" \ - https://s3.amazonaws.com/$S3_BUCKET -fi - -exit 0 diff --git a/scripts/upload.sh b/scripts/upload.sh new file mode 100755 index 00000000..6d0774f3 --- /dev/null +++ b/scripts/upload.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +VERSION="4.0.1" + +curl \ + -F "sdk=@./repo/com/sendgrid/sendgrid-java-$VERSION.jar" \ + -H "X-Key: $UPLOAD_SECRET" \ + http://dx.sendgrid.com/upload + +curl \ + -F "sdk=@./repo/com/sendgrid/sendgrid-java-latest.jar" \ + -H "X-Key: $UPLOAD_SECRET" \ + http://dx.sendgrid.com/upload + +exit 0 From e1727792b17665acc7f0991dfd04225ea684912c Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 25 Jul 2017 16:32:17 -0700 Subject: [PATCH 087/439] Use https --- scripts/upload.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/upload.sh b/scripts/upload.sh index 6d0774f3..a2cf37fb 100755 --- a/scripts/upload.sh +++ b/scripts/upload.sh @@ -5,11 +5,11 @@ VERSION="4.0.1" curl \ -F "sdk=@./repo/com/sendgrid/sendgrid-java-$VERSION.jar" \ -H "X-Key: $UPLOAD_SECRET" \ - http://dx.sendgrid.com/upload + https://dx.sendgrid.com/upload curl \ -F "sdk=@./repo/com/sendgrid/sendgrid-java-latest.jar" \ -H "X-Key: $UPLOAD_SECRET" \ - http://dx.sendgrid.com/upload + https://dx.sendgrid.com/upload exit 0 From b68c90a34d2b062d507868330703cf584e1bd09b Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 26 Jul 2017 19:07:40 -0700 Subject: [PATCH 088/439] Update USAGE.md --- USAGE.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/USAGE.md b/USAGE.md index d729f75e..308ca259 100644 --- a/USAGE.md +++ b/USAGE.md @@ -1562,7 +1562,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.setMethod(Method.PATCH); request.setEndpoint("contactdb/lists/{list_id}"); request.setBody("{\"name\":\"newlistname\"}"); - request.addQueryParam("list_id", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -1586,7 +1585,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co Request request = new Request(); request.setMethod(Method.GET); request.setEndpoint("contactdb/lists/{list_id}"); - request.addQueryParam("list_id", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -1661,8 +1659,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.setMethod(Method.GET); request.setEndpoint("contactdb/lists/{list_id}/recipients"); request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - request.addQueryParam("list_id", "1"); + request.addQueryParam("page_size", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -1710,7 +1707,6 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co request.setMethod(Method.DELETE); request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); request.addQueryParam("recipient_id", "1"); - request.addQueryParam("list_id", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); From a207d287a61e01a8da792c749fd21b7f191295b6 Mon Sep 17 00:00:00 2001 From: Antonio Bucciol Date: Mon, 31 Jul 2017 14:13:58 +0200 Subject: [PATCH 089/439] Return empty collections in place of nulls When calling some getXyz() method, where xyz is a collection, if xyz is null then an empty collection will be returned. --- .../helpers/mail/objects/Personalization.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 50dcafc5..49124e2e 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -19,9 +19,11 @@ public class Personalization { @JsonProperty("substitutions") private Map substitutions; @JsonProperty("custom_args") private Map customArgs; @JsonProperty("send_at") private long sendAt; - + @JsonProperty("to") public List getTos() { + if(tos == null) + return new ArrayList(); return tos; } @@ -39,6 +41,8 @@ public void addTo(Email email) { @JsonProperty("cc") public List getCcs() { + if(ccs == null) + return new ArrayList(); return ccs; } @@ -56,6 +60,8 @@ public void addCc(Email email) { @JsonProperty("bcc") public List getBccs() { + if(bccs == null) + return new ArrayList(); return bccs; } @@ -82,6 +88,8 @@ public void setSubject(String subject) { @JsonProperty("headers") public Map getHeaders() { + if(headers == null) + return new HashMap(); return headers; } @@ -96,6 +104,8 @@ public void addHeader(String key, String value) { @JsonProperty("substitutions") public Map getSubstitutions() { + if(substitutions == null) + return new HashMap(); return substitutions; } @@ -110,6 +120,8 @@ public void addSubstitution(String key, String value) { @JsonProperty("custom_args") public Map getCustomArgs() { + if(customArgs == null) + return new HashMap(); return customArgs; } @@ -130,4 +142,5 @@ public long sendAt() { public void setSendAt(long sendAt) { this.sendAt = sendAt; } -} \ No newline at end of file + +} From de0369a77c7944e9b98938d1d3ea0276ef81bd29 Mon Sep 17 00:00:00 2001 From: Gabriel Krell Date: Sun, 30 Jul 2017 20:32:49 -0600 Subject: [PATCH 090/439] Add release notifications Add badge, copy --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d4809565..78b3ecf1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ [![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) +[![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) -Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! +**NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. **This library allows you to quickly and easily use the SendGrid Web API v3 via Java.** @@ -189,7 +190,7 @@ public class Example { Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! -All updates to this library is documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). +All updates to this library are documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. # Roadmap From c6539fc16d7dadc9c974cc1b9428a3d6afc17e14 Mon Sep 17 00:00:00 2001 From: Antonio Bucciol Date: Wed, 2 Aug 2017 15:01:57 +0200 Subject: [PATCH 091/439] Returning immutable empty Collections When returning an empty collections is needed, now makes use of the ready, immutable empty collections of java.util.Collections in place of instantiating a new collection every time. --- .../helpers/mail/objects/Personalization.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 49124e2e..734dc9c0 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Collections; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -23,7 +24,7 @@ public class Personalization { @JsonProperty("to") public List getTos() { if(tos == null) - return new ArrayList(); + return Collections.emptyList(); return tos; } @@ -42,7 +43,7 @@ public void addTo(Email email) { @JsonProperty("cc") public List getCcs() { if(ccs == null) - return new ArrayList(); + return Collections.emptyList(); return ccs; } @@ -61,7 +62,7 @@ public void addCc(Email email) { @JsonProperty("bcc") public List getBccs() { if(bccs == null) - return new ArrayList(); + return Collections.emptyList(); return bccs; } @@ -89,7 +90,7 @@ public void setSubject(String subject) { @JsonProperty("headers") public Map getHeaders() { if(headers == null) - return new HashMap(); + return Collections.emptyMap(); return headers; } @@ -105,7 +106,7 @@ public void addHeader(String key, String value) { @JsonProperty("substitutions") public Map getSubstitutions() { if(substitutions == null) - return new HashMap(); + return Collections.emptyMap(); return substitutions; } @@ -121,7 +122,7 @@ public void addSubstitution(String key, String value) { @JsonProperty("custom_args") public Map getCustomArgs() { if(customArgs == null) - return new HashMap(); + return Collections.emptyMap(); return customArgs; } From a1f9c5b8ab4d7e4c1d87688f6850d7b87290cd6a Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 16 Aug 2017 17:52:48 -0700 Subject: [PATCH 092/439] Version Bump: v4.1.0: PR #211 Return empty collections in place of nulls --- .gitignore | 4 +++- .travis.yml | 13 +++++++++---- CHANGELOG.md | 5 +++++ CONTRIBUTING.md | 2 +- README.md | 2 +- bin/com/sendgrid/helpers/README.md | 19 +++++++++++++++++++ build.gradle | 2 +- pom.xml | 2 +- scripts/upload.sh | 7 ------- 9 files changed, 40 insertions(+), 16 deletions(-) create mode 100644 bin/com/sendgrid/helpers/README.md diff --git a/.gitignore b/.gitignore index afeac5ba..009d149a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,6 @@ gradle.properties target *.class examples/Example.java -.settings \ No newline at end of file +.settings +.classpath +.project \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 54267b90..68991687 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,14 @@ language: java sudo: false -jdk: -- oraclejdk8 -- oraclejdk7 -- openjdk7 +matrix: + include: + - os: linux + jdk: openjdk7 + - os: linux + dist: precise + jdk: oraclejdk7 + - os: linux + jdk: oraclejdk8 after_script: - "./gradlew build" - "./scripts/upload.sh" diff --git a/CHANGELOG.md b/CHANGELOG.md index da0691eb..8fd10782 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.1.0] - 2017-08-16 +### Added +- PR #211 Return empty collections in place of nulls +- BIG thanks to [Antonio Bucciol](https://github.com/TBuc) + ## [4.0.1] - 2017-05-22 ### Fix - PR #199 Return correct Email in getFrom diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8d62343b..e627ccc1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.0.1/sendgrid-4.0.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.0.1/sendgrid-4.0.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 78b3ecf1..1847b034 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.0.1' + compile 'com.sendgrid:sendgrid-java:4.1.0' } repositories { diff --git a/bin/com/sendgrid/helpers/README.md b/bin/com/sendgrid/helpers/README.md new file mode 100644 index 00000000..b676e6f9 --- /dev/null +++ b/bin/com/sendgrid/helpers/README.md @@ -0,0 +1,19 @@ +**This helper allows you to quickly and easily build a Mail object for sending email through SendGrid.** + +## Dependencies + +- [Jackson](https://github.com/FasterXML/jackson) + +# Quick Start + +Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) (make sure you have set your environment variable to include your SENDGRID_API_KEY). + +```bash +cd examples/mail +javac -classpath ../../build/libs/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-4.1.0-jar.jar:. Example +``` + +## Usage + +- See the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) for a complete working example. +- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/overview.html) \ No newline at end of file diff --git a/build.gradle b/build.gradle index b243c67e..881a496e 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.0.1' +version = '4.1.0' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 59da7a97..07545420 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.0.1 + 4.1.0 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/scripts/upload.sh b/scripts/upload.sh index a2cf37fb..fb719838 100755 --- a/scripts/upload.sh +++ b/scripts/upload.sh @@ -1,12 +1,5 @@ #!/bin/bash -VERSION="4.0.1" - -curl \ - -F "sdk=@./repo/com/sendgrid/sendgrid-java-$VERSION.jar" \ - -H "X-Key: $UPLOAD_SECRET" \ - https://dx.sendgrid.com/upload - curl \ -F "sdk=@./repo/com/sendgrid/sendgrid-java-latest.jar" \ -H "X-Key: $UPLOAD_SECRET" \ From d9f421fe89a4c2ae04df98610a5342c870bfca5a Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 16 Aug 2017 17:58:52 -0700 Subject: [PATCH 093/439] Travis --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 68991687..dd4b71c2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,7 @@ language: java sudo: false matrix: include: - - os: linux - jdk: openjdk7 + - jdk: openjdk7 - os: linux dist: precise jdk: oraclejdk7 From e817ee41cb6e88a075adaccd8c301fbb39d3336c Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 16 Aug 2017 18:00:48 -0700 Subject: [PATCH 094/439] Travis --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index dd4b71c2..48807070 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,9 @@ language: java sudo: false matrix: include: - - jdk: openjdk7 + - os: linux + dist: precise + jdk: openjdk7 - os: linux dist: precise jdk: oraclejdk7 From daa4ae49fe3915538288de24e1c8ae3a8f069fb5 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sun, 17 Sep 2017 09:17:24 -0700 Subject: [PATCH 095/439] Mail Helper Refactor Proposal --- proposals/mail-helper-refactor.md | 466 ++++++++++++++++++++++++++++++ 1 file changed, 466 insertions(+) create mode 100644 proposals/mail-helper-refactor.md diff --git a/proposals/mail-helper-refactor.md b/proposals/mail-helper-refactor.md new file mode 100644 index 00000000..7e152bf5 --- /dev/null +++ b/proposals/mail-helper-refactor.md @@ -0,0 +1,466 @@ +# Send a Single Email to a Single Recipient + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + +This is the minimum code needed to send an email. + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + To to = new To("test@example.com", "Example User"); + Subject subject = Subject("Sending with SendGrid is Fun"); + PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); + HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); + SendGridMessage email = new SendGridMessage(from, + to, + subject, + plainTextContent, + htmlContent); + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` + +# Send a Single Email to Multiple Recipients + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; +import java.util.ArrayList; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + ArrayList tos = new ArrayList(); + tos.add(new To("test1@example.com", "Example User1")); + tos.add(new To("test2@example.com", "Example User2")); + tos.add(new To("test3@example.com", "Example User3")); + Subject subject = Subject("Sending with SendGrid is Fun"); + PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); + HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); + SendGridMessage email = new SendGridMessage(from, + tos, + subject, + plainTextContent, + htmlContent); + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` + +# Send Multiple Emails to Multiple Recipients + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; +import java.util.ArrayList; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + ArrayList tos = new ArrayList(); + ArrayList sub = new ArrayList(); + sub.add("-name-", "Alain"); + sub.add("-github-", "http://github.com/ninsuo"); + tos.add(new To("test1@example.com", "Example User1"), sub); + sub.clear(); + sub.add("-name-", "Elmer"); + sub.add("-github-", "http://github.com/thinkingserious"); + tos.add(new To("test2@example.com", "Example User2"), sub); + sub.clear(); + sub.add("-name-", "Casey"); + sub.add("-github-", "http://github.com/caseyw"); + tos.add(new To("test3@example.com", "Example User3"), sub); + // Alternatively, you can pass in a collection of subjects OR add a subject to the `To` object + Subject subject = Subject("Hi -name-!"); + Substitution globalSubstitution = new Substitution("-time-", ""); + PlainTextContent plainTextContent = new PlainTextContent("Hello -name-, your github is -github-, email sent at -time-"); + HtmlContent htmlContent = new HtmlContent("Hello -name-, your github is here email sent at -time-"); + SendGridMessage email = new SendGridMessage(from, + subject, // or subjects, + tos, + plainTextContent, + htmlContent, + globalSubstition); // or globalSubstitutions + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` + +# Kitchen Sink - an example with all settings used + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; +import java.util.ArrayList; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + To to = new To("test@example.com", "Example User"); + Subject subject = Subject("Sending with SendGrid is Fun"); + PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); + HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); + SendGridMessage email = new SendGridMessage(from, + to, // or tos + subject, // or subjects + plainTextContent, + htmlContent); + + // For a detailed description of each of these settings, please see the [documentation](https://sendgrid.com/docs/API_Reference/api_v3.html). + email.addTo("test1@example.com", "Example User1") + ArrayList tos = new ArrayList(); + tos.add("test2@example.com", "Example User2"); + tos.add("test3@example.com", "Example User3"); + email.addTos(tos); + + email.addCc("test4@example.com", "Example User4") + ArrayList ccs = new ArrayList(); + ccs.add("test5@example.com", "Example User5"); + ccs.add("test6@example.com", "Example User6"); + email.addCcs(ccs); + + email.addBcc("test7@example.com", "Example User7") + ArrayList bccs = new ArrayList(); + bccs.add("test8@example.com", "Example User8"); + bccs.add("test9@example.com", "Example User9"); + email.addBccs(bccs); + + email.addHeader("X-Test1", "Test1"); + email.addHeader("X-Test2", "Test2"); + ArrayList
    headers = new ArrayList
    (); + headers.add("X-Test3", "Test3"); + headers.add("X-Test4", "Test4"); + email.addHeaders(headers) + + email.addSubstitution("%name1%", "Example Name 1"); + email.addSubstitution("%city1%", "Denver"); + ArrayList substitutions = new ArrayList(); + substitutions.add("%name2%", "Example Name 2"); + substitutions.add("%city2%", "Orange" ); + email.addSubstitutions(substitutions); + + email.addCustomArg("marketing1", "false"); + email.addCustomArg("transactional1", "true"); + ArrayList customArgs = new ArrayList(); + customArgs.add("marketing2", "true"); + customArgs.add("transactional2", "false"); + email.addCustomArgs(customArgs); + + email.setSendAt(1461775051); + + // If you need to add more [Personalizations](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/personalizations.html), here is an example of adding another Personalization by passing in a personalization index + + + email.addTo("test10@example.com", "Example User 10", 1); + ArrayList tos1 = new ArrayList(); + tos1.add("test11@example.com", "Example User11"); + tos1.add("test12@example.com", "Example User12"); + email.addTos(tos1, 1); + + email.addCc("test13@example.com", "Example User 13", 1); + ArrayList ccs1 = new ArrayList(); + ccs1.add("test14@example.com", "Example User14"); + ccs1.add("test15@example.com", "Example User15"); + email.addCcs(ccs1, 1); + + email.addBcc("test16@example.com", "Example User 16", 1); + ArrayList bccs1 = new ArrayList(); + bccs1.add("test17@example.com", "Example User17"); + bccs1.add("test18@example.com", "Example User18"); + email.addBccs(bccs1, 1); + + email.addHeader("X-Test5", "Test5", 1); + email.addHeader("X-Test6", "Test6", 1); + ArrayList
    headers1 = new ArrayList
    (); + headers1.add("X-Test7", "Test7"); + headers1.add("X-Test8", "Test8"); + email.addHeaders(headers1, 1); + + email.addSubstitution("%name3%", "Example Name 3", 1); + email.addSubstitution("%city3%", "Redwood City", 1); + ArrayList substitutions1 = new ArrayList(); + substitutions1.add("%name4%", "Example Name 4"); + substitutions1.add("%city4%", "London"); + var substitutions1 = new Dictionary() + email.addSubstitutions(substitutions1, 1); + + email.addCustomArg("marketing3", "true", 1); + email.addCustomArg("transactional3", "false", 1); + ArrayList customArgs1 = new ArrayList(); + customArgs1.add("marketing4", "false"); + customArgs1.add("transactional4", "true"); + email.addCustomArgs(customArgs1, 1); + + email.setSendAt(1461775052, 1); + + // The values below this comment are global to entire message + + email.setFrom("test@example.com", "Example User 0"); + + email.setSubject("this subject overrides the Global Subject"); + + email.setGlobalSubject("Sending with SendGrid is Fun"); + + email.addContent(MimeType.TEXT, "and easy to do anywhere, even with C#"); + email.addContent(MimeType.HTML, "and easy to do anywhere, even with C#"); + ArrayList contents = new ArrayList(); + contents.add("text/calendar", "Party Time!!"); + contents.add("text/calendar2", "Party Time2!!"); + email.addContents(contents); + + email.addAttachment("balance_001.pdf", + "base64 encoded string", + "application/pdf", + "attachment", + "Balance Sheet"); + ArrayList attachments = new ArrayList(); + attachments.add("banner.png", + "base64 encoded string", + "image/png", + "inline", + "Banner"); + attachments.add("banner2.png", + "base64 encoded string", + "image/png", + "inline", + "Banner2"); + email.addAttachments(attachments); + + email.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); + + email.addGlobalHeader("X-Day", "Monday"); + ArrayList
    globalHeaders = new ArrayList
    (); + globalHeaders.add("X-Month", "January" ); + globalHeaders.add("X-Year", "2017"); + email.addGlobalHeaders(globalHeaders); + + email.addSection("%section1", "Substitution for Section 1 Tag"); + ArrayList
    sections = new ArrayList
    (); + sections.add("%section2%", "Substitution for Section 2 Tag"); + sections.add("%section3%", "Substitution for Section 3 Tag"); + email.addSections(sections); + + email.addCategory("customer"); + ArrayList categories = new ArrayList(); + categories.add("vip"); + categories.add("new_account"); + email.addCategories(categories); + + email.addGlobalCustomArg("campaign", "welcome"); + ArrayList globalCustomArgs = new ArrayList(); + globalCustomArgs.add("sequence2", "2"); + globalCustomArgs.add("sequence3", "3"); + email.addGlobalCustomArgs(globalCustomArgs); + + ArrayList asmGroups = new ArrayList(); + asmGroups.add(1); + asmGroups.add(4); + asmGroups.add(5); + email.setAsm(3, asmGroups); + + email.setGlobalSendAt(1461775051); + + email.setIpPoolName("23"); + + // This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) + //email.setBatchId("some_batch_id"); + + email.setBccSetting(true, "test@example.com"); + + email.setBypassListManagement(true); + + email.setFooterSetting(true, "Some Footer HTML", "Some Footer Text"); + + email.setSandBoxMode(true); + + email.setSpamCheck(true, 1, "https://gotchya.example.com"); + + email.setClickTracking(true, false); + + email.setOpenTracking(true, "Optional tag to replace with the open image in the body of the message"); + + email.setSubscriptionTracking(true, + "HTML to insert into the text / html portion of the message", + "text to insert into the text/plain portion of the message", + "substitution tag"); + + email.setGoogleAnalytics(true, + "some campaign", + "some content", + "some medium", + "some source", + "some term"); + + email.setReplyTo("test+reply@example.com", "Reply To Me"); + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` + +# Attachments + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + To to = new To("test@example.com", "Example User"); + Subject subject = Subject("Sending with SendGrid is Fun"); + PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); + HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); + SendGridMessage email = new SendGridMessage(from, + to, + subject, + plainTextContent, + htmlContent); + email.addAttachment("balance_001.pdf", + "base64 encoded string", + "application/pdf", + "attachment", + "Balance Sheet"); + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` + +# Transactional Templates + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + +For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. + +Template ID (replace with your own): + +```text +13b8f94f-bcae-4ec6-b752-70d6cb59f932 +``` + +Email Subject: + +```text +<%subject%> +``` + +Template Body: + +```html + + + + + +Hello -name-, +

    +I'm glad you are trying out the template feature! +

    +<%body%> +

    +I hope you are having a great day in -city- :) +

    + + +``` + + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + To to = new To("test@example.com", "Example User"); + Subject subject = Subject("Sending with SendGrid is Fun"); + PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); + HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); + SendGridMessage email = new SendGridMessage(from, + to, + subject, + plainTextContent, + htmlContent); + // See `Send Multiple Emails to Multiple Recipients` for additional methods for adding substitutions + email.addSubstitution("-name-", "Example User"); + email.addSubstitution("-city-", "Denver"); + email.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` From f5e32f67132c939384781735877dbf2f741e288f Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sun, 17 Sep 2017 09:18:55 -0700 Subject: [PATCH 096/439] Update mail-helper-refactor.md --- proposals/mail-helper-refactor.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/proposals/mail-helper-refactor.md b/proposals/mail-helper-refactor.md index 7e152bf5..2b35f142 100644 --- a/proposals/mail-helper-refactor.md +++ b/proposals/mail-helper-refactor.md @@ -1,6 +1,6 @@ # Send a Single Email to a Single Recipient -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. +The following code assumes you are storing the API key in an environment variable (recommended). This is the minimum code needed to send an email. @@ -37,7 +37,7 @@ public class SendGridExample { # Send a Single Email to Multiple Recipients -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. +The following code assumes you are storing the API key in an environment variable (recommended). ```java import com.sendgrid.*; @@ -76,7 +76,7 @@ public class SendGridExample { # Send Multiple Emails to Multiple Recipients -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. +The following code assumes you are storing the API key in an environment variable (recommended). ```java @@ -128,7 +128,7 @@ public class SendGridExample { # Kitchen Sink - an example with all settings used -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. +The following code assumes you are storing the API key in an environment variable (recommended). ```java @@ -352,8 +352,7 @@ public class SendGridExample { # Attachments -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. - +The following code assumes you are storing the API key in an environment variable (recommended). ```java import com.sendgrid.*; @@ -393,7 +392,7 @@ public class SendGridExample { # Transactional Templates -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. +The following code assumes you are storing the API key in an environment variable (recommended). For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. From 338cb04c4099bcbe8a8f5b55e106b06f699c332d Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sun, 17 Sep 2017 09:19:50 -0700 Subject: [PATCH 097/439] Update mail-helper-refactor.md --- proposals/mail-helper-refactor.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/proposals/mail-helper-refactor.md b/proposals/mail-helper-refactor.md index 2b35f142..b050491a 100644 --- a/proposals/mail-helper-refactor.md +++ b/proposals/mail-helper-refactor.md @@ -12,7 +12,7 @@ public class SendGridExample { public static void main(String[] args) throws SendGridException { From from = new From("test@example.com", "Example User"); To to = new To("test@example.com", "Example User"); - Subject subject = Subject("Sending with SendGrid is Fun"); + Subject subject = new Subject("Sending with SendGrid is Fun"); PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); SendGridMessage email = new SendGridMessage(from, @@ -51,7 +51,7 @@ public class SendGridExample { tos.add(new To("test1@example.com", "Example User1")); tos.add(new To("test2@example.com", "Example User2")); tos.add(new To("test3@example.com", "Example User3")); - Subject subject = Subject("Sending with SendGrid is Fun"); + Subject subject = new Subject("Sending with SendGrid is Fun"); PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); SendGridMessage email = new SendGridMessage(from, @@ -101,7 +101,7 @@ public class SendGridExample { sub.add("-github-", "http://github.com/caseyw"); tos.add(new To("test3@example.com", "Example User3"), sub); // Alternatively, you can pass in a collection of subjects OR add a subject to the `To` object - Subject subject = Subject("Hi -name-!"); + Subject subject = new Subject("Hi -name-!"); Substitution globalSubstitution = new Substitution("-time-", ""); PlainTextContent plainTextContent = new PlainTextContent("Hello -name-, your github is -github-, email sent at -time-"); HtmlContent htmlContent = new HtmlContent("Hello -name-, your github is here email sent at -time-"); @@ -140,7 +140,7 @@ public class SendGridExample { public static void main(String[] args) throws SendGridException { From from = new From("test@example.com", "Example User"); To to = new To("test@example.com", "Example User"); - Subject subject = Subject("Sending with SendGrid is Fun"); + Subject subject = new Subject("Sending with SendGrid is Fun"); PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); SendGridMessage email = new SendGridMessage(from, @@ -362,7 +362,7 @@ public class SendGridExample { public static void main(String[] args) throws SendGridException { From from = new From("test@example.com", "Example User"); To to = new To("test@example.com", "Example User"); - Subject subject = Subject("Sending with SendGrid is Fun"); + Subject subject = new Subject("Sending with SendGrid is Fun"); PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); SendGridMessage email = new SendGridMessage(from, @@ -437,7 +437,7 @@ public class SendGridExample { public static void main(String[] args) throws SendGridException { From from = new From("test@example.com", "Example User"); To to = new To("test@example.com", "Example User"); - Subject subject = Subject("Sending with SendGrid is Fun"); + Subject subject = new Subject("Sending with SendGrid is Fun"); PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); SendGridMessage email = new SendGridMessage(from, From 6d5b12654724323a91d53b2e758987a607d2e224 Mon Sep 17 00:00:00 2001 From: Mattia Barbon Date: Tue, 19 Sep 2017 13:18:05 +0200 Subject: [PATCH 098/439] Alway serialize click-tracking parameters Othwerwise setting them to a false value produces an invalid request, because the fields are required. Fixes #181 --- .../sendgrid/helpers/mail/objects/ClickTrackingSetting.java | 1 - src/test/java/com/sendgrid/helpers/MailTest.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index 839c8fbf..9214eb45 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) public class ClickTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("enable_text") private boolean enableText; diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index e4eedd58..7ad8bfe5 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -170,7 +170,7 @@ public void testKitchenSink() throws IOException { TrackingSettings trackingSettings = new TrackingSettings(); ClickTrackingSetting clickTrackingSetting = new ClickTrackingSetting(); clickTrackingSetting.setEnable(true); - clickTrackingSetting.setEnableText(true); + clickTrackingSetting.setEnableText(false); trackingSettings.setClickTrackingSetting(clickTrackingSetting); OpenTrackingSetting openTrackingSetting = new OpenTrackingSetting(); openTrackingSetting.setEnable(true); @@ -197,7 +197,7 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } @Test From 3acee9fa3c25b784ad2f3380ea951fa0bc505bc1 Mon Sep 17 00:00:00 2001 From: Stephen Calabrese Date: Sun, 1 Oct 2017 15:08:23 -0500 Subject: [PATCH 099/439] The license file is put into the release jar. --- pom.xml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 07545420..86ef37d8 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,15 @@ scm:git:git@github.com:sendgrid/sendgrid-java.git HEAD - + + + + ${basedir} + + LICENSE.txt + + + org.apache.maven.plugins @@ -119,4 +127,4 @@ test - + \ No newline at end of file From e61af6c70ac0663dfa4c09cb73c48607d5dbc433 Mon Sep 17 00:00:00 2001 From: Stephen Calabrese Date: Sun, 1 Oct 2017 15:37:56 -0500 Subject: [PATCH 100/439] Adding SendGridApi interface. --- src/main/java/com/sendgrid/SendGrid.java | 2 +- src/main/java/com/sendgrid/SendGridApi.java | 34 +++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/sendgrid/SendGridApi.java diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 421b11a9..061316b8 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -7,7 +7,7 @@ /** * Class SendGrid allows for quick and easy access to the SendGrid API. */ -public class SendGrid { +public class SendGrid implements SendGridApi{ private static final String VERSION = "3.0.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; diff --git a/src/main/java/com/sendgrid/SendGridApi.java b/src/main/java/com/sendgrid/SendGridApi.java new file mode 100644 index 00000000..d6273b36 --- /dev/null +++ b/src/main/java/com/sendgrid/SendGridApi.java @@ -0,0 +1,34 @@ +package com.sendgrid; + +import java.io.IOException; +import java.util.Map; + +public interface SendGridApi { + + public void initializeSendGrid(String apiKey); + + public String getLibraryVersion(); + + public String getVersion(); + + public void setVersion(String version); + + public Map getRequestHeaders(); + + public Map addRequestHeader(String key, String value); + + public Map removeRequestHeader(String key); + public String getHost(); + + public void setHost(String host); + + /** + * Class makeCall makes the call to the SendGrid API, override this method for testing. + */ + public Response makeCall(Request request) throws IOException; + + /** + * Class api sets up the request to the SendGrid API, this is main interface. + */ + public Response api(Request request) throws IOException; +} From b8af1fc0f7dfdf494d99b7fc1cd5ffb2bcd61a72 Mon Sep 17 00:00:00 2001 From: Stephen Calabrese Date: Sun, 1 Oct 2017 17:22:10 -0500 Subject: [PATCH 101/439] Fixing Mail deserialization issue. --- .../java/com/sendgrid/helpers/mail/Mail.java | 70 +++++++++++++++++++ .../sendgrid/helpers/mail/objects/ASM.java | 25 +++++++ .../helpers/mail/objects/Attachments.java | 49 +++++++++++++ .../helpers/mail/objects/BccSettings.java | 28 ++++++++ .../mail/objects/ClickTrackingSetting.java | 25 +++++++ .../helpers/mail/objects/Content.java | 31 ++++++++ .../sendgrid/helpers/mail/objects/Email.java | 31 ++++++++ .../helpers/mail/objects/FooterSetting.java | 34 +++++++++ .../mail/objects/GoogleAnalyticsSetting.java | 52 ++++++++++++++ .../helpers/mail/objects/MailSettings.java | 49 +++++++++++++ .../mail/objects/OpenTrackingSetting.java | 29 ++++++++ .../helpers/mail/objects/Personalization.java | 65 ++++++++++++++++- .../helpers/mail/objects/Setting.java | 22 ++++++ .../mail/objects/SpamCheckSetting.java | 31 ++++++++ .../objects/SubscriptionTrackingSetting.java | 40 +++++++++++ .../mail/objects/TrackingSettings.java | 43 ++++++++++++ .../java/com/sendgrid/helpers/MailTest.java | 14 ++++ 17 files changed, 637 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index beba5a53..99f08556 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -281,4 +281,74 @@ public String buildPretty() throws IOException { throw ex; } } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((batchId == null) ? 0 : batchId.hashCode()); + result = prime * result + ((categories == null) ? 0 : categories.hashCode()); + result = prime * result + ((customArgs == null) ? 0 : customArgs.hashCode()); + result = prime * result + ((headers == null) ? 0 : headers.hashCode()); + result = prime * result + ((ipPoolId == null) ? 0 : ipPoolId.hashCode()); + result = prime * result + ((sections == null) ? 0 : sections.hashCode()); + result = prime * result + (int) (sendAt ^ (sendAt >>> 32)); + result = prime * result + ((subject == null) ? 0 : subject.hashCode()); + result = prime * result + ((templateId == null) ? 0 : templateId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Mail other = (Mail) obj; + if (batchId == null) { + if (other.batchId != null) + return false; + } else if (!batchId.equals(other.batchId)) + return false; + if (categories == null) { + if (other.categories != null) + return false; + } else if (!categories.equals(other.categories)) + return false; + if (customArgs == null) { + if (other.customArgs != null) + return false; + } else if (!customArgs.equals(other.customArgs)) + return false; + if (headers == null) { + if (other.headers != null) + return false; + } else if (!headers.equals(other.headers)) + return false; + if (ipPoolId == null) { + if (other.ipPoolId != null) + return false; + } else if (!ipPoolId.equals(other.ipPoolId)) + return false; + if (sections == null) { + if (other.sections != null) + return false; + } else if (!sections.equals(other.sections)) + return false; + if (sendAt != other.sendAt) + return false; + if (subject == null) { + if (other.subject != null) + return false; + } else if (!subject.equals(other.subject)) + return false; + if (templateId == null) { + if (other.templateId != null) + return false; + } else if (!templateId.equals(other.templateId)) + return false; + return true; + } } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java index 1a65a65d..29952ae1 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java @@ -28,4 +28,29 @@ public int[] getGroupsToDisplay() { public void setGroupsToDisplay(int[] groupsToDisplay) { this.groupsToDisplay = Arrays.copyOf(groupsToDisplay, groupsToDisplay.length); } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + groupId; + result = prime * result + Arrays.hashCode(groupsToDisplay); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ASM other = (ASM) obj; + if (groupId != other.groupId) + return false; + if (!Arrays.equals(groupsToDisplay, other.groupsToDisplay)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 9323b837..6bec689f 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -137,4 +137,53 @@ public Attachments build() { return attachments; } } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((content == null) ? 0 : content.hashCode()); + result = prime * result + ((contentId == null) ? 0 : contentId.hashCode()); + result = prime * result + ((disposition == null) ? 0 : disposition.hashCode()); + result = prime * result + ((filename == null) ? 0 : filename.hashCode()); + result = prime * result + ((type == null) ? 0 : type.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Attachments other = (Attachments) obj; + if (content == null) { + if (other.content != null) + return false; + } else if (!content.equals(other.content)) + return false; + if (contentId == null) { + if (other.contentId != null) + return false; + } else if (!contentId.equals(other.contentId)) + return false; + if (disposition == null) { + if (other.disposition != null) + return false; + } else if (!disposition.equals(other.disposition)) + return false; + if (filename == null) { + if (other.filename != null) + return false; + } else if (!filename.equals(other.filename)) + return false; + if (type == null) { + if (other.type != null) + return false; + } else if (!type.equals(other.type)) + return false; + return true; + } } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index 176387fa..fa9758f2 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -26,4 +26,32 @@ public String getEmail() { public void setEmail(String email) { this.email = email; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((email == null) ? 0 : email.hashCode()); + result = prime * result + (enable ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + BccSettings other = (BccSettings) obj; + if (email == null) { + if (other.email != null) + return false; + } else if (!email.equals(other.email)) + return false; + if (enable != other.enable) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index 839c8fbf..2abc58c8 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -26,4 +26,29 @@ public boolean getEnableText() { public void setEnableText(boolean enableText) { this.enableText = enableText; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + result = prime * result + (enableText ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ClickTrackingSetting other = (ClickTrackingSetting) obj; + if (enable != other.enable) + return false; + if (enableText != other.enableText) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index b00f9566..faa9820b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -35,4 +35,35 @@ public String getValue() { public void setValue(String value) { this.value = value; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((type == null) ? 0 : type.hashCode()); + result = prime * result + ((value == null) ? 0 : value.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Content other = (Content) obj; + if (type == null) { + if (other.type != null) + return false; + } else if (!type.equals(other.type)) + return false; + if (value == null) { + if (other.value != null) + return false; + } else if (!value.equals(other.value)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java index 43396a85..cbfce557 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -39,4 +39,35 @@ public String getEmail() { public void setEmail(String email) { this.email = email; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((email == null) ? 0 : email.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Email other = (Email) obj; + if (email == null) { + if (other.email != null) + return false; + } else if (!email.equals(other.email)) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index 8e542c7f..1b2ece01 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -36,4 +36,38 @@ public String getHtml() { public void setHtml(String html) { this.html = html; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + result = prime * result + ((html == null) ? 0 : html.hashCode()); + result = prime * result + ((text == null) ? 0 : text.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + FooterSetting other = (FooterSetting) obj; + if (enable != other.enable) + return false; + if (html == null) { + if (other.html != null) + return false; + } else if (!html.equals(other.html)) + return false; + if (text == null) { + if (other.text != null) + return false; + } else if (!text.equals(other.text)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index ce30edbc..594743d6 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -66,4 +66,56 @@ public String getCampaignMedium() { public void setCampaignMedium(String campaignMedium) { this.campaignMedium = campaignMedium; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((campaignContent == null) ? 0 : campaignContent.hashCode()); + result = prime * result + ((campaignMedium == null) ? 0 : campaignMedium.hashCode()); + result = prime * result + ((campaignName == null) ? 0 : campaignName.hashCode()); + result = prime * result + ((campaignSource == null) ? 0 : campaignSource.hashCode()); + result = prime * result + ((campaignTerm == null) ? 0 : campaignTerm.hashCode()); + result = prime * result + (enable ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + GoogleAnalyticsSetting other = (GoogleAnalyticsSetting) obj; + if (campaignContent == null) { + if (other.campaignContent != null) + return false; + } else if (!campaignContent.equals(other.campaignContent)) + return false; + if (campaignMedium == null) { + if (other.campaignMedium != null) + return false; + } else if (!campaignMedium.equals(other.campaignMedium)) + return false; + if (campaignName == null) { + if (other.campaignName != null) + return false; + } else if (!campaignName.equals(other.campaignName)) + return false; + if (campaignSource == null) { + if (other.campaignSource != null) + return false; + } else if (!campaignSource.equals(other.campaignSource)) + return false; + if (campaignTerm == null) { + if (other.campaignTerm != null) + return false; + } else if (!campaignTerm.equals(other.campaignTerm)) + return false; + if (enable != other.enable) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index 63580458..0590b224 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -56,4 +56,53 @@ public SpamCheckSetting getSpamCheck() { public void setSpamCheckSetting(SpamCheckSetting spamCheckSetting) { this.spamCheckSetting = spamCheckSetting; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((bccSettings == null) ? 0 : bccSettings.hashCode()); + result = prime * result + ((bypassListManagement == null) ? 0 : bypassListManagement.hashCode()); + result = prime * result + ((footerSetting == null) ? 0 : footerSetting.hashCode()); + result = prime * result + ((sandBoxMode == null) ? 0 : sandBoxMode.hashCode()); + result = prime * result + ((spamCheckSetting == null) ? 0 : spamCheckSetting.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MailSettings other = (MailSettings) obj; + if (bccSettings == null) { + if (other.bccSettings != null) + return false; + } else if (!bccSettings.equals(other.bccSettings)) + return false; + if (bypassListManagement == null) { + if (other.bypassListManagement != null) + return false; + } else if (!bypassListManagement.equals(other.bypassListManagement)) + return false; + if (footerSetting == null) { + if (other.footerSetting != null) + return false; + } else if (!footerSetting.equals(other.footerSetting)) + return false; + if (sandBoxMode == null) { + if (other.sandBoxMode != null) + return false; + } else if (!sandBoxMode.equals(other.sandBoxMode)) + return false; + if (spamCheckSetting == null) { + if (other.spamCheckSetting != null) + return false; + } else if (!spamCheckSetting.equals(other.spamCheckSetting)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index aeb7ede1..b5508946 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -26,4 +26,33 @@ public String getSubstitutionTag() { public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + result = prime * result + ((substitutionTag == null) ? 0 : substitutionTag.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + OpenTrackingSetting other = (OpenTrackingSetting) obj; + if (enable != other.enable) + return false; + if (substitutionTag == null) { + if (other.substitutionTag != null) + return false; + } else if (!substitutionTag.equals(other.substitutionTag)) + return false; + return true; + } + } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 734dc9c0..e3646451 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -143,5 +143,68 @@ public long sendAt() { public void setSendAt(long sendAt) { this.sendAt = sendAt; } - + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((bccs == null) ? 0 : bccs.hashCode()); + result = prime * result + ((ccs == null) ? 0 : ccs.hashCode()); + result = prime * result + ((customArgs == null) ? 0 : customArgs.hashCode()); + result = prime * result + ((headers == null) ? 0 : headers.hashCode()); + result = prime * result + (int) (sendAt ^ (sendAt >>> 32)); + result = prime * result + ((subject == null) ? 0 : subject.hashCode()); + result = prime * result + ((substitutions == null) ? 0 : substitutions.hashCode()); + result = prime * result + ((tos == null) ? 0 : tos.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Personalization other = (Personalization) obj; + if (bccs == null) { + if (other.bccs != null) + return false; + } else if (!bccs.equals(other.bccs)) + return false; + if (ccs == null) { + if (other.ccs != null) + return false; + } else if (!ccs.equals(other.ccs)) + return false; + if (customArgs == null) { + if (other.customArgs != null) + return false; + } else if (!customArgs.equals(other.customArgs)) + return false; + if (headers == null) { + if (other.headers != null) + return false; + } else if (!headers.equals(other.headers)) + return false; + if (sendAt != other.sendAt) + return false; + if (subject == null) { + if (other.subject != null) + return false; + } else if (!subject.equals(other.subject)) + return false; + if (substitutions == null) { + if (other.substitutions != null) + return false; + } else if (!substitutions.equals(other.substitutions)) + return false; + if (tos == null) { + if (other.tos != null) + return false; + } else if (!tos.equals(other.tos)) + return false; + return true; + } } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 5818a145..2fab69e8 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -16,4 +16,26 @@ public boolean getEnable() { public void setEnable(boolean enable) { this.enable = enable; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Setting other = (Setting) obj; + if (enable != other.enable) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index 85d1dc10..ba5c0105 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -36,4 +36,35 @@ public String getPostToUrl() { public void setPostToUrl(String postToUrl) { this.postToUrl = postToUrl; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + result = prime * result + ((postToUrl == null) ? 0 : postToUrl.hashCode()); + result = prime * result + spamThreshold; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SpamCheckSetting other = (SpamCheckSetting) obj; + if (enable != other.enable) + return false; + if (postToUrl == null) { + if (other.postToUrl != null) + return false; + } else if (!postToUrl.equals(other.postToUrl)) + return false; + if (spamThreshold != other.spamThreshold) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index ad1121c2..da02d8e9 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -46,4 +46,44 @@ public String getSubstitutionTag() { public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + result = prime * result + ((html == null) ? 0 : html.hashCode()); + result = prime * result + ((substitutionTag == null) ? 0 : substitutionTag.hashCode()); + result = prime * result + ((text == null) ? 0 : text.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SubscriptionTrackingSetting other = (SubscriptionTrackingSetting) obj; + if (enable != other.enable) + return false; + if (html == null) { + if (other.html != null) + return false; + } else if (!html.equals(other.html)) + return false; + if (substitutionTag == null) { + if (other.substitutionTag != null) + return false; + } else if (!substitutionTag.equals(other.substitutionTag)) + return false; + if (text == null) { + if (other.text != null) + return false; + } else if (!text.equals(other.text)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java index 4da565d5..06ff62df 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java @@ -46,4 +46,47 @@ public GoogleAnalyticsSetting getGoogleAnalyticsSetting() { public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSetting) { this.googleAnalyticsSetting = googleAnalyticsSetting; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((clickTrackingSetting == null) ? 0 : clickTrackingSetting.hashCode()); + result = prime * result + ((googleAnalyticsSetting == null) ? 0 : googleAnalyticsSetting.hashCode()); + result = prime * result + ((openTrackingSetting == null) ? 0 : openTrackingSetting.hashCode()); + result = prime * result + ((subscriptionTrackingSetting == null) ? 0 : subscriptionTrackingSetting.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TrackingSettings other = (TrackingSettings) obj; + if (clickTrackingSetting == null) { + if (other.clickTrackingSetting != null) + return false; + } else if (!clickTrackingSetting.equals(other.clickTrackingSetting)) + return false; + if (googleAnalyticsSetting == null) { + if (other.googleAnalyticsSetting != null) + return false; + } else if (!googleAnalyticsSetting.equals(other.googleAnalyticsSetting)) + return false; + if (openTrackingSetting == null) { + if (other.openTrackingSetting != null) + return false; + } else if (!openTrackingSetting.equals(other.openTrackingSetting)) + return false; + if (subscriptionTrackingSetting == null) { + if (other.subscriptionTrackingSetting != null) + return false; + } else if (!subscriptionTrackingSetting.equals(other.subscriptionTrackingSetting)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index e4eedd58..a8b49fe3 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -208,4 +208,18 @@ public void fromShouldReturnCorrectFrom() { Assert.assertSame(from, mail.getFrom()); } + + @Test + public void mailDeserialization() throws IOException { + Email to = new Email("foo@bar.com"); + Content content = new Content("text/plain", "test"); + Email from = new Email("no-reply@bar.com"); + Mail mail = new Mail(from, "subject", to, content); + + ObjectMapper mapper = new ObjectMapper(); + String json = mapper.writeValueAsString(mail); + Mail deserialized = mapper.readValue(json, Mail.class); + + Assert.assertEquals(deserialized, mail); + } } From 4d0394e4cb7c73f3e9b225e35634a24743baff30 Mon Sep 17 00:00:00 2001 From: Peter Pan Date: Mon, 2 Oct 2017 17:11:17 +0200 Subject: [PATCH 102/439] CONTIBUTING.md broken link fixed. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e627ccc1..c310931b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,7 +51,7 @@ Before you decide to create a new issue, please try the following: ### Please use our Bug Report Template -In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. +In order to make the process easier, we've included a [sample bug report template](https://github.com/P3trur0/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. ## Improvements to the Codebase From 473fb56b13191f6215a6f45b9f6be855bc5b43b1 Mon Sep 17 00:00:00 2001 From: Peter Pan Date: Mon, 2 Oct 2017 17:14:34 +0200 Subject: [PATCH 103/439] contributing.md broken link fixed --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c310931b..990b2fdf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,7 +51,7 @@ Before you decide to create a new issue, please try the following: ### Please use our Bug Report Template -In order to make the process easier, we've included a [sample bug report template](https://github.com/P3trur0/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. +In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. ## Improvements to the Codebase From 2c0183d7770a841ce417897d5a8241b85af4a7a2 Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Tue, 3 Oct 2017 09:28:28 +0200 Subject: [PATCH 104/439] Changes serialization type for settings to serialize values only if they are non-empty instead of defaults. --- .../helpers/mail/objects/BccSettings.java | 2 +- .../mail/objects/ClickTrackingSetting.java | 2 +- .../helpers/mail/objects/FooterSetting.java | 2 +- .../mail/objects/GoogleAnalyticsSetting.java | 2 +- .../mail/objects/OpenTrackingSetting.java | 2 +- .../mail/objects/SpamCheckSetting.java | 2 +- .../objects/SubscriptionTrackingSetting.java | 2 +- .../objects/SettingsSerializationTest.java | 86 +++++++++++++++++++ 8 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index 176387fa..79f6cc5c 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class BccSettings { @JsonProperty("enable") private boolean enable; @JsonProperty("email") private String email; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index 839c8fbf..5c014d3f 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class ClickTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("enable_text") private boolean enableText; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index 8e542c7f..c179a606 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class FooterSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("text") private String text; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index ce30edbc..45485234 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class GoogleAnalyticsSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("utm_source") private String campaignSource; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index aeb7ede1..ac87f74d 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class OpenTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("substitution_tag") private String substitutionTag; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index 85d1dc10..a0ae0269 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class SpamCheckSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("threshold") private int spamThreshold; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index ad1121c2..839609bc 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class SubscriptionTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("text") private String text; diff --git a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java new file mode 100644 index 00000000..48fbfcc6 --- /dev/null +++ b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java @@ -0,0 +1,86 @@ +package com.sendgrid.helpers.mail.objects; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.BccSettings; +import com.sendgrid.ClickTrackingSetting; +import com.sendgrid.FooterSetting; +import com.sendgrid.GoogleAnalyticsSetting; +import com.sendgrid.OpenTrackingSetting; +import com.sendgrid.SpamCheckSetting; +import com.sendgrid.SubscriptionTrackingSetting; +import org.junit.Assert; +import org.junit.Test; + +public class SettingsSerializationTest { + + private ObjectMapper mapper = new ObjectMapper(); + + @Test + public void testOpenTrackingSettingSerialization() throws Exception { + OpenTrackingSetting setting = new OpenTrackingSetting(); + setting.setEnable(false); + + String jsonOne = mapper.writeValueAsString(setting); + Assert.assertEquals(jsonOne, "{\"enable\":false}"); + } + + @Test + public void testClickTrackingSettingSerialization() throws Exception { + ClickTrackingSetting setting = new ClickTrackingSetting(); + setting.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(setting); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false,\"enable_text\":false}"); + } + + @Test + public void testSubscriptionTrackingSettingSerialization() throws Exception { + SubscriptionTrackingSetting setting = new SubscriptionTrackingSetting(); + setting.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(setting); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + } + + @Test + public void testGoogleAnalyticsTrackingSettingSerialization() throws Exception { + GoogleAnalyticsSetting setting = new GoogleAnalyticsSetting(); + setting.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(setting); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + } + + @Test + public void testSpamCheckSettingSerialization() throws Exception { + SpamCheckSetting setting = new SpamCheckSetting(); + setting.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(setting); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false,\"threshold\":0}"); + } + + @Test + public void testFooterSettingSerialization() throws Exception { + FooterSetting setting = new FooterSetting(); + setting.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(setting); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + } + + @Test + public void testBccSettingsSerialization() throws Exception { + BccSettings settings = new BccSettings(); + settings.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(settings); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + } +} From 2199f1225806f29aae4c09fec8bd4cf32fe68964 Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Tue, 3 Oct 2017 21:11:07 +0200 Subject: [PATCH 105/439] Adds prism installation script to travis. --- .travis.yml | 5 +++++ test/prism.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 test/prism.sh diff --git a/.travis.yml b/.travis.yml index 48807070..a07cec04 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,11 @@ matrix: jdk: oraclejdk7 - os: linux jdk: oraclejdk8 +before_script: +- mkdir -p prism/bin +- export PATH=$PATH:$PWD/prism/bin/ +- ./test/prism.sh + after_script: - "./gradlew build" - "./scripts/upload.sh" diff --git a/test/prism.sh b/test/prism.sh new file mode 100644 index 00000000..5d9d3002 --- /dev/null +++ b/test/prism.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +install () { + +set -eu + +UNAME=$(uname) +ARCH=$(uname -m) +if [ "$UNAME" != "Linux" ] && [ "$UNAME" != "Darwin" ] && [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i686" ]; then + echo "Sorry, OS/Architecture not supported: ${UNAME}/${ARCH}. Download binary from https://github.com/stoplightio/prism/releases" + exit 1 +fi + +if [ "$UNAME" = "Darwin" ] ; then + OSX_ARCH=$(uname -m) + if [ "${OSX_ARCH}" = "x86_64" ] ; then + PLATFORM="darwin_amd64" + fi +elif [ "$UNAME" = "Linux" ] ; then + LINUX_ARCH=$(uname -m) + if [ "${LINUX_ARCH}" = "i686" ] ; then + PLATFORM="linux_386" + elif [ "${LINUX_ARCH}" = "x86_64" ] ; then + PLATFORM="linux_amd64" + fi +fi + +#LATEST=$(curl -s https://api.github.com/repos/stoplightio/prism/tags | grep -Eo '"name":.*?[^\\]",' | head -n 1 | sed 's/[," ]//g' | cut -d ':' -f 2) +LATEST="v0.1.5" +URL="https://github.com/stoplightio/prism/releases/download/$LATEST/prism_$PLATFORM" +DEST=./prism/bin/prism + +if [ -z $LATEST ] ; then + echo "Error requesting. Download binary from ${URL}" + exit 1 +else + curl -L $URL -o $DEST + chmod +x $DEST +fi +} + +install \ No newline at end of file From 008b04a280d1bc0c2a9ebde1f6eb5cd5d7339344 Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Wed, 4 Oct 2017 07:36:20 +0200 Subject: [PATCH 106/439] Creates gradle task to download and start prism locally. --- build.gradle | 5 ++++ scripts/startPrism.sh | 58 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100755 scripts/startPrism.sh diff --git a/build.gradle b/build.gradle index 881a496e..1a7feba9 100644 --- a/build.gradle +++ b/build.gradle @@ -94,6 +94,11 @@ task renameSendGridVersionJarToSendGridJar { } } +task startPrism(type: Exec) { + workingDir 'scripts' + commandLine './startPrism.sh' +} + task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from 'build/docs/javadoc' diff --git a/scripts/startPrism.sh b/scripts/startPrism.sh new file mode 100755 index 00000000..7438aa5d --- /dev/null +++ b/scripts/startPrism.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +set -eu + +install () { + +echo "Installing Prism..." + +UNAME=$(uname) +ARCH=$(uname -m) +if [ "$UNAME" != "Linux" ] && [ "$UNAME" != "Darwin" ] && [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i686" ]; then + echo "Sorry, OS/Architecture not supported: ${UNAME}/${ARCH}. Download binary from https://github.com/stoplightio/prism/releases" + exit 1 +fi + +if [ "$UNAME" = "Darwin" ] ; then + OSX_ARCH=$(uname -m) + if [ "${OSX_ARCH}" = "x86_64" ] ; then + PLATFORM="darwin_amd64" + fi +elif [ "$UNAME" = "Linux" ] ; then + LINUX_ARCH=$(uname -m) + if [ "${LINUX_ARCH}" = "i686" ] ; then + PLATFORM="linux_386" + elif [ "${LINUX_ARCH}" = "x86_64" ] ; then + PLATFORM="linux_amd64" + fi +fi + +mkdir -p ../prism/bin +#LATEST=$(curl -s https://api.github.com/repos/stoplightio/prism/tags | grep -Eo '"name":.*?[^\\]",' | head -n 1 | sed 's/[," ]//g' | cut -d ':' -f 2) +LATEST="v0.6.21" +URL="https://github.com/stoplightio/prism/releases/download/$LATEST/prism_$PLATFORM" +DEST=../prism/bin/prism + +if [ -z $LATEST ] ; then + echo "Error requesting. Download binary from ${URL}" + exit 1 +else + curl -L $URL -o $DEST + chmod +x $DEST +fi +} + +run () { + echo "Running prism..." + cd ../prism/bin + prism run --mock --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json +} + +if [ -f ../prism/bin/prism ]; then + echo "Prism is already installed." + run +else + echo "Prism is not installed." + install + run +fi \ No newline at end of file From a6036a1131c1826aa1966c4cc395ba43126cb4b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=ADcero=20Pablo?= Date: Fri, 6 Oct 2017 18:19:32 -0300 Subject: [PATCH 107/439] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1847b034..99fceeb3 100644 --- a/README.md +++ b/README.md @@ -221,5 +221,4 @@ sendgrid-java is guided and supported by the SendGrid [Developer Experience Team sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. -![SendGrid Logo] -(https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) From ad6a5294e6181b39a2dc0a41de503fabf99da93a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=ADcero=20Pablo?= Date: Fri, 6 Oct 2017 18:22:49 -0300 Subject: [PATCH 108/439] Update TROUBLESHOOTING.md --- TROUBLESHOOTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 35b2b348..7a4aace1 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -54,7 +54,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies ## Versions -We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guarenteed to be a breaking change. Changes are documented in the [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. +We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guaranteed to be a breaking change. Changes are documented in the [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. ## Environment Variables and Your SendGrid API Key @@ -96,4 +96,4 @@ repositories { Since Android SDK 23, HttpClient is no longer supported. Some workarounds can be found [here](http://stackoverflow.com/questions/32153318/httpclient-wont-import-in-android-studio). -We have an issue to remove that dependency [here](https://github.com/sendgrid/java-http-client/issues/2), please upvote to move it up the queue. \ No newline at end of file +We have an issue to remove that dependency [here](https://github.com/sendgrid/java-http-client/issues/2), please upvote to move it up the queue. From 9ed5220f68b39ed4047a862afff6392a993fe8c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=ADcero=20Pablo?= Date: Fri, 6 Oct 2017 18:41:42 -0300 Subject: [PATCH 109/439] Update USAGE.md --- USAGE.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/USAGE.md b/USAGE.md index 308ca259..96b63ed8 100644 --- a/USAGE.md +++ b/USAGE.md @@ -246,7 +246,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. ``` ## Retrieve all alerts -**This endpoint allows you to retieve all of your alerts.** +**This endpoint allows you to retrieve all of your alerts.** Alerts allow you to specify an email address to receive notifications regarding your email usage or statistics. * Usage alerts allow you to set the threshold at which an alert will be sent. @@ -358,7 +358,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. ## Create API keys -**This enpoint allows you to create a new random API Key for the user.** +**This endpoint allows you to create a new random API Key for the user.** A JSON request body containing a "name" property is required. If number of maximum keys is reached, HTTP 403 will be returned. @@ -2339,7 +2339,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ``` ## Retrieve all IP pools. -**This endpoint allows you to retreive all of your IP pools.** +**This endpoint allows you to retrieve all of your IP pools.** IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. @@ -3321,7 +3321,7 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo **This endpoint returns a list of all scopes that this user has access to.** -API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html), or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). API Keys may be assigned certain permissions, or scopes, that limit which API endpoints they are able to access. For a more detailed explanation of how you can use API Key permissios, please visit our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/api_keys.html#-API-Key-Permissions) or [Classroom](https://sendgrid.com/docs/Classroom/Basics/API/api_key_permissions.html). +API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html), or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). API Keys may be assigned certain permissions, or scopes, that limit which API endpoints they are able to access. For a more detailed explanation of how you can use API Key permissions, please visit our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/api_keys.html#-API-Key-Permissions) or [Classroom](https://sendgrid.com/docs/Classroom/Basics/API/api_key_permissions.html). ### GET /scopes @@ -3443,7 +3443,7 @@ Sender Identities are required to be verified before use. If your domain has bee ``` ## Delete a Sender Identity -**This endoint allows you to delete one of your sender identities.** +**This endpoint allows you to delete one of your sender identities.** Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. @@ -3466,7 +3466,7 @@ Sender Identities are required to be verified before use. If your domain has bee ``` ## Resend Sender Identity Verification -**This enpdoint allows you to resend a sender identity verification email.** +**This endpoint allows you to resend a sender identity verification email.** Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. @@ -3869,7 +3869,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by ``` ## Retrieve the monthly email statistics for a single subuser -**This endpoint allows you to retrive the monthly email statistics for a specific subuser.** +**This endpoint allows you to retrieve the monthly email statistics for a specific subuser.** While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. @@ -4526,7 +4526,7 @@ Transactional templates are templates created specifically for transactional ema **This endpoint allows you to create a new version of a template.** -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). @@ -4553,7 +4553,7 @@ For more information about transactional templates, please see our [User Guide]( **This endpoint allows you to edit a version of one of your transactional templates.** -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). @@ -4585,7 +4585,7 @@ For more information about transactional templates, please see our [User Guide]( **This endpoint allows you to retrieve a specific version of a template.** -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). @@ -4616,7 +4616,7 @@ For more information about transactional templates, please see our [User Guide]( **This endpoint allows you to delete one of your transactional template versions.** -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). @@ -5962,7 +5962,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ``` ## Retrieve all IP whitelabels -**This endpoint allows you to retrieve all of the IP whitelabels that have been createdy by this account.** +**This endpoint allows you to retrieve all of the IP whitelabels that have been created by this account.** You may include a search key by using the "ip" parameter. This enables you to perform a prefix search for a given IP segment (e.g. "192."). @@ -6157,7 +6157,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to retrieve the associated link whitelabel for a subuser.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's linke whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. @@ -6187,7 +6187,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to disassociate a link whitelabel from a subuser.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's linke whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. @@ -6318,7 +6318,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to associate a link whitelabel with a subuser account.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's linke whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. From 3a1733f666e5b153b98e999d4bda4671011dfd40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=ADcero=20Pablo?= Date: Fri, 6 Oct 2017 21:53:03 -0300 Subject: [PATCH 110/439] Update USAGE.md --- USAGE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/USAGE.md b/USAGE.md index 96b63ed8..00e66e96 100644 --- a/USAGE.md +++ b/USAGE.md @@ -6157,7 +6157,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to retrieve the associated link whitelabel for a subuser.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. @@ -6187,7 +6187,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to disassociate a link whitelabel from a subuser.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. @@ -6318,7 +6318,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to associate a link whitelabel with a subuser account.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. From c0eb49d6a972d8709323ac606673f125376d0d93 Mon Sep 17 00:00:00 2001 From: DaLun Date: Mon, 9 Oct 2017 13:15:34 -0500 Subject: [PATCH 111/439] Update USAGE.md with one period --- USAGE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/USAGE.md b/USAGE.md index 308ca259..1db7997b 100644 --- a/USAGE.md +++ b/USAGE.md @@ -495,7 +495,7 @@ If the API Key ID does not exist an HTTP 404 will be returned. ``` ## Delete API keys -**This endpoint allows you to revoke an existing API Key** +**This endpoint allows you to revoke an existing API Key.** Authentications using this API Key will fail after this request is made, with some small propogation delay.If the API Key ID does not exist an HTTP 404 will be returned. From 7469b4289cb057b6a7483efb2209afb15fbf9815 Mon Sep 17 00:00:00 2001 From: DaLun Date: Mon, 9 Oct 2017 13:20:28 -0500 Subject: [PATCH 112/439] fix the disappear logo --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1847b034..99fceeb3 100644 --- a/README.md +++ b/README.md @@ -221,5 +221,4 @@ sendgrid-java is guided and supported by the SendGrid [Developer Experience Team sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. -![SendGrid Logo] -(https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) From fd05b9430d222caa7110208c6bae8fb50a6dce57 Mon Sep 17 00:00:00 2001 From: Andy Trimble Date: Mon, 9 Oct 2017 18:05:14 -0600 Subject: [PATCH 113/439] Adding Docker support. --- docker/Dockerfile | 24 ++++++++++++++++++++++++ docker/README.md | 37 +++++++++++++++++++++++++++++++++++++ docker/USAGE.md | 35 +++++++++++++++++++++++++++++++++++ docker/entrypoint.sh | 31 +++++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 docker/Dockerfile create mode 100644 docker/README.md create mode 100644 docker/USAGE.md create mode 100644 docker/entrypoint.sh diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..943b2b50 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,24 @@ +FROM store/oracle/serverjre:8 + +ENV OAI_SPEC_URL="https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json" + +RUN yum install -y git + +WORKDIR /root + +# install Prism +ADD https://raw.githubusercontent.com/stoplightio/prism/master/install.sh install.sh +RUN chmod +x ./install.sh && \ + ./install.sh && \ + rm ./install.sh + +# set up default sendgrid env +WORKDIR /root/sources +RUN git clone https://github.com/sendgrid/sendgrid-java.git +WORKDIR /root +RUN ln -s /root/sources/sendgrid-java/sendgrid + +COPY entrypoint.sh entrypoint.sh +RUN chmod +x entrypoint.sh +ENTRYPOINT ["./entrypoint.sh"] +CMD ["--mock"] diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 00000000..7758a41a --- /dev/null +++ b/docker/README.md @@ -0,0 +1,37 @@ +# Supported tags and respective `Dockerfile` links + - `v1.0.0`, `latest` [(Dockerfile)](https://github.com/sendgrid/sendgrid-java/blob/master/docker/Dockerfile) + +# Quick reference +Due to Oracle's JDK license, you must build this Docker image using the official Oracle image located in the Docker Store. You will need a Docker store account. Once you have an account, you must accept the Oracle license [here](https://store.docker.com/images/oracle-serverjre-8). On the command line, type `docker login` and provide your credentials. You may then build the image using this command `docker build -t sendgrid/sendgrid-java -f Dockerfile .` + + - **Where to get help:** + [Contact SendGrid Support](https://support.sendgrid.com/hc/en-us) + + - **Where to file issues:** + https://github.com/sendgrid/sendgrid-java/issues + + - **Where to get more info:** + [USAGE.md](https://github.com/sendgrid/sendgrid-java/blob/master/docker/USAGE.md) + + - **Maintained by:** + [SendGrid Inc.](https://sendgrid.com) + +# Usage examples + - Most recent version: `docker run -it sendgrid/sendgrid-java`. + - Your own fork: + ```sh-session + $ git clone https://github.com/you/cool-sendgrid-java.git + $ realpath cool-sendgrid-java + /path/to/cool-sendgrid-java + $ docker run -it -v /path/to/cool-sendgrid-java:/mnt/sendgrid-java sendgrid/sendgrid-java + ``` + +For more detailed information, see [USAGE.md](https://github.com/sendgrid/sendgrid-java/blob/master/docker/USAGE.md). + +# About + +sendgrid-java is guided and supported by the SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). + +sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. + +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) diff --git a/docker/USAGE.md b/docker/USAGE.md new file mode 100644 index 00000000..125b90fe --- /dev/null +++ b/docker/USAGE.md @@ -0,0 +1,35 @@ +You can use Docker to easily try out or test sendgrid-java. + + +# Quickstart + +1. Install Docker on your machine. +2. If you have not done so, create a Docker Store account [here](https://store.docker.com/signup?next=%2F) +3. Navigate [here](https://store.docker.com/images/oracle-serverjre-8) and click the "Proceed to Checkout" link (don't worry, it's free). +4. On the command line, execute `docker login` and provide your credentials. +5. Build the Docker image using the command `docker build -t sendgrid/sendgrid-java -f Dockerfile .` +6. Run `docker run -it sendgrid/sendgrid-java`. + + +# Info + +This Docker image contains + - `sendgrid-java` + - Stoplight's Prism, which lets you try out the API without actually sending email + +Run it in interactive mode with `-it`. + +You can mount repositories in the `/mnt/sendgrid-java` and `/mnt/java-http-client` directories to use them instead of the default SendGrid libraries. Read on for more info. + + +# Testing +Testing is easy! Run the container, `cd sendgrid`, and run `./gradlew test`. + + +# About + +sendgrid-java is guided and supported by the SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). + +sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. + +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 00000000..556d85bd --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,31 @@ +#! /bin/bash +clear + +# check for + link mounted libraries: +if [ -d /mnt/sendgrid-java ] +then + rm /root/sendgrid + ln -s /mnt/sendgrid-java/sendgrid + echo "Linked mounted sendgrid-java's code to /root/sendgrid" +fi + +SENDGRID_JAVA_VERSION="1.0.0" +echo "Welcome to sendgrid-java docker v${SENDGRID_JAVA_VERSION}." +echo + +if [ "$1" != "--no-mock" ] +then + echo "Starting Prism in mock mode. Calls made to Prism will not actually send emails." + echo "Disable this by running this container with --no-mock." + prism run --mock --spec $OAI_SPEC_URL 2> /dev/null & +else + echo "Starting Prism in live (--no-mock) mode. Calls made to Prism will send emails." + prism run --spec $OAI_SPEC_URL 2> /dev/null & +fi +echo "To use Prism, make API calls to localhost:4010. For example," +echo " sg = sendgrid.SendGridAPIClient(" +echo " host='http://localhost:4010/'," +echo " api_key=os.environ.get('SENDGRID_API_KEY_CAMPAIGNS'))" +echo "To stop Prism, run \"kill $!\" from the shell." + +bash \ No newline at end of file From b785ae22c9124d840950defd59cd03f5d704e527 Mon Sep 17 00:00:00 2001 From: scaalabr Date: Mon, 9 Oct 2017 22:52:29 -0500 Subject: [PATCH 114/439] Addressing comments --- src/main/java/com/sendgrid/SendGrid.java | 3 +- src/main/java/com/sendgrid/SendGridApi.java | 40 +++++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 061316b8..96277d3e 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -7,7 +7,8 @@ /** * Class SendGrid allows for quick and easy access to the SendGrid API. */ -public class SendGrid implements SendGridApi{ +public class SendGrid implements SendGridAPI { + private static final String VERSION = "3.0.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; diff --git a/src/main/java/com/sendgrid/SendGridApi.java b/src/main/java/com/sendgrid/SendGridApi.java index d6273b36..bfbb230c 100644 --- a/src/main/java/com/sendgrid/SendGridApi.java +++ b/src/main/java/com/sendgrid/SendGridApi.java @@ -3,23 +3,59 @@ import java.io.IOException; import java.util.Map; -public interface SendGridApi { +public interface SendGridAPI { + /** + * Initializes SendGrid + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + */ public void initializeSendGrid(String apiKey); + /** + * Initializes SendGrid + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + */ public String getLibraryVersion(); + /** + * Gets the version. + */ public String getVersion(); + /** + * Sets the version. + * @param version the SendGrid version. + */ public void setVersion(String version); + + /** + * Gets the request headers. + */ public Map getRequestHeaders(); + /** + * Adds a request headers. + * @param key the key + * @param value the value + */ public Map addRequestHeader(String key, String value); + /** + * Removes a request headers. + * @param key the key + */ public Map removeRequestHeader(String key); + + /** + * Gets the host. + */ public String getHost(); - + + /** + * Sets the host. + * @param host the host to set + */ public void setHost(String host); /** From dc35aba01fb616c771c215fd9b4980ed1f5b8be3 Mon Sep 17 00:00:00 2001 From: sccalabr Date: Mon, 9 Oct 2017 22:56:32 -0500 Subject: [PATCH 115/439] Rename SendGridApi.java to SendGridAPI.java --- src/main/java/com/sendgrid/{SendGridApi.java => SendGridAPI.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/java/com/sendgrid/{SendGridApi.java => SendGridAPI.java} (100%) diff --git a/src/main/java/com/sendgrid/SendGridApi.java b/src/main/java/com/sendgrid/SendGridAPI.java similarity index 100% rename from src/main/java/com/sendgrid/SendGridApi.java rename to src/main/java/com/sendgrid/SendGridAPI.java From c983fe4764de3da8d7c2c85d16b9c9bb2d0584e4 Mon Sep 17 00:00:00 2001 From: Andy Trimble Date: Tue, 10 Oct 2017 01:27:46 -0600 Subject: [PATCH 116/439] Added javadocs. --- src/main/java/com/sendgrid/SendGrid.java | 85 ++++++- .../java/com/sendgrid/helpers/mail/Mail.java | 237 +++++++++++++++++- .../sendgrid/helpers/mail/objects/ASM.java | 33 ++- .../helpers/mail/objects/Attachments.java | 101 ++++++++ .../helpers/mail/objects/BccSettings.java | 23 +- .../mail/objects/ClickTrackingSetting.java | 24 +- .../helpers/mail/objects/Content.java | 35 ++- .../sendgrid/helpers/mail/objects/Email.java | 35 ++- .../helpers/mail/objects/FooterSetting.java | 30 ++- .../mail/objects/GoogleAnalyticsSetting.java | 56 ++++- .../helpers/mail/objects/MailSettings.java | 55 +++- .../mail/objects/OpenTrackingSetting.java | 27 +- .../helpers/mail/objects/Personalization.java | 121 ++++++++- .../helpers/mail/objects/Setting.java | 13 +- .../mail/objects/SpamCheckSetting.java | 33 ++- .../objects/SubscriptionTrackingSetting.java | 50 +++- .../mail/objects/TrackingSettings.java | 47 +++- 17 files changed, 967 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 421b11a9..6bf14295 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -5,44 +5,66 @@ import java.util.Map; /** - * Class SendGrid allows for quick and easy access to the SendGrid API. - */ + * Class SendGrid allows for quick and easy access to the SendGrid API. + */ public class SendGrid { + /** The current library version. */ private static final String VERSION = "3.0.0"; + + /** The user agent string to return to SendGrid. */ private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; + /** The user's API key. */ private String apiKey; + + /** The SendGrid host to which to connect. */ private String host; + + /** The API version. */ private String version; + + /** The HTTP client. */ private Client client; + + /** The request headers container. */ private Map requestHeaders; /** - * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - */ + * Construct a new SendGrid API wrapper. + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + * @return a SendGrid object. + */ public SendGrid(String apiKey) { this.client = new Client(); initializeSendGrid(apiKey); } /** - * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - * @param test is true if you are unit testing - */ + * Construct a new SendGrid API wrapper. + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + * @param test is true if you are unit testing + * @return a SendGrid object. + */ public SendGrid(String apiKey, Boolean test) { this.client = new Client(test); initializeSendGrid(apiKey); } /** + * Construct a new SendGrid API wrapper. * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param client the Client to use (allows to customize its configuration) + * @return a SendGrid object. */ public SendGrid(String apiKey, Client client) { this.client = client; initializeSendGrid(apiKey); } + /** + * Initialize the client. + * @param apiKey the user's API key. + */ public void initializeSendGrid(String apiKey) { this.apiKey = apiKey; this.host = "api.sendgrid.com"; @@ -53,50 +75,91 @@ public void initializeSendGrid(String apiKey) { this.requestHeaders.put("Accept", "application/json"); } + /** + * Retrieve the current library version. + * @return the current version. + */ public String getLibraryVersion() { return this.VERSION; } + /** + * Get the API version. + * @return the current API versioin (v3 by default). + */ public String getVersion() { return this.version; } + /** + * Set the API version. + * @param version the new version. + */ public void setVersion(String version) { this.version = version; } + /** + * Obtain the request headers. + * @return the request headers. + */ public Map getRequestHeaders() { return this.requestHeaders; } + /** + * Add a new request header. + * @param key the header key. + * @param value the header value. + * @return the new set of request headers. + */ public Map addRequestHeader(String key, String value) { this.requestHeaders.put(key, value); return getRequestHeaders(); } + /** + * Remove a request header. + * @param key the header key to remove. + * @return the new set of request headers. + */ public Map removeRequestHeader(String key) { this.requestHeaders.remove(key); return getRequestHeaders(); } + /** + * Get the SendGrid host (api.sendgrid.com by default). + * @return the SendGrid host. + */ public String getHost() { return this.host; } + /** + * Set the SendGrid host. + * @host the new SendGrid host. + */ public void setHost(String host) { this.host = host; } /** - * Class makeCall makes the call to the SendGrid API, override this method for testing. - */ + * Class makeCall makes the call to the SendGrid API, override this method for testing. + * @param request the request to make. + * @return the response object. + * @throws IOException in case of a network error. + */ public Response makeCall(Request request) throws IOException { return client.api(request); } /** - * Class api sets up the request to the SendGrid API, this is main interface. - */ + * Class api sets up the request to the SendGrid API, this is main interface. + * @param request the request object. + * @return the response object. + * @throws IOException in case of a network error. + */ public Response api(Request request) throws IOException { Request req = new Request(); req.setMethod(request.getMethod()); diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index beba5a53..edf02a15 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -19,26 +19,92 @@ import java.util.Map; /** - * Class Mail builds an object that sends an email through SendGrid. - */ + * Class Mail builds an object that sends an email through SendGrid. + * Note that this object is not thread safe. + */ @JsonInclude(Include.NON_DEFAULT) public class Mail { + + /** The email's from field. */ @JsonProperty("from") public Email from; + + /** The email's subject line. This is the global, or + * “message level”, subject of your email. This may + * be overridden by personalizations[x].subject. + */ @JsonProperty("subject") public String subject; + + /** + * The email's personalization. Each object within + * personalizations can be thought of as an envelope + * - it defines who should receive an individual message + * and how that message should be handled. + */ @JsonProperty("personalizations") public List personalization; + + /** The email's content. */ @JsonProperty("content") public List content; + + /** The email's attachments. */ @JsonProperty("attachments") public List attachments; + + /** The email's template ID. */ @JsonProperty("template_id") public String templateId; + + /** + * The email's sections. An object of key/value pairs that + * define block sections of code to be used as substitutions. + */ @JsonProperty("sections") public Map sections; + + /** The email's headers. */ @JsonProperty("headers") public Map headers; + + /** The email's categories. */ @JsonProperty("categories") public List categories; + + /** + * The email's custom arguments. Values that are specific to + * the entire send that will be carried along with the email + * and its activity data. Substitutions will not be made on + * custom arguments, so any string that is entered into this + * parameter will be assumed to be the custom argument that + * you would like to be used. This parameter is overridden by + * personalizations[x].custom_args if that parameter has been + * defined. Total custom args size may not exceed 10,000 bytes. + */ @JsonProperty("custom_args") public Map customArgs; + + /** + * A unix timestamp allowing you to specify when you want + * your email to be delivered. This may be overridden by + * the personalizations[x].send_at parameter. Scheduling + * more than 72 hours in advance is forbidden. + */ @JsonProperty("send_at") public long sendAt; + + /** + * This ID represents a batch of emails to be sent at the + * same time. Including a batch_id in your request allows + * you include this email in that batch, and also enables + * you to cancel or pause the delivery of that batch. For + * more information, see https://sendgrid.com/docs/API_Reference/Web_API_v3/cancel_schedule_send. + */ @JsonProperty("batch_id") public String batchId; + + /** The email's unsubscribe handling object. */ @JsonProperty("asm") public ASM asm; + + /** The email's IP pool name. */ @JsonProperty("ip_pool_name") public String ipPoolId; + + /** The email's mail settings. */ @JsonProperty("mail_settings") public MailSettings mailSettings; + + /** The email's tracking settings. */ @JsonProperty("tracking_settings") public TrackingSettings trackingSettings; + + /** The email's reply to address. */ @JsonProperty("reply_to") public Email replyTo; private static final ObjectMapper SORTED_MAPPER = new ObjectMapper(); @@ -46,10 +112,18 @@ public class Mail { SORTED_MAPPER.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); } + /** Construct a new Mail object. */ public Mail() { return; } + /** + * Construct a new Mail object. + * @param from the email's from address. + * @param subject the email's subject line. + * @param to the email's recipient. + * @param content the email's content. + */ public Mail(Email from, String subject, Email to, Content content) { this.setFrom(from); @@ -60,38 +134,71 @@ public Mail(Email from, String subject, Email to, Content content) this.addContent(content); } + /** + * Get the email's from address. + * @return the email's from address. + */ @JsonProperty("from") public Email getFrom() { return this.from; } + /** + * Set the email's from address. + * @param from the email's from address. + */ public void setFrom(Email from) { this.from = from; } + /** + * Get the email's subject line. + * @return the email's subject line. + */ @JsonProperty("subject") public String getSubject() { return subject; } + /** + * Set the email's subject line. + * @param subject the email's subject line. + */ public void setSubject(String subject) { this.subject = subject; } + /** + * Get the email's unsubscribe handling object (ASM). + * @return the email's ASM. + */ @JsonProperty("asm") public ASM getASM() { return asm; } + /** + * Set the email's unsubscribe handling object (ASM). + * @param asm the email's ASM. + */ public void setASM(ASM asm) { this.asm = asm; } + /** + * Get the email's personalizations. Content added to the returned + * list will be included when sent. + * @return the email's personalizations. + */ @JsonProperty("personalizations") public List getPersonalization() { return personalization; } + /** + * Add a personalizaton to the email. + * @param personalization a personalization. + */ public void addPersonalization(Personalization personalization) { if (this.personalization == null) { this.personalization = new ArrayList(); @@ -101,11 +208,20 @@ public void addPersonalization(Personalization personalization) { } } + /** + * Get the email's content. Content added to the returned list + * will be included when sent. + * @return the email's content. + */ @JsonProperty("content") public List getContent() { return content; } + /** + * Add content to this email. + * @param content content to add to this email. + */ public void addContent(Content content) { Content newContent = new Content(); newContent.setType(content.getType()); @@ -118,11 +234,20 @@ public void addContent(Content content) { } } + /** + * Get the email's attachments. Attachments added to the returned + * list will be included when sent. + * @return the email's attachments. + */ @JsonProperty("attachments") public List getAttachments() { return attachments; } + /** + * Add attachments to the email. + * @param attachments attachments to add. + */ public void addAttachments(Attachments attachments) { Attachments newAttachment = new Attachments(); newAttachment.setContent(attachments.getContent()); @@ -138,20 +263,38 @@ public void addAttachments(Attachments attachments) { } } + /** + * Get the email's template ID. + * @return the email's template ID. + */ @JsonProperty("template_id") public String getTemplateId() { return this.templateId; } + /** + * Set the email's template ID. + * @param templateId the email's template ID. + */ public void setTemplateId(String templateId) { this.templateId = templateId; } + /** + * Get the email's sections. Sections added to the returned list + * will be included when sent. + * @return the email's sections. + */ @JsonProperty("sections") public Map getSections() { return sections; } + /** + * Add a section to the email. + * @param key the section's key. + * @param value the section's value. + */ public void addSection(String key, String value) { if (sections == null) { sections = new HashMap(); @@ -161,12 +304,21 @@ public void addSection(String key, String value) { } } + /** + * Get the email's headers. Headers added to the returned list + * will be included when sent. + * @return the email's headers. + */ @JsonProperty("headers") public Map getHeaders() { return headers; } - + /** + * Add a header to the email. + * @param key the header's key. + * @param value the header's value. + */ public void addHeader(String key, String value) { if (headers == null) { headers = new HashMap(); @@ -176,11 +328,20 @@ public void addHeader(String key, String value) { } } + /** + * Get the email's categories. Categories added to the returned list + * will be included when sent. + * @return the email's categories. + */ @JsonProperty("categories") public List getCategories() { return categories; } + /** + * Add a category to the email. + * @param category the category. + */ public void addCategory(String category) { if (categories == null) { categories = new ArrayList(); @@ -190,11 +351,21 @@ public void addCategory(String category) { } } + /** + * Get the email's custom arguments. Custom arguments added to the returned list + * will be included when sent. + * @return the email's custom arguments. + */ @JsonProperty("custom_args") public Map getCustomArgs() { return customArgs; } + /** + * Add a custom argument to the email. + * @param key argument's key. + * @param value the argument's value. + */ public void addCustomArg(String key, String value) { if (customArgs == null) { customArgs = new HashMap(); @@ -204,63 +375,113 @@ public void addCustomArg(String key, String value) { } } + /** + * Get the email's send at time (Unix timestamp). + * @return the email's send at time. + */ @JsonProperty("send_at") public long sendAt() { return sendAt; } + /** + * Set the email's send at time (Unix timestamp). + * @param sendAt the send at time. + */ public void setSendAt(long sendAt) { this.sendAt = sendAt; } + /** + * Get the email's batch ID. + * @return the batch ID. + */ @JsonProperty("batch_id") public String getBatchId() { return batchId; } + /** + * Set the email's batch ID. + * @param batchId the batch ID. + */ public void setBatchId(String batchId) { this.batchId = batchId; } + /** + * Get the email's IP pool ID. + * @return the IP pool ID. + */ @JsonProperty("ip_pool_name") public String getIpPoolId() { return ipPoolId; } + /** + * Set the email's IP pool ID. + * @param ipPoolId the IP pool ID. + */ public void setIpPoolId(String ipPoolId) { this.ipPoolId = ipPoolId; } + /** + * Get the email's settings. + * @return the settings. + */ @JsonProperty("mail_settings") public MailSettings getMailSettings() { return mailSettings; } + /** + * Set the email's settings. + * @param mailSettings the settings. + */ public void setMailSettings(MailSettings mailSettings) { this.mailSettings = mailSettings; } + /** + * Get the email's tracking settings. + * @return the tracking settings. + */ @JsonProperty("tracking_settings") public TrackingSettings getTrackingSettings() { return trackingSettings; } + /** + * Set the email's tracking settings. + * @param trackingSettings the tracking settings. + */ public void setTrackingSettings(TrackingSettings trackingSettings) { this.trackingSettings = trackingSettings; } + /** + * Get the email's reply to address. + * @return the reply to address. + */ @JsonProperty("reply_to") public Email getReplyto() { return replyTo; } + /** + * Set the email's reply to address. + * @param replyTo the reply to address. + */ public void setReplyTo(Email replyTo) { this.replyTo = replyTo; } /** - * Create a string represenation of the Mail object JSON. - */ + * Create a string represenation of the Mail object JSON. + * @return a JSON string. + * @throws IOException in case of a JSON marshal error. + */ public String build() throws IOException { try { //ObjectMapper mapper = new ObjectMapper(); @@ -271,8 +492,10 @@ public String build() throws IOException { } /** - * Create a string represenation of the Mail object JSON and pretty print it. - */ + * Create a string represenation of the Mail object JSON and pretty print it. + * @return a pretty JSON string. + * @throws IOException in case of a JSON marshal error. + */ public String buildPretty() throws IOException { try { ObjectMapper mapper = new ObjectMapper(); diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java index 1a65a65d..00763af7 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java @@ -6,26 +6,49 @@ import java.util.Arrays; +/** + * An object allowing you to specify how to handle unsubscribes. + */ @JsonInclude(Include.NON_DEFAULT) public class ASM { + + /** The group ID. */ @JsonProperty("group_id") private int groupId; + + /** The groups to display property. */ @JsonProperty("groups_to_display") private int[] groupsToDisplay; - + + /** + * Get the group ID. + * @return the group ID. + */ @JsonProperty("group_id") public int getGroupId() { return groupId; } - + + /** + * Set the group ID. + * @param groupId the group ID. + */ public void setGroupId(int groupId) { this.groupId = groupId; } - + + /** + * Get the groups to display. + * @return the groups to display. + */ @JsonProperty("groups_to_display") public int[] getGroupsToDisplay() { return groupsToDisplay; } - + + /** + * Set the groups to display. + * @param groupsToDisplay the groups to display. + */ public void setGroupsToDisplay(int[] groupsToDisplay) { this.groupsToDisplay = Arrays.copyOf(groupsToDisplay, groupsToDisplay.length); } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 9323b837..059fc835 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -8,59 +8,133 @@ import java.io.*; +/** + * An attachment object. + */ @JsonInclude(Include.NON_DEFAULT) public class Attachments { + + /** The attachment content. */ @JsonProperty("content") private String content; + + /** + * The mime type of the content you are attaching. For example, + * “text/plain” or “text/html”. + */ @JsonProperty("type") private String type; + + /** The attachment file name. */ @JsonProperty("filename") private String filename; + + /** The attachment disposition. */ @JsonProperty("disposition") private String disposition; + + /** + * The attachment content ID. This is used when the + * disposition is set to “inline” and the attachment + * is an image, allowing the file to be displayed within + * the body of your email. + */ @JsonProperty("content_id") private String contentId; + /** + * Get the attachment's content. + * @return the content. + */ @JsonProperty("content") public String getContent() { return content; } + /** + * Set the attachment's content. + * @param content the content. + */ public void setContent(String content) { this.content = content; } + /** + * Get the mime type of the content you are attaching. For example, + * “text/plain” or “text/html”. + * @return the mime type. + */ @JsonProperty("type") public String getType() { return type; } + /** + * Set the mime type of the content. + * @param type the mime type. + */ public void setType(String type) { this.type = type; } + /** + * Get the filename for this attachment. + * @return the file name. + */ @JsonProperty("filename") public String getFilename() { return filename; } + /** + * Set the filename for this attachment. + * @param filename the filename. + */ public void setFilename(String filename) { this.filename = filename; } + /** + * Get the content-disposition of the attachment specifying + * how you would like the attachment to be displayed. + * For example, “inline” results in the attached file + * being displayed automatically within the message + * while “attachment” results in the attached file + * requiring some action to be taken before it is + * displayed (e.g. opening or downloading the file). + * @return the disposition. + */ @JsonProperty("disposition") public String getDisposition() { return disposition; } + /** + * Set the content-disposition of the attachment. + * @param disposition the disposition. + */ public void setDisposition(String disposition) { this.disposition = disposition; } + /** + * Get the attachment content ID. This is used when the + * disposition is set to “inline” and the attachment + * is an image, allowing the file to be displayed within + * the body of your email. + * @return the content ID. + */ @JsonProperty("content_id") public String getContentId() { return contentId; } + /** + * Set the content ID. + * @param contentId the content ID. + */ public void setContentId(String contentId) { this.contentId = contentId; } + /** + * A helper object to construct usable attachments. + */ @JsonIgnoreType public static class Builder { @@ -72,6 +146,12 @@ public static class Builder { private String disposition; private String contentId; + /** + * Construct a new attachment builder. + * @param fileName the filename to include. + * @param content an input stream for the content. + * @throws IllegalArgumentException in case either the fileName or the content is null. + */ public Builder(String fileName, InputStream content) { if (fileName == null) { throw new IllegalArgumentException("File name mustn't be null"); @@ -85,6 +165,12 @@ public Builder(String fileName, InputStream content) { this.content = encodeToBase64(content); } + /** + * Construct a new attachment builder. + * @param fileName the filename to include. + * @param content an input string for the content. + * @throws IllegalArgumentException in case either the fileName or the content is null. + */ public Builder(String fileName, String content) { if (fileName == null) { throw new IllegalArgumentException("File name mustn't be null"); @@ -112,21 +198,36 @@ private String encodeToBase64(InputStream content) { } } + /** + * Set the type of this attachment builder. + * @param type the attachment type. + */ public Builder withType(String type) { this.type = type; return this; } + /** + * Set the disposition of this attachment builder. + * @param disposition the disposition. + */ public Builder withDisposition(String disposition) { this.disposition = disposition; return this; } + /** + * Set the content ID of this attachment builder. + * @param contentId the content ID. + */ public Builder withContentId(String contentId) { this.contentId = contentId; return this; } + /** + * Construct the attachments object. + */ public Attachments build() { Attachments attachments = new Attachments(); attachments.setContent(content); diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index 176387fa..37be0866 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -4,26 +4,47 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * This object allows you to have a blind carbon copy + * automatically sent to the specified email address + * for every email that is sent. + */ @JsonInclude(Include.NON_DEFAULT) public class BccSettings { @JsonProperty("enable") private boolean enable; @JsonProperty("email") private String email; + /** + * Determines if this setting is enabled. + * @return true if BCC is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set whether or not BCC is enabled. + * @param enable true if BCC is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the email address that you would like to receive the BCC. + * @return the address. + */ @JsonProperty("email") public String getEmail() { return this.email; } + /** + * Set the email address that you would like to receive the BCC. + * @param email the address. + */ public void setEmail(String email) { this.email = email; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index 839c8fbf..e901e086 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -4,26 +4,48 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * Settings to determine how you would like to track the + * metrics of how your recipients interact with your email. + */ @JsonInclude(Include.NON_DEFAULT) public class ClickTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("enable_text") private boolean enableText; + /** + * Determines if this setting is enabled. + * @return true if click tracking is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set if this setting is enabled. + * @param enable true if click tracking is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the enabled text. This indicates if this + * setting should be included in the text/plain + * portion of your email. + * @return the enable text. + */ @JsonProperty("enable_text") public boolean getEnableText() { return enableText; } + /** + * Set the enalbed text. + * @param enableText the enable text. + */ public void setEnableText(boolean enableText) { this.enableText = enableText; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index b00f9566..f6621ac9 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -4,35 +4,66 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An object in which you may specify the content of your email. + */ @JsonInclude(Include.NON_DEFAULT) public class Content { @JsonProperty("type") private String type; @JsonProperty("value") private String value; + /** + * Construct an empty content object. + */ public Content() { - return; + } + /** + * Construct a content object with the specified type and value. + * @param type the mime type. + * @param value the content. + */ public Content(String type, String value) { this.setType(type); this.setValue(value); } + /** + * Get the mime type of the content you are including + * in your email. For example, “text/plain” or “text/html”. + * @return the mime type. + */ @JsonProperty("type") public String getType() { return type; } + /** + * Set the mime type of the content you are including + * in your email. For example, “text/plain” or “text/html”. + * @param type the mime type. + */ public void setType(String type) { this.type = type; } + /** + * Get the actual content of the specified mime type + * that you are including in your email. + * @return the value. + */ @JsonProperty("value") public String getValue() { return value; } + /** + * Set the actual content of the specified mime type + * that you are including in your email. + * @param value the value. + */ public void setValue(String value) { this.value = value; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java index 43396a85..5642e345 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -4,39 +4,70 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An email address represented as an address name pair. + */ @JsonInclude(Include.NON_DEFAULT) public class Email { @JsonProperty("name") private String name; @JsonProperty("email") private String email; + /** + * Construct an empty email. + */ public Email() { - return; + } + /** + * Construct an email with the supplied email and an empty name. + * @param email an email address. + */ public Email(String email) { this.setEmail(email); } + /** + * Construct an email with the supplied address and name. + * @param email an email address. + * @param name a name. + */ public Email(String email, String name) { this.setEmail(email); this.setName(name); } + /** + * Get the name. + * @return the name. + */ @JsonProperty("name") public String getName() { return name; } + /** + * Set the name. + * @param name the name. + */ public void setName(String name) { this.name = name; } + /** + * Get the email address. + * @return the email address. + */ @JsonProperty("email") public String getEmail() { return email; } + /** + * Set the email address. + * @param email the email address. + */ public void setEmail(String email) { this.email = email; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index 8e542c7f..1428b66b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -4,36 +4,64 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An object representing the default footer + * that you would like included on every email. + */ @JsonInclude(Include.NON_DEFAULT) public class FooterSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("text") private String text; @JsonProperty("html") private String html; + /** + * Get whether or not the footer is enabled. + * @return true if the footer is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set whether or not the footer is enabled. + * @param enable true if the footer is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the plain text content of the footer. + * @return the footer plain text. + */ @JsonProperty("text") public String getText() { return text; } + /** + * Set the plain text content of the footer. + * @param text the footer plain text. + */ public void setText(String text) { this.text = text; } + /** + * Get the HTML content of the footer. + * @return the footer HTML. + */ @JsonProperty("html") public String getHtml() { return html; } + /** + * Set the HTML content of the footer. + * @param html the footer HTML. + */ public void setHtml(String html) { this.html = html; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index ce30edbc..eac91899 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -4,6 +4,9 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An object configuring the tracking provided by Google Analytics. + */ @JsonInclude(Include.NON_DEFAULT) public class GoogleAnalyticsSetting { @JsonProperty("enable") private boolean enable; @@ -13,57 +16,108 @@ public class GoogleAnalyticsSetting { @JsonProperty("utm_campaign") private String campaignName; @JsonProperty("utm_medium") private String campaignMedium; + /** + * Get whether or not this setting is enabled. + * @return true if enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set whether or not this setting is enabled. + * @param enable true if enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the name of the referrer source. + * (e.g. Google, SomeDomain.com, or Marketing Email) + * @return the referrer source. + */ @JsonProperty("utm_source") public String getCampaignSource() { return campaignSource; } + /** + * Set the name of the referrer source. + * @param campaignSource the referrer source. + */ public void setCampaignSource(String campaignSource) { this.campaignSource = campaignSource; } + /** + * Get the term used to identify any paid keywords. + * @return the term. + */ @JsonProperty("utm_term") public String getCampaignTerm() { return campaignTerm; } + /** + * Set the term used to identify any paid keywords. + * @param campaignTerm the term. + */ public void setCampaignTerm(String campaignTerm) { this.campaignTerm = campaignTerm; } + /** + * Get the content Used to differentiate your campaign + * from advertisements. + * @return the content. + */ @JsonProperty("utm_content") public String getCampaignContent() { return campaignContent; } + /** + * Set the content Used to differentiate your campaign + * from advertisements. + * @param campaignContent the content. + */ public void setCampaignContent(String campaignContent) { this.campaignContent = campaignContent; } + /** + * Get the name of the campaign. + * @return the name. + */ @JsonProperty("utm_campaign") public String getCampaignName() { return campaignName; } + /** + * Set the name of the campaign. + * @param campaignName the name. + */ public void setCampaignName(String campaignName) { this.campaignName = campaignName; } + /** + * Get the name of the marketing medium. (e.g. Email) + * @return the medium name. + */ @JsonProperty("utm_medium") public String getCampaignMedium() { return campaignMedium; } + /** + * Set the name of the marketing medium. (e.g. Email) + * @param campaignMedium the medium name. + */ public void setCampaignMedium(String campaignMedium) { this.campaignMedium = campaignMedium; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index 63580458..1210eb08 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -4,6 +4,11 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An object representing a collection of different mail + * settings that you can use to specify how you would + * like this email to be handled. + */ @JsonInclude(Include.NON_DEFAULT) public class MailSettings { @JsonProperty("bcc") private BccSettings bccSettings; @@ -12,48 +17,96 @@ public class MailSettings { @JsonProperty("sandbox_mode") private Setting sandBoxMode; @JsonProperty("spam_check") private SpamCheckSetting spamCheckSetting; + /** + * Get the BCC settings. + * @return the BCC settings. + */ @JsonProperty("bcc") public BccSettings getBccSettings() { return bccSettings; } + /** + * Set the BCC settings. + * @param bccSettings the BCC settings. + */ public void setBccSettings(BccSettings bccSettings) { this.bccSettings = bccSettings; } + /** + * A setting that allows you to bypass all unsubscribe + * groups and suppressions to ensure that the email is + * delivered to every single recipient. This should only + * be used in emergencies when it is absolutely necessary + * that every recipient receives your email. + * @return the bypass list setting. + */ @JsonProperty("bypass_list_management") public Setting getBypassListManagement() { return bypassListManagement; } + /** + * Set the bypass setting. + * @param bypassListManagement the setting. + */ public void setBypassListManagement(Setting bypassListManagement) { this.bypassListManagement = bypassListManagement; } + /** + * Get the the footer settings that you would like included on every email. + * @return the setting. + */ @JsonProperty("footer") public FooterSetting getFooterSetting() { return footerSetting; } + /** + * Set the the footer settings that you would like included on every email. + * @param footerSetting the setting. + */ public void setFooterSetting(FooterSetting footerSetting) { this.footerSetting = footerSetting; } + /** + * Get sandbox mode. This allows you to send a test email to + * ensure that your request body is valid and formatted correctly. + * @return the sandbox mode setting. + */ @JsonProperty("sandbox_mode") public Setting getSandBoxMode() { return sandBoxMode; } + /** + * Set sandbox mode. + * @param sandBoxMode the sandbox mode setting. + */ + @JsonProperty("sandbox_mode") public void setSandboxMode(Setting sandBoxMode) { this.sandBoxMode = sandBoxMode; } + /** + * Get the spam check setting. This allows you to test the + * content of your email for spam. + * @return the spam check setting. + */ @JsonProperty("spam_check") public SpamCheckSetting getSpamCheck() { return spamCheckSetting; } + /** + * Set the spam check setting. This allows you to test the + * content of your email for spam. + * @param spamCheckSetting the spam check setting. + */ public void setSpamCheckSetting(SpamCheckSetting spamCheckSetting) { this.spamCheckSetting = spamCheckSetting; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index aeb7ede1..deba6d33 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -4,26 +4,51 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An open tracking settings object. This allows you to track + * whether the email was opened or not, but including a single + * pixel image in the body of the content. When the pixel is + * loaded, we can log that the email was opened. + */ @JsonInclude(Include.NON_DEFAULT) public class OpenTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("substitution_tag") private String substitutionTag; + /** + * Determines if this setting is enabled. + * @return true if open tracking is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set if this setting is enabled. + * @param enable true if open tracking is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the substituion tag. This allows you to specify a + * substitution tag that you can insert in the body of + * your email at a location that you desire. This tag will + * be replaced by the open tracking pixel. + * @return the substitution tag. + */ @JsonProperty("substitution_tag") public String getSubstitutionTag() { return substitutionTag; } + /** + * Set the substitution tag. + * @param substitutionTag the substitution tag. + */ public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 734dc9c0..b72f2316 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -10,6 +10,12 @@ import java.util.List; import java.util.Map; +/** + * An object representing a message and its metadata. + * A personalization can be thought of as an envelope + * - it defines who should receive an individual message + * and how that message should be handled. + */ @JsonInclude(Include.NON_DEFAULT) public class Personalization { @JsonProperty("to") private List tos; @@ -21,6 +27,16 @@ public class Personalization { @JsonProperty("custom_args") private Map customArgs; @JsonProperty("send_at") private long sendAt; + /** + * Get the to list. This is an array of recipients. Each object + * within this array may contain the name, but must always + * contain the email, of a recipient. + *

    + * The maximum number of entries is 1000. + *

    + * Content added to the returned list will be included when sent. + * @return the to list. + */ @JsonProperty("to") public List getTos() { if(tos == null) @@ -28,6 +44,10 @@ public List getTos() { return tos; } + /** + * Add a recipient. + * @param email an email address. + */ public void addTo(Email email) { Email newEmail = new Email(); newEmail.setName(email.getName()); @@ -40,6 +60,16 @@ public void addTo(Email email) { } } + /** + * Set the CC list. This is an array of recipients. Each object + * within this array may contain the name, but must always + * contain the email, of a recipient. + *

    + * The maximum number of entries is 1000. + *

    + * Content added to the returned list will be included when sent. + * @return the CC list. + */ @JsonProperty("cc") public List getCcs() { if(ccs == null) @@ -47,6 +77,10 @@ public List getCcs() { return ccs; } + /** + * Add a recipient. + * @param email an email address. + */ public void addCc(Email email) { Email newEmail = new Email(); newEmail.setName(email.getName()); @@ -59,6 +93,16 @@ public void addCc(Email email) { } } + /** + * Set the BCC list. This is an array of recipients. Each object + * within this array may contain the name, but must always + * contain the email, of a recipient. + *

    + * The maximum number of entries is 1000. + *

    + * Content added to the returned list will be included when sent. + * @return the BCC list. + */ @JsonProperty("bcc") public List getBccs() { if(bccs == null) @@ -66,6 +110,10 @@ public List getBccs() { return bccs; } + /** + * Add a recipient. + * @param email an email address. + */ public void addBcc(Email email) { Email newEmail = new Email(); newEmail.setName(email.getName()); @@ -78,15 +126,34 @@ public void addBcc(Email email) { } } + /** + * Get the subject of the email. + * @return the subject. + */ @JsonProperty("subject") public String getSubject() { return subject; } + /** + * Set the subject of the email. + * @param subject the subject. + */ public void setSubject(String subject) { this.subject = subject; } + /** + * Get the headers. The headers are a collection of JSON + * key/value pairs allowing you to specify specific handling + * instructions for your email. You may not overwrite the + * following headers: x-sg-id, x-sg-eid, received, + * dkim-signature, Content-Type, Content-Transfer-Encoding, + * To, From, Subject, Reply-To, CC, BCC + *

    + * Content added to the returned list will be included when sent. + * @return the headers. + */ @JsonProperty("headers") public Map getHeaders() { if(headers == null) @@ -94,6 +161,11 @@ public Map getHeaders() { return headers; } + /** + * Add a header. + * @param key the header key. + * @param value the header value. + */ public void addHeader(String key, String value) { if (headers == null) { headers = new HashMap(); @@ -103,6 +175,21 @@ public void addHeader(String key, String value) { } } + /** + * Get the substitusions. Substitutions are a collection of + * key/value pairs following the pattern + * "substitution_tag":"value to substitute". All are assumed + * to be strings. These substitutions will apply to the text + * and html content of the body of your email, in addition + * to the subject and reply-to parameters. The total + * collective size of your substitutions may not exceed + * 10,000 bytes per personalization object. + *

    + * The maximum number of entries is 1000. + *

    + * Content added to the returned list will be included when sent. + * @return the substitutions. + */ @JsonProperty("substitutions") public Map getSubstitutions() { if(substitutions == null) @@ -110,6 +197,11 @@ public Map getSubstitutions() { return substitutions; } + /** + * Add a substitusion. + * @param key the key. + * @param value the value. + */ public void addSubstitution(String key, String value) { if (substitutions == null) { substitutions = new HashMap(); @@ -119,6 +211,18 @@ public void addSubstitution(String key, String value) { } } + /** + * Get the custom arguments. Values that are specific to + * this personalization that will be carried along with + * the email and its activity data. Substitutions will + * not be made on custom arguments, so any string that + * is entered into this parameter will be assumed to be + * the custom argument that you would like to be used. i + * May not exceed 10,000 bytes. + *

    + * Content added to the returned list will be included when sent. + * @return the custom arguments. + */ @JsonProperty("custom_args") public Map getCustomArgs() { if(customArgs == null) @@ -126,6 +230,11 @@ public Map getCustomArgs() { return customArgs; } + /** + * Add a custom argument. + * @param key the key. + * @param value the value. + */ public void addCustomArg(String key, String value) { if (customArgs == null) { customArgs = new HashMap(); @@ -135,13 +244,23 @@ public void addCustomArg(String key, String value) { } } + /** + * Get the send at time. This is a unix timestamp + * allowing you to specify when you want your + * email to be delivered. Scheduling more than + * 72 hours in advance is forbidden. + * @return the send at time. + */ @JsonProperty("send_at") public long sendAt() { return sendAt; } + /** + * Set the send at time. + * @param sendAt the send at time (Unix timestamp). + */ public void setSendAt(long sendAt) { this.sendAt = sendAt; } - } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 5818a145..20b8d64e 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -4,16 +4,27 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * A generic setting object. + */ @JsonInclude(Include.NON_DEFAULT) public class Setting { @JsonProperty("enable") private boolean enable; + /** + * Get whether or not this setting is enabled. + * @return true if the setting is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set whether or not this setting is enabled. + * @param enable true if the setting is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index 85d1dc10..dbd43955 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -4,36 +4,67 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * A setting object that allows you to test the content of + * your email for spam. + */ @JsonInclude(Include.NON_DEFAULT) public class SpamCheckSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("threshold") private int spamThreshold; @JsonProperty("post_to_url") private String postToUrl; + /** + * Determines if this setting is enabled. + * @return true if spam checking is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set if this setting is enabled. + * @param enable true if spam checking is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the the threshold used to determine if your content + * qualifies as spam on a scale from 1 to 10, with 10 being + * most strict, or most likely to be considered as spam. + * @return the threshold. + */ @JsonProperty("threshold") public int getSpamThreshold() { return spamThreshold; } + /** + * Set the spam check threshold. + * @param spamThreshold the threshold. + */ public void setSpamThreshold(int spamThreshold) { this.spamThreshold = spamThreshold; } + /** + * Get the Inbound Parse URL that you would like a copy of + * your email along with the spam report to be sent to. + * @return a URL. + */ @JsonProperty("post_to_url") public String getPostToUrl() { return postToUrl; } + /** + * Set the Inbout Parse URL. + * @param postToUrl a URL. + */ public void setPostToUrl(String postToUrl) { this.postToUrl = postToUrl; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index ad1121c2..2ca6616b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -4,6 +4,13 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * A subscription tracking setting object. Subscription tracking + * allows you to insert a subscription management link at the + * bottom of the text and html bodies of your email. If you + * would like to specify the location of the link within your + * email, you may use the substitution_tag. + */ @JsonInclude(Include.NON_DEFAULT) public class SubscriptionTrackingSetting { @JsonProperty("enable") private boolean enable; @@ -11,39 +18,80 @@ public class SubscriptionTrackingSetting { @JsonProperty("html") private String html; @JsonProperty("substitution_tag") private String substitutionTag; + /** + * Determines if this setting is enabled. + * @return true if subscription tracking is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set if this setting is enabled. + * @param enable true if subscription tracking is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the plain text to be appended to the email, with the + * subscription tracking link. You may control where + * the link is by using the tag <% %> + * @return the plain text. + */ @JsonProperty("text") public String getText() { return text; } + /** + * Set the plain text. + * @param text the plain text. + */ public void setText(String text) { this.text = text; } + /** + * Get the HTML to be appended to the email, with the + * subscription tracking link. You may control where + * the link is by using the tag <% %> + * @return the HTML. + */ @JsonProperty("html") public String getHtml() { return html; } + /** + * Set the HTML. + * @param html the HTML. + */ public void setHtml(String html) { this.html = html; } + /** + * Get the tag that will be replaced with the + * unsubscribe URL. for example: [unsubscribe_url]. + * If this parameter is used, it will override both + * the text and html parameters. The URL of the link + * will be placed at the substitution tag’s location, + * with no additional formatting. + * @return the substitution tag. + */ @JsonProperty("substitution_tag") public String getSubstitutionTag() { return substitutionTag; } + /** + * Set the substitution tag. + * @param substitutionTag the substitution tag. + */ public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java index 4da565d5..0e2a47bb 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java @@ -4,6 +4,11 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An object representing the settings to determine how + * you would like to track the metrics of how your recipients + * interact with your email. + */ @JsonInclude(Include.NON_DEFAULT) public class TrackingSettings { @JsonProperty("click_tracking") private ClickTrackingSetting clickTrackingSetting; @@ -11,39 +16,79 @@ public class TrackingSettings { @JsonProperty("subscription_tracking") private SubscriptionTrackingSetting subscriptionTrackingSetting; @JsonProperty("ganalytics") private GoogleAnalyticsSetting googleAnalyticsSetting; + /** + * Get the click tracking setting. Click tracking allows you to + * track whether a recipient clicked a link in your email. + * @return the setting. + */ @JsonProperty("click_tracking") public ClickTrackingSetting getClickTrackingSetting() { return clickTrackingSetting; } + /** + * Set the click tracking setting. + * @param clickTrackingSetting the setting. + */ public void setClickTrackingSetting(ClickTrackingSetting clickTrackingSetting) { this.clickTrackingSetting = clickTrackingSetting; } + /** + * Get the open tracking setting. The open tracking allows you to + * track whether the email was opened or not, but including a single + * pixel image in the body of the content. When the pixel is loaded, we can log that the email was opened. + * @return the setting. + */ @JsonProperty("open_tracking") public OpenTrackingSetting getOpenTrackingSetting() { return openTrackingSetting; } + /** + * Set the open tracking setting. + * @param openTrackingSetting the setting. + */ public void setOpenTrackingSetting(OpenTrackingSetting openTrackingSetting) { this.openTrackingSetting = openTrackingSetting; } + /** + * Get the subscription tracking setting. The subscription + * tracking setting allows you to insert a subscription + * management link at the bottom of the text and html bodies + * of your email. If you would like to specify the location + * of the link within your email, you may use the substitution_tag. + * @return the setting. + */ @JsonProperty("subscription_tracking") public SubscriptionTrackingSetting getSubscriptionTrackingSetting() { return subscriptionTrackingSetting; } + /** + * Set the subscription tracking setting. + * @param subscriptionTrackingSetting the setting. + */ public void setSubscriptionTrackingSetting(SubscriptionTrackingSetting subscriptionTrackingSetting) { this.subscriptionTrackingSetting = subscriptionTrackingSetting; } + /** + * Get the Google Analytics setting. This setting allows you to + * enable tracking provided by Google Analytics. + * @return the setting. + */ @JsonProperty("ganalytics") public GoogleAnalyticsSetting getGoogleAnalyticsSetting() { return googleAnalyticsSetting; } + /** + * Set the Google Analytics setting. + * @param googleAnalyticsSetting the setting. + */ public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSetting) { this.googleAnalyticsSetting = googleAnalyticsSetting; } -} \ No newline at end of file +} From 083f524811265af0a08d6ed0039a2cba60285ba9 Mon Sep 17 00:00:00 2001 From: dmitraver Date: Tue, 10 Oct 2017 15:44:11 +0200 Subject: [PATCH 117/439] Adds new lines to the end of the files. --- scripts/startPrism.sh | 2 +- test/prism.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/startPrism.sh b/scripts/startPrism.sh index 7438aa5d..13c35548 100755 --- a/scripts/startPrism.sh +++ b/scripts/startPrism.sh @@ -55,4 +55,4 @@ else echo "Prism is not installed." install run -fi \ No newline at end of file +fi diff --git a/test/prism.sh b/test/prism.sh index 5d9d3002..d6e0f251 100644 --- a/test/prism.sh +++ b/test/prism.sh @@ -39,4 +39,4 @@ else fi } -install \ No newline at end of file +install From a21f3da020ef4ff8eaa01c4ccc9952cf7006b3a1 Mon Sep 17 00:00:00 2001 From: dmitraver Date: Tue, 10 Oct 2017 17:22:32 +0200 Subject: [PATCH 118/439] Makes prism script executable. --- test/prism.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 test/prism.sh diff --git a/test/prism.sh b/test/prism.sh old mode 100644 new mode 100755 From 0000925234db32bff25ba723f06338746fe32531 Mon Sep 17 00:00:00 2001 From: Andy Trimble Date: Tue, 10 Oct 2017 13:57:47 -0600 Subject: [PATCH 119/439] Initial implementation. --- src/main/java/com/sendgrid/APICallback.java | 19 +++ .../java/com/sendgrid/RateLimitException.java | 36 +++++ src/main/java/com/sendgrid/SendGrid.java | 126 +++++++++++++++++- src/test/java/com/sendgrid/SendGridTest.java | 92 +++++++++++++ 4 files changed, 266 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/sendgrid/APICallback.java create mode 100644 src/main/java/com/sendgrid/RateLimitException.java diff --git a/src/main/java/com/sendgrid/APICallback.java b/src/main/java/com/sendgrid/APICallback.java new file mode 100644 index 00000000..fde54f9d --- /dev/null +++ b/src/main/java/com/sendgrid/APICallback.java @@ -0,0 +1,19 @@ +package com.sendgrid; + +/** + * An interface describing a callback mechanism for the + * asynchronous, rate limit aware API connection. + */ +public interface APICallback { + /** + * Callback method in case of an error. + * @param ex the error that was thrown. + */ + public void error(Exception ex); + + /** + * Callback method in case of a valid response. + * @param response the valid response. + */ + public void response(Response response); +} diff --git a/src/main/java/com/sendgrid/RateLimitException.java b/src/main/java/com/sendgrid/RateLimitException.java new file mode 100644 index 00000000..4912ac92 --- /dev/null +++ b/src/main/java/com/sendgrid/RateLimitException.java @@ -0,0 +1,36 @@ +package com.sendgrid; + +/** + * An exception thrown when the maximum number of retries + * have occurred, and the API calls are still rate limited. + */ +public class RateLimitException extends Exception { + private final Request request; + private final int retryCount; + + /** + * Construct a new exception. + * @param request the originating request object. + * @param retryCount the number of times a retry was attempted. + */ + public RateLimitException(Request request, int retryCount) { + this.request = request; + this.retryCount = retryCount; + } + + /** + * Get the originating request object. + * @return the request object. + */ + public Request getRequest() { + return this.request; + } + + /** + * Get the number of times the action was attemted. + * @return the retry count. + */ + public int getRetryCount() { + return this.retryCount; + } +} diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 6bf14295..1d49d4f4 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -3,6 +3,8 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; /** * Class SendGrid allows for quick and easy access to the SendGrid API. @@ -13,6 +15,10 @@ public class SendGrid { /** The user agent string to return to SendGrid. */ private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; + private static final int RATE_LIMIT_RESPONSE_CODE = 429; + private static final int THREAD_POOL_SIZE = 8; + + private ExecutorService pool; /** The user's API key. */ private String apiKey; @@ -27,7 +33,13 @@ public class SendGrid { private Client client; /** The request headers container. */ - private Map requestHeaders; + private Map requestHeaders; + + /** The number of times to try after a rate limit. */ + private int rateLimitRetry; + + /** The number of milliseconds to sleep between retries. */ + private int rateLimitSleep; /** * Construct a new SendGrid API wrapper. @@ -73,6 +85,10 @@ public void initializeSendGrid(String apiKey) { this.requestHeaders.put("Authorization", "Bearer " + apiKey); this.requestHeaders.put("User-agent", USER_AGENT); this.requestHeaders.put("Accept", "application/json"); + this.rateLimitRetry = 5; + this.rateLimitSleep = 1100; + + this.pool = Executors.newFixedThreadPool(THREAD_POOL_SIZE); } /** @@ -103,7 +119,7 @@ public void setVersion(String version) { * Obtain the request headers. * @return the request headers. */ - public Map getRequestHeaders() { + public Map getRequestHeaders() { return this.requestHeaders; } @@ -113,7 +129,7 @@ public Map getRequestHeaders() { * @param value the header value. * @return the new set of request headers. */ - public Map addRequestHeader(String key, String value) { + public Map addRequestHeader(String key, String value) { this.requestHeaders.put(key, value); return getRequestHeaders(); } @@ -123,7 +139,7 @@ public Map addRequestHeader(String key, String value) { * @param key the header key to remove. * @return the new set of request headers. */ - public Map removeRequestHeader(String key) { + public Map removeRequestHeader(String key) { this.requestHeaders.remove(key); return getRequestHeaders(); } @@ -145,7 +161,43 @@ public void setHost(String host) { } /** - * Class makeCall makes the call to the SendGrid API, override this method for testing. + * Get the maximum number of retries on a rate limit response. + * The default is 5. + * @return the number of retries on a rate limit. + */ + public int getRateLimitRetry() { + return this.rateLimitRetry; + } + + /** + * Set the maximum number of retries on a rate limit response. + * @param rateLimitRetry the maximum retry count. + */ + public void setRateLimitRetry(int rateLimitRetry) { + this.rateLimitRetry = rateLimitRetry; + } + + /** + * Get the duration of time (in milliseconds) to sleep between + * consecutive rate limit retries. The SendGrid API enforces + * the rate limit to the second. The default value is 1.1 seconds. + * @return the sleep duration. + */ + public int getRateLimitSleep() { + return this.rateLimitSleep; + } + + /** + * Set the duration of time (in milliseconds) to sleep between + * consecutive rate limit retries. + * @param rateLimitSleep the sleep duration. + */ + public void setRateLimitSleep(int rateLimitSleep) { + this.rateLimitSleep = rateLimitSleep; + } + + /** + * Makes the call to the SendGrid API, override this method for testing. * @param request the request to make. * @return the response object. * @throws IOException in case of a network error. @@ -166,13 +218,73 @@ public Response api(Request request) throws IOException { req.setBaseUri(this.host); req.setEndpoint("/" + version + "/" + request.getEndpoint()); req.setBody(request.getBody()); - for (Map.Entry header : this.requestHeaders.entrySet()) { + for (Map.Entry header : this.requestHeaders.entrySet()) { req.addHeader(header.getKey(), header.getValue()); } - for (Map.Entry queryParam : request.getQueryParams().entrySet()) { + for (Map.Entry queryParam : request.getQueryParams().entrySet()) { req.addQueryParam(queryParam.getKey(), queryParam.getValue()); } return makeCall(req); } + + /** + * Attempt an API call. This method executes the API call asynchronously + * on an internal thread pool. If the call is rate limited, the thread + * will retry up to the maximum configured time. + * @param request the API request. + */ + public void attempt(Request request) { + this.attempt(request, new APICallback() { + @Override + public void error(Exception ex) { + } + + public void response(Response r) { + } + }); + } + + /** + * Attempt an API call. This method executes the API call asynchronously + * on an internal thread pool. If the call is rate limited, the thread + * will retry up to the maximum configured time. The supplied callback + * will be called in the event of an error, or a successful response. + * @param request the API request. + * @param callback the callback. + */ + public void attempt(Request request, APICallback callback) { + this.pool.execute(new Runnable() { + @Override + public void run() { + Response response; + + // Retry until the retry limit has been reached. + for (int i = 0; i < rateLimitRetry; ++i) { + try { + response = api(request); + } catch (IOException ex) { + // Stop retrying if there is a network error. + callback.error(ex); + return; + } + + // We have been rate limited. + if (response.getStatusCode() == RATE_LIMIT_RESPONSE_CODE) { + try { + Thread.sleep(rateLimitSleep); + } catch (InterruptedException ex) { + // Can safely ignore this exception and retry. + } + } else { + callback.response(response); + return; + } + } + + // Retries exhausted. Return error. + callback.error(new RateLimitException(request, rateLimitRetry)); + } + }); + } } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 5ec45eab..8f469bf0 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -74,6 +74,98 @@ public void testHost() { Assert.assertEquals(sg.getHost(), "api.new.com"); } + @Test + public void testRateLimitRetry() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setRateLimitRetry(100); + Assert.assertEquals(sg.getRateLimitRetry(), 100); + } + + @Test + public void testRateLimitSleep() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setRateLimitSleep(999); + Assert.assertEquals(sg.getRateLimitSleep(), 999); + } + + + @Test + public void test_async() { + Object sync = new Object(); + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + + request.setMethod(Method.GET); + request.setEndpoint("access_settings/activity"); + request.addQueryParam("limit", "1"); + sg.attempt(request, new APICallback() { + @Override + public void error(Exception e) { + Assert.fail(); + sync.notify(); + } + + @Override + public void response(Response response) { + Assert.assertEquals(200, response.getStatusCode()); + sync.notify(); + } + }); + + try { + sync.wait(2000); + } catch(InterruptedException ex) { + Assert.fail(ex.toString()); + } + } + + @Test + public void test_async_rate_limit() { + Object sync = new Object(); + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "429"); + + Request request = new Request(); + + request.setMethod(Method.GET); + request.setEndpoint("access_settings/activity"); + request.addQueryParam("limit", "1"); + sg.attempt(request, new APICallback() { + @Override + public void error(Exception e) { + Assert.assertEquals(e.getClass(), RateLimitException.class); + sync.notify(); + } + + @Override + public void response(Response response) { + Assert.fail(); + sync.notify(); + } + }); + + try { + sync.wait(2000); + } catch(InterruptedException ex) { + Assert.fail(ex.toString()); + } + } @Test public void test_access_settings_activity_get() throws IOException { From 6e6d7b59499ecac98765e3288ebe5d646e4d9027 Mon Sep 17 00:00:00 2001 From: Andy Trimble Date: Tue, 10 Oct 2017 14:07:45 -0600 Subject: [PATCH 120/439] Fixed test race condition, and compile issue. --- src/main/java/com/sendgrid/SendGrid.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 1d49d4f4..37839f56 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -253,7 +253,7 @@ public void response(Response r) { * @param request the API request. * @param callback the callback. */ - public void attempt(Request request, APICallback callback) { + public void attempt(final Request request, final APICallback callback) { this.pool.execute(new Runnable() { @Override public void run() { diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 8f469bf0..2249b81f 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -91,7 +91,7 @@ public void testRateLimitSleep() { @Test public void test_async() { - Object sync = new Object(); + final Object sync = new Object(); SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); @@ -111,18 +111,24 @@ public void test_async() { @Override public void error(Exception e) { Assert.fail(); - sync.notify(); + synchronized(sync) { + sync.notify(); + } } @Override public void response(Response response) { Assert.assertEquals(200, response.getStatusCode()); - sync.notify(); + synchronized(sync) { + sync.notify(); + } } }); try { - sync.wait(2000); + synchronized(sync) { + sync.wait(2000); + } } catch(InterruptedException ex) { Assert.fail(ex.toString()); } @@ -130,7 +136,7 @@ public void response(Response response) { @Test public void test_async_rate_limit() { - Object sync = new Object(); + final Object sync = new Object(); SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); @@ -161,7 +167,9 @@ public void response(Response response) { }); try { - sync.wait(2000); + synchronized(sync) { + sync.wait(2000); + } } catch(InterruptedException ex) { Assert.fail(ex.toString()); } From 2afa5192a9b26c16c16618c2f8de0ba223c91fc2 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 10 Oct 2017 13:20:20 -0700 Subject: [PATCH 121/439] Version Bump v4.1.1: PR #247 Added Javadocs. --- CHANGELOG.md | 5 +++++ CONTRIBUTING.md | 2 +- README.md | 2 +- build.gradle | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/SendGrid.java | 5 +---- .../helpers/mail/objects/Personalization.java | 20 +++++++++---------- .../objects/SubscriptionTrackingSetting.java | 4 ++-- 8 files changed, 22 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fd10782..7a85d7e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.1.1] - 2017-10-10 +### Added +- PR #247 Added Javadocs. +- BIG thanks to [Andy Trimble](https://github.com/andy-trimble) + ## [4.1.0] - 2017-08-16 ### Added - PR #211 Return empty collections in place of nulls diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e627ccc1..afec7437 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.1.1/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 99fceeb3..02725369 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.1.0' + compile 'com.sendgrid:sendgrid-java:4.1.1' } repositories { diff --git a/build.gradle b/build.gradle index 881a496e..52c07eb5 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.1.0' +version = '4.1.1' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 07545420..249d79d4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.1.0 + 4.1.1 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 6bf14295..897728bc 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -32,7 +32,6 @@ public class SendGrid { /** * Construct a new SendGrid API wrapper. * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - * @return a SendGrid object. */ public SendGrid(String apiKey) { this.client = new Client(); @@ -43,7 +42,6 @@ public SendGrid(String apiKey) { * Construct a new SendGrid API wrapper. * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param test is true if you are unit testing - * @return a SendGrid object. */ public SendGrid(String apiKey, Boolean test) { this.client = new Client(test); @@ -54,7 +52,6 @@ public SendGrid(String apiKey, Boolean test) { * Construct a new SendGrid API wrapper. * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param client the Client to use (allows to customize its configuration) - * @return a SendGrid object. */ public SendGrid(String apiKey, Client client) { this.client = client; @@ -138,7 +135,7 @@ public String getHost() { /** * Set the SendGrid host. - * @host the new SendGrid host. + * @param host the new SendGrid host. */ public void setHost(String host) { this.host = host; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index b72f2316..83bd9c56 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -31,9 +31,9 @@ public class Personalization { * Get the to list. This is an array of recipients. Each object * within this array may contain the name, but must always * contain the email, of a recipient. - *

    + * * The maximum number of entries is 1000. - *

    + * * Content added to the returned list will be included when sent. * @return the to list. */ @@ -64,9 +64,9 @@ public void addTo(Email email) { * Set the CC list. This is an array of recipients. Each object * within this array may contain the name, but must always * contain the email, of a recipient. - *

    + * * The maximum number of entries is 1000. - *

    + * * Content added to the returned list will be included when sent. * @return the CC list. */ @@ -97,9 +97,9 @@ public void addCc(Email email) { * Set the BCC list. This is an array of recipients. Each object * within this array may contain the name, but must always * contain the email, of a recipient. - *

    + * * The maximum number of entries is 1000. - *

    + * * Content added to the returned list will be included when sent. * @return the BCC list. */ @@ -150,7 +150,7 @@ public void setSubject(String subject) { * following headers: x-sg-id, x-sg-eid, received, * dkim-signature, Content-Type, Content-Transfer-Encoding, * To, From, Subject, Reply-To, CC, BCC - *

    + * * Content added to the returned list will be included when sent. * @return the headers. */ @@ -184,9 +184,9 @@ public void addHeader(String key, String value) { * to the subject and reply-to parameters. The total * collective size of your substitutions may not exceed * 10,000 bytes per personalization object. - *

    + * * The maximum number of entries is 1000. - *

    + * * Content added to the returned list will be included when sent. * @return the substitutions. */ @@ -219,7 +219,7 @@ public void addSubstitution(String key, String value) { * is entered into this parameter will be assumed to be * the custom argument that you would like to be used. i * May not exceed 10,000 bytes. - *

    + * * Content added to the returned list will be included when sent. * @return the custom arguments. */ diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index 2ca6616b..304eb916 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -38,7 +38,7 @@ public void setEnable(boolean enable) { /** * Get the plain text to be appended to the email, with the * subscription tracking link. You may control where - * the link is by using the tag <% %> + * the link is by using the tag <% %> * @return the plain text. */ @JsonProperty("text") @@ -57,7 +57,7 @@ public void setText(String text) { /** * Get the HTML to be appended to the email, with the * subscription tracking link. You may control where - * the link is by using the tag <% %> + * the link is by using the tag <% %> * @return the HTML. */ @JsonProperty("html") From 725d0f9e175c77c8de6137937832f6e49030f3f6 Mon Sep 17 00:00:00 2001 From: JR Date: Tue, 10 Oct 2017 18:37:37 -0400 Subject: [PATCH 122/439] Added CODE_OF_CONDUCT.md Added CODE_OF_CONDUCT.md to root of this repo --- CODE_OF_CONDUCT.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..a6ad51a7 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,42 @@ + + # SendGrid Community Code of Conduct + + The SendGrid open source community is made up of members from around the globe with a diverse set of skills, personalities, and experiences. It is through these differences that our community experiences successes and continued growth. When you're working with members of the community, we encourage you to follow these guidelines, which help steer our interactions and strive to maintain a positive, successful and growing community. + + ### Be Open + Members of the community are open to collaboration, whether it's on pull requests, code reviews, approvals, issues or otherwise. We're receptive to constructive comments and criticism, as the experiences and skill sets of all members contribute to the whole of our efforts. We're accepting of all who wish to take part in our activities, fostering an environment where anyone can participate, and everyone can make a difference. + + ### Be Considerate + Members of the community are considerate of their peers, which include other contributors and users of SendGrid. We're thoughtful when addressing the efforts of others, keeping in mind that often the labor was completed with the intent of the good of the community. We're attentive in our communications, whether in person or online, and we're tactful when approaching differing views. + + ### Be Respectful + Members of the community are respectful. We're respectful of others, their positions, their skills, their commitments and their efforts. We're respectful of the volunteer efforts that permeate the SendGrid community. We're respectful of the processes outlined in the community, and we work within them. When we disagree, we are courteous in raising our issues. Overall, we're good to each other. We contribute to this community not because we have to, but because we want to. If we remember that, these guidelines will come naturally. + + ## Additional Guidance + + ### Disclose Potential Conflicts of Interest + Community discussions often involve interested parties. We expect participants to be aware when they are conflicted due to employment or other projects they are involved in and disclose those interests to other project members. When in doubt, over-disclose. Perceived conflicts of interest are important to address so that the community’s decisions are credible even when unpopular, difficult or favorable to the interests of one group over another. + + ### Interpretation + This Code is not exhaustive or complete. It is not a rulebook; it serves to distill our common understanding of a collaborative, shared environment and goals. We expect it to be followed in spirit as much as in the letter. When in doubt, try to abide by [SendGrid’s cultural values](https://sendgrid.com/blog/employee-engagement-the-4h-way) defined by our “4H’s”: Happy, Hungry, Humble and Honest. + + ### Enforcement + Most members of the SendGrid community always comply with this Code, not because of the existence of this Code, but because they have long experience participating in open source communities where the conduct described above is normal and expected. However, failure to observe this Code may be grounds for suspension, reporting the user for abuse or changing permissions for outside contributors. + + ## If you have concerns about someone’s conduct + **Initiate Direct Contact** - It is always appropriate to email a community member (if contact information is available), mention that you think their behavior was out of line, and (if necessary) point them to this Code. + + **Discuss Publicly** - Discussing publicly is always acceptable. Note, though, that approaching the person directly may be better, as it tends to make them less defensive, and it respects the time of other community members, so you probably want to try direct contact first. + + **Contact the Moderators** - You can reach the SendGrid moderators by emailing dx@sendgrid.com. + + ## Submission to SendGrid Repositories + Finally, just a reminder, changes to the SendGrid repositories will only be accepted upon completion of the [SendGrid Contributor Agreement](https://cla.sendgrid.com). + + ## Attribution + + SendGrid thanks the following, on which it draws for content and inspiration: + + * [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/) + * [Open Source Initiative General Code of Conduct](https://opensource.org/codeofconduct) + * [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html) From 10a0ea26446a5c225ddeb4172e2c3b449d552507 Mon Sep 17 00:00:00 2001 From: sccalabr Date: Tue, 10 Oct 2017 21:59:09 -0500 Subject: [PATCH 123/439] Adding @return @throws @param and formatting file. --- src/main/java/com/sendgrid/SendGridAPI.java | 128 ++++++++++++-------- 1 file changed, 75 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index bfbb230c..d190675c 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -5,66 +5,88 @@ public interface SendGridAPI { - /** - * Initializes SendGrid - * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - */ - public void initializeSendGrid(String apiKey); + /** + * Initializes SendGrid + * + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + */ + public void initializeSendGrid(String apiKey); - /** - * Initializes SendGrid - * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - */ - public String getLibraryVersion(); + /** + * Initializes SendGrid + * + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + * @return + */ + public String getLibraryVersion(); - /** - * Gets the version. - */ - public String getVersion(); + /** + * Gets the version. + * + * @return + */ + public String getVersion(); - /** - * Sets the version. - * @param version the SendGrid version. - */ - public void setVersion(String version); + /** + * Sets the version. + * + * @param version the SendGrid version. + */ + public void setVersion(String version); + /** + * Gets the request headers. + * @return + */ + public Map getRequestHeaders(); - /** - * Gets the request headers. - */ - public Map getRequestHeaders(); + /** + * Adds a request headers. + * + * @param keythe key + * @param valuethe value + * @return + */ + public Map addRequestHeader(String key, String value); - /** - * Adds a request headers. - * @param key the key - * @param value the value - */ - public Map addRequestHeader(String key, String value); + /** + * Removes a request headers. + * + * @param key the key + * @return + */ + public Map removeRequestHeader(String key); - /** - * Removes a request headers. - * @param key the key - */ - public Map removeRequestHeader(String key); - - /** - * Gets the host. - */ - public String getHost(); - - /** - * Sets the host. - * @param host the host to set - */ - public void setHost(String host); + /** + * Gets the host. + * + * @return + */ + public String getHost(); - /** - * Class makeCall makes the call to the SendGrid API, override this method for testing. - */ - public Response makeCall(Request request) throws IOException; + /** + * Sets the host. + * + * @param host the host to set + */ + public void setHost(String host); - /** - * Class api sets up the request to the SendGrid API, this is main interface. - */ - public Response api(Request request) throws IOException; + /** + * Class makeCall makes the call to the SendGrid API, override this method for + * testing. + * + * @param request + * @return + * @throws IOException + */ + public Response makeCall(Request request) throws IOException; + + /** + * Class api sets up the request to the SendGrid API, this is main interface. + * + * @param request + * @return + * @throws IOException + */ + public Response api(Request request) throws IOException; } From 665b0b4829f15965d1fee7bb09c6985ca921f13a Mon Sep 17 00:00:00 2001 From: dmitraver Date: Wed, 11 Oct 2017 17:15:03 +0200 Subject: [PATCH 124/439] Fixes prism startup script. Attempts to fix travis build. --- .travis.yml | 5 ++--- scripts/startPrism.sh | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index a07cec04..8ad70c07 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,9 +11,8 @@ matrix: - os: linux jdk: oraclejdk8 before_script: -- mkdir -p prism/bin -- export PATH=$PATH:$PWD/prism/bin/ -- ./test/prism.sh +- "./scripts/startPrism.sh &" +- sleep 10 after_script: - "./gradlew build" diff --git a/scripts/startPrism.sh b/scripts/startPrism.sh index 13c35548..53923593 100755 --- a/scripts/startPrism.sh +++ b/scripts/startPrism.sh @@ -45,7 +45,7 @@ fi run () { echo "Running prism..." cd ../prism/bin - prism run --mock --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json + ./prism run --mock --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json } if [ -f ../prism/bin/prism ]; then From 8895f22a083623141a856fdd3d0a7284e78599a1 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 11 Oct 2017 08:43:16 -0700 Subject: [PATCH 125/439] Update .travis.yml --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8ad70c07..6d5607bd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,11 @@ matrix: before_script: - "./scripts/startPrism.sh &" - sleep 10 - +before_install: +- cat /etc/hosts # optionally check the content *before* +- sudo hostname "$(hostname | cut -c1-63)" +- sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts | sudo tee /etc/hosts +- cat /etc/hosts # optionally check the content *after* after_script: - "./gradlew build" - "./scripts/upload.sh" From 02c6f4e50015a01f7125f7c1a493bd661707ce55 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 11 Oct 2017 08:46:23 -0700 Subject: [PATCH 126/439] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6d5607bd..dc8a908f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ matrix: - os: linux jdk: oraclejdk8 before_script: -- "./scripts/startPrism.sh &" +- "./scripts/startPrism.sh" - sleep 10 before_install: - cat /etc/hosts # optionally check the content *before* From 5a0da482e7fe8e75c1c0645b569c63e92b3fedec Mon Sep 17 00:00:00 2001 From: dmitraver Date: Thu, 12 Oct 2017 12:06:17 +0200 Subject: [PATCH 127/439] Fixes field naming in tests. --- .../objects/SettingsSerializationTest.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java index 48fbfcc6..74e6c8b5 100644 --- a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java +++ b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java @@ -20,8 +20,8 @@ public void testOpenTrackingSettingSerialization() throws Exception { OpenTrackingSetting setting = new OpenTrackingSetting(); setting.setEnable(false); - String jsonOne = mapper.writeValueAsString(setting); - Assert.assertEquals(jsonOne, "{\"enable\":false}"); + String json = mapper.writeValueAsString(setting); + Assert.assertEquals(json, "{\"enable\":false}"); } @Test @@ -29,9 +29,9 @@ public void testClickTrackingSettingSerialization() throws Exception { ClickTrackingSetting setting = new ClickTrackingSetting(); setting.setEnable(false); - String jsonTwo = mapper.writeValueAsString(setting); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false,\"enable_text\":false}"); + String json = mapper.writeValueAsString(setting); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false,\"enable_text\":false}"); } @Test @@ -39,9 +39,9 @@ public void testSubscriptionTrackingSettingSerialization() throws Exception { SubscriptionTrackingSetting setting = new SubscriptionTrackingSetting(); setting.setEnable(false); - String jsonTwo = mapper.writeValueAsString(setting); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + String json = mapper.writeValueAsString(setting); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false}"); } @Test @@ -49,9 +49,9 @@ public void testGoogleAnalyticsTrackingSettingSerialization() throws Exception { GoogleAnalyticsSetting setting = new GoogleAnalyticsSetting(); setting.setEnable(false); - String jsonTwo = mapper.writeValueAsString(setting); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + String json = mapper.writeValueAsString(setting); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false}"); } @Test @@ -59,9 +59,9 @@ public void testSpamCheckSettingSerialization() throws Exception { SpamCheckSetting setting = new SpamCheckSetting(); setting.setEnable(false); - String jsonTwo = mapper.writeValueAsString(setting); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false,\"threshold\":0}"); + String json = mapper.writeValueAsString(setting); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false,\"threshold\":0}"); } @Test @@ -69,9 +69,9 @@ public void testFooterSettingSerialization() throws Exception { FooterSetting setting = new FooterSetting(); setting.setEnable(false); - String jsonTwo = mapper.writeValueAsString(setting); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + String json = mapper.writeValueAsString(setting); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false}"); } @Test @@ -79,8 +79,8 @@ public void testBccSettingsSerialization() throws Exception { BccSettings settings = new BccSettings(); settings.setEnable(false); - String jsonTwo = mapper.writeValueAsString(settings); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + String json = mapper.writeValueAsString(settings); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false}"); } } From a43392fac958dd60acdcbc09189c16e3828389c2 Mon Sep 17 00:00:00 2001 From: dmitraver Date: Thu, 12 Oct 2017 16:54:51 +0200 Subject: [PATCH 128/439] Checks if the prism port is in use. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index dc8a908f..7f50f52b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,7 @@ before_install: - sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts | sudo tee /etc/hosts - cat /etc/hosts # optionally check the content *after* after_script: +- lsof -i :4010 -S # adds some debugging statements - "./gradlew build" - "./scripts/upload.sh" env: From 9b3f92cbc1116b9cd6b2a873fd098ee50004fc44 Mon Sep 17 00:00:00 2001 From: dmitraver Date: Thu, 12 Oct 2017 17:06:22 +0200 Subject: [PATCH 129/439] Reverts back to running prism in background. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7f50f52b..4fc4dbee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ matrix: - os: linux jdk: oraclejdk8 before_script: -- "./scripts/startPrism.sh" +- "./scripts/startPrism.sh &" - sleep 10 before_install: - cat /etc/hosts # optionally check the content *before* From 2464dd8747e6e7da35c9513a0b6c25ee2a57c7fb Mon Sep 17 00:00:00 2001 From: sccalabr Date: Thu, 12 Oct 2017 22:15:55 -0500 Subject: [PATCH 130/439] Adding new line at the end of the file. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 86ef37d8..7cc79a80 100644 --- a/pom.xml +++ b/pom.xml @@ -127,4 +127,4 @@ test - \ No newline at end of file + From e28455d4391aca01a053b72ff7c302fbad99b97e Mon Sep 17 00:00:00 2001 From: sccalabr Date: Thu, 12 Oct 2017 22:17:33 -0500 Subject: [PATCH 131/439] Adding new line at the end of the file. --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 7cc79a80..d250df9f 100644 --- a/pom.xml +++ b/pom.xml @@ -128,3 +128,4 @@ + From a061b8c747c9282dee845d16371d9e44e05f22fd Mon Sep 17 00:00:00 2001 From: dmitraver Date: Fri, 13 Oct 2017 17:45:37 +0200 Subject: [PATCH 132/439] Prints debug statement and exception. --- src/test/java/com/sendgrid/SendGridTest.java | 22 ++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 5ec45eab..7d056d92 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -4163,18 +4163,28 @@ public void test_whitelabel_domains_post() throws IOException { if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); + + System.out.println("===== Use ??? === "); } else { sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); + + System.out.println("===== Use localhost === "); } sg.addRequestHeader("X-Mock", "201"); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); - Response response = sg.api(request); - Assert.assertEquals(201, response.getStatusCode()); + try { + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); + Response response = sg.api(request); + Assert.assertEquals(201, response.getStatusCode()); + } catch (Exception e) { + System.out.println("Debugging prism setup."); + e.printStackTrace(); + } + } @Test From 6a626f35d6b9052164dfc9f1a362ca45176ed503 Mon Sep 17 00:00:00 2001 From: dmitraver Date: Fri, 13 Oct 2017 17:51:24 +0200 Subject: [PATCH 133/439] Rethrow exception in a test. --- src/test/java/com/sendgrid/SendGridTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 7d056d92..5ff38886 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -4183,6 +4183,7 @@ public void test_whitelabel_domains_post() throws IOException { } catch (Exception e) { System.out.println("Debugging prism setup."); e.printStackTrace(); + throw e; } } From 1ae3ed2011fbfc083a2e26aa2fbbfe3db9fa6b2d Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Sun, 15 Oct 2017 11:04:52 +0200 Subject: [PATCH 134/439] Reverts debugging statements. --- src/test/java/com/sendgrid/SendGridTest.java | 23 +++++--------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 5ff38886..5ec45eab 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -4163,29 +4163,18 @@ public void test_whitelabel_domains_post() throws IOException { if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); - - System.out.println("===== Use ??? === "); } else { sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); - - System.out.println("===== Use localhost === "); } sg.addRequestHeader("X-Mock", "201"); - try { - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); - Response response = sg.api(request); - Assert.assertEquals(201, response.getStatusCode()); - } catch (Exception e) { - System.out.println("Debugging prism setup."); - e.printStackTrace(); - throw e; - } - + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); + Response response = sg.api(request); + Assert.assertEquals(201, response.getStatusCode()); } @Test From c866a493c6759a5914051b0225be4203544f23a2 Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Sun, 15 Oct 2017 11:07:46 +0200 Subject: [PATCH 135/439] Sets MOCK_HOST env variable in travis. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4fc4dbee..5f0a4358 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,6 +24,7 @@ after_script: - "./scripts/upload.sh" env: global: + - MOCK_HOST=localhost:4010 - S3_POLICY: ewogICJleHBpcmF0aW9uIjogIjIxMDAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCIgfSwKICAgIHsiYnVja2V0IjogInNlbmRncmlkLW9wZW4tc291cmNlIiB9LAogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgInNlbmRncmlkLWphdmEvIl0sCiAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMjA0OCwgMjY4NDM1NDU2XSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi96aXAiXQogIF0KfQo= - secure: Iki1btwhG1nlyjnEMu90Oh/hoatFpPiiKkqpj7siLnlLp2xbBQ2003jRsn30I3Vujes2ugvzdlHqBJ9lDwRvfGrKXcLlRvYuDQ24N2YKquEiKHUxs+iMOzTQj6Sf64KL5O0aSZd1l5rjWgsQ0qqjHW9u3l5bUjqxzrhAI2Js37U= - secure: Khi6a4z1lfZmDEDV738MOiWznRcTv5ILZUM+igEw2txX7PGX+B5909WridpAijTGiurJ6eda7jvsUgci8DTPQCXB18LD6N870hnPcSQkuI6zDAhKTx+w/ZsfPLWh28sP2CVzbqGdxaitZDKxRWaVmKnBZpyi8XI9UKjmyK2sjwE= From db3f6c7ea9829530139944fb879ba7adf82037ea Mon Sep 17 00:00:00 2001 From: Shubheksha Jalan Date: Mon, 16 Oct 2017 12:22:15 +0530 Subject: [PATCH 136/439] Update USE_CASES.md - Add sections on email stats and setting up domain white labels --- USE_CASES.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/USE_CASES.md b/USE_CASES.md index 1bfb62f0..b9f7863f 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -98,4 +98,18 @@ public class Example { } } } -``` \ No newline at end of file +``` + + +# How to Setup a Domain Whitelabel + +You can find documentation for how to setup a domain whitelabel via the UI [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/setup_domain_whitelabel.html) and via API [here](https://github.com/sendgrid/sendgrid-csharp/blob/master/USAGE.md#whitelabel). + +Find more information about all of SendGrid's whitelabeling related documentation [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/index.html). + + +# How to View Email Statistics + +You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-csharp/blob/master/USAGE.md#stats). + +Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as SendGrid processes your email. From 56e8770c72f5a3e06416bfc6e7eb1655700ce071 Mon Sep 17 00:00:00 2001 From: Diego Camargo Date: Mon, 16 Oct 2017 21:09:20 +0200 Subject: [PATCH 137/439] Add a way to verify that the content doesn't contain sensitive information --- .../helpers/mail/objects/Content.java | 23 +++++++++ .../com/sendgrid/helpers/ContentTest.java | 47 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 src/test/java/com/sendgrid/helpers/ContentTest.java diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index f6621ac9..1a348ea5 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -4,6 +4,14 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.regex.Pattern; +import java.lang.IllegalArgumentException; + /** * An object in which you may specify the content of your email. */ @@ -64,6 +72,21 @@ public String getValue() { * @param value the value. */ public void setValue(String value) { + ContentVerifier.verifyContent(value); this.value = value; } } + +class ContentVerifier { + private static final List FORBIDDEN_PATTERNS = Collections.singletonList( + Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") + ); + + static void verifyContent(String content) { + for (Pattern pattern: FORBIDDEN_PATTERNS) { + if (pattern.matcher(content).matches()) { + throw new IllegalArgumentException("Found a Forbidden Pattern in the content of the email"); + } + } + } +} diff --git a/src/test/java/com/sendgrid/helpers/ContentTest.java b/src/test/java/com/sendgrid/helpers/ContentTest.java new file mode 100644 index 00000000..05e2328c --- /dev/null +++ b/src/test/java/com/sendgrid/helpers/ContentTest.java @@ -0,0 +1,47 @@ +package com.sendgrid; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import java.util.ArrayList; +import java.util.Arrays; + +public class ContentTest { + private Content content; + + @Before + public void setUp() { + this.content = new Content(); + } + + @Rule + public final ExpectedException exception = ExpectedException.none(); + + @Test + public void testForbiddenContentIsRejected() { + + ArrayList sampleApiKeys = new ArrayList<>( + Arrays.asList( + "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", + "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" + ) + + ); + + for (String apiKey: sampleApiKeys) { + exception.expect(IllegalArgumentException.class); + this.content.setValue("My api key is: " + apiKey); + } + } + + @Test + public void testNormalContentIsAllowed() { + String message = "I will not send you my api key!"; + this.content.setValue(message); + Assert.assertEquals(message, this.content.getValue()); + } + +} From a2e2213f1e438a92e85cbb9b5900c4ded5dad3ac Mon Sep 17 00:00:00 2001 From: Shubheksha Jalan Date: Tue, 17 Oct 2017 01:36:02 +0530 Subject: [PATCH 138/439] Add links in the table of contents, fix repo name in links --- USE_CASES.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/USE_CASES.md b/USE_CASES.md index b9f7863f..13a06be9 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -3,6 +3,8 @@ This documentation provides examples for specific use cases. Please [open an iss # Table of Contents * [Transactional Templates](#transactional_templates) +* [How to Setup a Domain Whitelabel](#domain_whitelabel) +* [How to View Email Statistics](#email_stats) # Transactional Templates @@ -103,13 +105,13 @@ public class Example { # How to Setup a Domain Whitelabel -You can find documentation for how to setup a domain whitelabel via the UI [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/setup_domain_whitelabel.html) and via API [here](https://github.com/sendgrid/sendgrid-csharp/blob/master/USAGE.md#whitelabel). +You can find documentation for how to setup a domain whitelabel via the UI [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/setup_domain_whitelabel.html) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#whitelabel). Find more information about all of SendGrid's whitelabeling related documentation [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/index.html). # How to View Email Statistics -You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-csharp/blob/master/USAGE.md#stats). +You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#stats). Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as SendGrid processes your email. From ba59272eb88b0c3115a957e86c9fc064967144af Mon Sep 17 00:00:00 2001 From: pushkyn Date: Tue, 17 Oct 2017 20:15:05 +0300 Subject: [PATCH 139/439] add "viewing request body" section to troubleshooting --- TROUBLESHOOTING.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 7a4aace1..fc282d40 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -12,6 +12,7 @@ If you can't find a solution below, please open an [issue](https://github.com/se * [Environment Variables and Your SendGrid API Key](#environment) * [Using the Package Manager](#package-manager) * [Android Compatibility](#android) +* [Viewing the Request Body](#request-body) ## Migrating from v2 to v3 @@ -97,3 +98,14 @@ repositories { Since Android SDK 23, HttpClient is no longer supported. Some workarounds can be found [here](http://stackoverflow.com/questions/32153318/httpclient-wont-import-in-android-studio). We have an issue to remove that dependency [here](https://github.com/sendgrid/java-http-client/issues/2), please upvote to move it up the queue. + + +## Viewing the Request Body + +When debugging or testing, it may be useful to exampine the raw request body to compare against the [documented format](https://sendgrid.com/docs/API_Reference/api_v3.html). + +You can do this right before you call `request.setBody(mail.build())` like so: + +```java +System.out.println(mail.build()); +``` \ No newline at end of file From 6517d4a2c7c1959e3f79f9239f871988d3e41210 Mon Sep 17 00:00:00 2001 From: pushkyn Date: Tue, 17 Oct 2017 20:48:38 +0300 Subject: [PATCH 140/439] Update USAGE.md and CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- USAGE.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a515809f..8cb8ea5c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -167,7 +167,7 @@ Please run your code through: # Clone your fork of the repo into the current directory git clone https://github.com/sendgrid/sendgrid-java # Navigate to the newly cloned directory - cd sendgrid-python + cd sendgrid-java # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/sendgrid/sendgrid-java ``` diff --git a/USAGE.md b/USAGE.md index bc64978b..b29616d7 100644 --- a/USAGE.md +++ b/USAGE.md @@ -2,7 +2,7 @@ This documentation is based on our [OAI specification](https://github.com/sendgr # INITIALIZATION -```ruby +```java import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; From 25fafa89da47e65393630d8da26f6117bea60e5b Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Fri, 20 Oct 2017 08:35:01 +0200 Subject: [PATCH 141/439] Prints TRVIS and MOCK_HOST env variables. --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5f0a4358..9986d9a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,8 @@ matrix: - os: linux jdk: oraclejdk8 before_script: +- echo TRAVIS $TRAVIS +- echo MOCK_HOST $MOCK_HOST - "./scripts/startPrism.sh &" - sleep 10 before_install: @@ -24,7 +26,6 @@ after_script: - "./scripts/upload.sh" env: global: - - MOCK_HOST=localhost:4010 - S3_POLICY: ewogICJleHBpcmF0aW9uIjogIjIxMDAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCIgfSwKICAgIHsiYnVja2V0IjogInNlbmRncmlkLW9wZW4tc291cmNlIiB9LAogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgInNlbmRncmlkLWphdmEvIl0sCiAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMjA0OCwgMjY4NDM1NDU2XSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi96aXAiXQogIF0KfQo= - secure: Iki1btwhG1nlyjnEMu90Oh/hoatFpPiiKkqpj7siLnlLp2xbBQ2003jRsn30I3Vujes2ugvzdlHqBJ9lDwRvfGrKXcLlRvYuDQ24N2YKquEiKHUxs+iMOzTQj6Sf64KL5O0aSZd1l5rjWgsQ0qqjHW9u3l5bUjqxzrhAI2Js37U= - secure: Khi6a4z1lfZmDEDV738MOiWznRcTv5ILZUM+igEw2txX7PGX+B5909WridpAijTGiurJ6eda7jvsUgci8DTPQCXB18LD6N870hnPcSQkuI6zDAhKTx+w/ZsfPLWh28sP2CVzbqGdxaitZDKxRWaVmKnBZpyi8XI9UKjmyK2sjwE= From ff020faf43fa7958aeb72fd3751567d177a63a1e Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Fri, 20 Oct 2017 21:40:09 +0200 Subject: [PATCH 142/439] Removes TRAVIS related logic from 10 tests. --- src/test/java/com/sendgrid/SendGridTest.java | 100 ++++--------------- 1 file changed, 20 insertions(+), 80 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 5ec45eab..953e43c8 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -4159,14 +4159,8 @@ public void test_user_webhooks_parse_stats_get() throws IOException { @Test public void test_whitelabel_domains_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -4179,14 +4173,8 @@ public void test_whitelabel_domains_post() throws IOException { @Test public void test_whitelabel_domains_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4203,14 +4191,8 @@ public void test_whitelabel_domains_get() throws IOException { @Test public void test_whitelabel_domains_default_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4222,14 +4204,8 @@ public void test_whitelabel_domains_default_get() throws IOException { @Test public void test_whitelabel_domains_subuser_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4241,14 +4217,8 @@ public void test_whitelabel_domains_subuser_get() throws IOException { @Test public void test_whitelabel_domains_subuser_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4260,14 +4230,8 @@ public void test_whitelabel_domains_subuser_delete() throws IOException { @Test public void test_whitelabel_domains__domain_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4280,14 +4244,8 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { @Test public void test_whitelabel_domains__domain_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4299,14 +4257,8 @@ public void test_whitelabel_domains__domain_id__get() throws IOException { @Test public void test_whitelabel_domains__domain_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4318,14 +4270,8 @@ public void test_whitelabel_domains__domain_id__delete() throws IOException { @Test public void test_whitelabel_domains__domain_id__subuser_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -4338,14 +4284,8 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio @Test public void test_whitelabel_domains__id__ips_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); From 377892c9f0f085512b24f25bc3ac2280f37cc0da Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sat, 21 Oct 2017 01:42:49 +0300 Subject: [PATCH 143/439] More SEO Friendly Section links --- CONTRIBUTING.md | 25 +++++++++++++------------ README.md | 14 +++++++------- USAGE.md | 24 ++++++++++++------------ USE_CASES.md | 4 ++-- 4 files changed, 34 insertions(+), 33 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8cb8ea5c..aeaa6486 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,13 +2,13 @@ Hello! Thank you for choosing to help contribute to one of the SendGrid open sou - [CLAs and CCLAs](#cla) - [Roadmap & Milestones](#roadmap) -- [Feature Request](#feature_request) -- [Submit a Bug Report](#submit_a_bug_report) -- [Improvements to the Codebase](#improvements_to_the_codebase) -- [Understanding the Code Base](#understanding_the_codebase) +- [Feature Request](#feature-request) +- [Submit a Bug Report](#submit-a-bug-report) +- [Improvements to the Codebase](#improvements-to-the-codebase) +- [Understanding the Code Base](#understanding-the-codebase) - [Testing](#testing) -- [Style Guidelines & Naming Conventions](#style_guidelines_and_naming_conventions) -- [Creating a Pull Request](#creating_a_pull_request) +- [Style Guidelines & Naming Conventions](#style-guidelines-and-naming-conventions) +- [Creating a Pull Request](#creating-a-pull-request) We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. @@ -26,7 +26,7 @@ When you create a Pull Request, after a few seconds, a comment will appear with There are a few ways to contribute, which we'll enumerate below: - + ## Feature Request If you'd like to make a feature request, please read this section. @@ -36,7 +36,7 @@ The GitHub issue tracker is the preferred channel for library feature requests, - Please **search for existing issues** in order to ensure we don't have duplicate bugs/feature requests. - Please be respectful and considerate of others when commenting on issues - + ## Submit a Bug Report Note: DO NOT include your credentials in ANY code examples, descriptions, or media you make public. @@ -53,7 +53,7 @@ Before you decide to create a new issue, please try the following: In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. - + ## Improvements to the Codebase We welcome direct contributions to the sendgrid-java code base. Thank you! @@ -105,7 +105,7 @@ Add the example you want to test to Example.java, including the headers at the t javac -classpath ../repo/com/sendgrid/4.1.1/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.1-jar.jar:. Example ``` - + ## Understanding the Code Base **/examples** @@ -149,7 +149,7 @@ For the purposes of contributing to this repo, please update the [`SendGridTest. ./gradlew test -i ``` - + ## Style Guidelines & Naming Conventions Generally, we follow the style guidelines as suggested by the official language. However, we ask that you conform to the styles that already exist in the library. If you wish to deviate, please explain your reasoning. @@ -158,7 +158,8 @@ Please run your code through: - [FindBugs](http://findbugs.sourceforge.net/) - [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](http://checkstyle.sourceforge.net/reports/google-java-style.html). -## Creating a Pull Request + +## Creating a Pull Request 1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes: diff --git a/README.md b/README.md index 02725369..45abaabf 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,9 @@ We appreciate your continued support, thank you! # Table of Contents * [Installation](#installation) -* [Quick Start](#quick_start) +* [Quick Start](#quick-start) * [Usage](#usage) -* [Use Cases](#use_cases) +* [Use Cases](#use-cases) * [Announcements](#announcements) * [Roadmap](#roadmap) * [How to Contribute](#contribute) @@ -79,7 +79,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) - + # Quick Start ## Hello Email @@ -180,7 +180,7 @@ public class Example { - [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. - + # Use Cases [Examples of common API use cases](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md), such as how to send an email with a transactional template. @@ -204,10 +204,10 @@ We encourage contribution to our libraries (you might even score some nifty swag Quick links: -- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature_request) -- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit_a_bug_report) +- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) +- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) - [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#cla) -- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements_to_the_codebase) +- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) # Troubleshooting diff --git a/USAGE.md b/USAGE.md index b29616d7..c014d11d 100644 --- a/USAGE.md +++ b/USAGE.md @@ -22,9 +22,9 @@ public class Example { # Table of Contents -* [ACCESS SETTINGS](#access_settings) +* [ACCESS SETTINGS](#access-settings) * [ALERTS](#alerts) -* [API KEYS](#api_keys) +* [API KEYS](#api-keys) * [ASM](#asm) * [BROWSERS](#browsers) * [CAMPAIGNS](#campaigns) @@ -35,21 +35,21 @@ public class Example { * [GEO](#geo) * [IPS](#ips) * [MAIL](#mail) -* [MAIL SETTINGS](#mail_settings) -* [MAILBOX PROVIDERS](#mailbox_providers) -* [PARTNER SETTINGS](#partner_settings) +* [MAIL SETTINGS](#mail-settings) +* [MAILBOX PROVIDERS](#mailbox-providers) +* [PARTNER SETTINGS](#partner-settings) * [SCOPES](#scopes) * [SENDERS](#senders) * [STATS](#stats) * [SUBUSERS](#subusers) * [SUPPRESSION](#suppression) * [TEMPLATES](#templates) -* [TRACKING SETTINGS](#tracking_settings) +* [TRACKING SETTINGS](#tracking-settings) * [USER](#user) * [WHITELABEL](#whitelabel) - + # ACCESS SETTINGS ## Retrieve all recent access attempts @@ -353,7 +353,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. throw ex; } ``` - + # API KEYS ## Create API keys @@ -2710,7 +2710,7 @@ This endpoint has a helper, check it out [here](https://github.com/sendgrid/send throw ex; } ``` - + # MAIL SETTINGS ## Retrieve all mail settings @@ -3201,7 +3201,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th throw ex; } ``` - + # MAILBOX PROVIDERS ## Retrieve email statistics by mailbox provider. @@ -3235,7 +3235,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act throw ex; } ``` - + # PARTNER SETTINGS ## Returns a list of all partner settings. @@ -4675,7 +4675,7 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` - + # TRACKING SETTINGS ## Retrieve Tracking Settings diff --git a/USE_CASES.md b/USE_CASES.md index 1bfb62f0..9fd05950 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -2,9 +2,9 @@ This documentation provides examples for specific use cases. Please [open an iss # Table of Contents -* [Transactional Templates](#transactional_templates) +* [Transactional Templates](#transactional-templates) - + # Transactional Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. From 0b9c047278cd4529529bab08eba0667f7991dc32 Mon Sep 17 00:00:00 2001 From: mptap Date: Fri, 20 Oct 2017 16:16:14 -0700 Subject: [PATCH 144/439] Add/Update Badges on README --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 02725369..57372f2b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) [![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) +[![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) +[![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) +[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.txt) **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. @@ -24,6 +28,7 @@ We appreciate your continued support, thank you! * [How to Contribute](#contribute) * [Troubleshooting](#troubleshooting) * [About](#about) +* [License](#license) # Installation @@ -221,4 +226,5 @@ sendgrid-java is guided and supported by the SendGrid [Developer Experience Team sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. -![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) +# License +[The MIT License (MIT)](LICENSE.txt) From 802f36d9eca501c7eb5e2ad44420c42549afa4ba Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Sat, 21 Oct 2017 08:10:25 +0200 Subject: [PATCH 145/439] Removes TRAVIS related logic from all tests. --- src/test/java/com/sendgrid/SendGridTest.java | 2210 ++++-------------- 1 file changed, 442 insertions(+), 1768 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 953e43c8..c633554b 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -77,14 +77,8 @@ public void testHost() { @Test public void test_access_settings_activity_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -97,14 +91,8 @@ public void test_access_settings_activity_get() throws IOException { @Test public void test_access_settings_whitelist_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -117,14 +105,8 @@ public void test_access_settings_whitelist_post() throws IOException { @Test public void test_access_settings_whitelist_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -136,14 +118,8 @@ public void test_access_settings_whitelist_get() throws IOException { @Test public void test_access_settings_whitelist_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -156,14 +132,8 @@ public void test_access_settings_whitelist_delete() throws IOException { @Test public void test_access_settings_whitelist__rule_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -175,14 +145,8 @@ public void test_access_settings_whitelist__rule_id__get() throws IOException { @Test public void test_access_settings_whitelist__rule_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -194,14 +158,8 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException @Test public void test_alerts_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -214,14 +172,8 @@ public void test_alerts_post() throws IOException { @Test public void test_alerts_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -233,14 +185,8 @@ public void test_alerts_get() throws IOException { @Test public void test_alerts__alert_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -253,14 +199,8 @@ public void test_alerts__alert_id__patch() throws IOException { @Test public void test_alerts__alert_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -272,14 +212,8 @@ public void test_alerts__alert_id__get() throws IOException { @Test public void test_alerts__alert_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -291,14 +225,8 @@ public void test_alerts__alert_id__delete() throws IOException { @Test public void test_api_keys_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -311,14 +239,8 @@ public void test_api_keys_post() throws IOException { @Test public void test_api_keys_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -331,14 +253,8 @@ public void test_api_keys_get() throws IOException { @Test public void test_api_keys__api_key_id__put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -351,14 +267,8 @@ public void test_api_keys__api_key_id__put() throws IOException { @Test public void test_api_keys__api_key_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -371,14 +281,8 @@ public void test_api_keys__api_key_id__patch() throws IOException { @Test public void test_api_keys__api_key_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -390,14 +294,8 @@ public void test_api_keys__api_key_id__get() throws IOException { @Test public void test_api_keys__api_key_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -409,14 +307,8 @@ public void test_api_keys__api_key_id__delete() throws IOException { @Test public void test_asm_groups_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -429,14 +321,8 @@ public void test_asm_groups_post() throws IOException { @Test public void test_asm_groups_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -449,14 +335,8 @@ public void test_asm_groups_get() throws IOException { @Test public void test_asm_groups__group_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -469,14 +349,8 @@ public void test_asm_groups__group_id__patch() throws IOException { @Test public void test_asm_groups__group_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -488,14 +362,8 @@ public void test_asm_groups__group_id__get() throws IOException { @Test public void test_asm_groups__group_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -507,14 +375,8 @@ public void test_asm_groups__group_id__delete() throws IOException { @Test public void test_asm_groups__group_id__suppressions_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -527,14 +389,8 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { @Test public void test_asm_groups__group_id__suppressions_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -546,14 +402,8 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { @Test public void test_asm_groups__group_id__suppressions_search_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -566,14 +416,8 @@ public void test_asm_groups__group_id__suppressions_search_post() throws IOExcep @Test public void test_asm_groups__group_id__suppressions__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -585,14 +429,8 @@ public void test_asm_groups__group_id__suppressions__email__delete() throws IOEx @Test public void test_asm_suppressions_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -604,14 +442,8 @@ public void test_asm_suppressions_get() throws IOException { @Test public void test_asm_suppressions_global_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -624,14 +456,8 @@ public void test_asm_suppressions_global_post() throws IOException { @Test public void test_asm_suppressions_global__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -643,14 +469,8 @@ public void test_asm_suppressions_global__email__get() throws IOException { @Test public void test_asm_suppressions_global__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -662,14 +482,8 @@ public void test_asm_suppressions_global__email__delete() throws IOException { @Test public void test_asm_suppressions__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -681,14 +495,8 @@ public void test_asm_suppressions__email__get() throws IOException { @Test public void test_browsers_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -706,14 +514,8 @@ public void test_browsers_stats_get() throws IOException { @Test public void test_campaigns_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -726,14 +528,8 @@ public void test_campaigns_post() throws IOException { @Test public void test_campaigns_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -747,14 +543,8 @@ public void test_campaigns_get() throws IOException { @Test public void test_campaigns__campaign_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -767,14 +557,8 @@ public void test_campaigns__campaign_id__patch() throws IOException { @Test public void test_campaigns__campaign_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -786,14 +570,8 @@ public void test_campaigns__campaign_id__get() throws IOException { @Test public void test_campaigns__campaign_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -805,14 +583,8 @@ public void test_campaigns__campaign_id__delete() throws IOException { @Test public void test_campaigns__campaign_id__schedules_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -825,14 +597,8 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { @Test public void test_campaigns__campaign_id__schedules_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -845,14 +611,8 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { @Test public void test_campaigns__campaign_id__schedules_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -864,14 +624,8 @@ public void test_campaigns__campaign_id__schedules_get() throws IOException { @Test public void test_campaigns__campaign_id__schedules_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -883,14 +637,8 @@ public void test_campaigns__campaign_id__schedules_delete() throws IOException { @Test public void test_campaigns__campaign_id__schedules_now_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -902,14 +650,8 @@ public void test_campaigns__campaign_id__schedules_now_post() throws IOException @Test public void test_campaigns__campaign_id__schedules_test_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -922,14 +664,8 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio @Test public void test_categories_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -944,14 +680,8 @@ public void test_categories_get() throws IOException { @Test public void test_categories_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -969,14 +699,8 @@ public void test_categories_stats_get() throws IOException { @Test public void test_categories_stats_sums_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -995,14 +719,8 @@ public void test_categories_stats_sums_get() throws IOException { @Test public void test_clients_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1017,14 +735,8 @@ public void test_clients_stats_get() throws IOException { @Test public void test_clients__client_type__stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1039,14 +751,8 @@ public void test_clients__client_type__stats_get() throws IOException { @Test public void test_contactdb_custom_fields_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1059,14 +765,8 @@ public void test_contactdb_custom_fields_post() throws IOException { @Test public void test_contactdb_custom_fields_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1078,14 +778,8 @@ public void test_contactdb_custom_fields_get() throws IOException { @Test public void test_contactdb_custom_fields__custom_field_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1097,14 +791,8 @@ public void test_contactdb_custom_fields__custom_field_id__get() throws IOExcept @Test public void test_contactdb_custom_fields__custom_field_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -1116,14 +804,8 @@ public void test_contactdb_custom_fields__custom_field_id__delete() throws IOExc @Test public void test_contactdb_lists_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1136,14 +818,8 @@ public void test_contactdb_lists_post() throws IOException { @Test public void test_contactdb_lists_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1155,14 +831,8 @@ public void test_contactdb_lists_get() throws IOException { @Test public void test_contactdb_lists_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1175,14 +845,8 @@ public void test_contactdb_lists_delete() throws IOException { @Test public void test_contactdb_lists__list_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1196,14 +860,8 @@ public void test_contactdb_lists__list_id__patch() throws IOException { @Test public void test_contactdb_lists__list_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1216,14 +874,8 @@ public void test_contactdb_lists__list_id__get() throws IOException { @Test public void test_contactdb_lists__list_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -1236,14 +888,8 @@ public void test_contactdb_lists__list_id__delete() throws IOException { @Test public void test_contactdb_lists__list_id__recipients_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1256,14 +902,8 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException @Test public void test_contactdb_lists__list_id__recipients_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1278,14 +918,8 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { @Test public void test_contactdb_lists__list_id__recipients__recipient_id__post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1297,14 +931,8 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__post() thro @Test public void test_contactdb_lists__list_id__recipients__recipient_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1318,14 +946,8 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th @Test public void test_contactdb_recipients_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1338,14 +960,8 @@ public void test_contactdb_recipients_patch() throws IOException { @Test public void test_contactdb_recipients_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1358,14 +974,8 @@ public void test_contactdb_recipients_post() throws IOException { @Test public void test_contactdb_recipients_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1379,14 +989,8 @@ public void test_contactdb_recipients_get() throws IOException { @Test public void test_contactdb_recipients_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1399,14 +1003,8 @@ public void test_contactdb_recipients_delete() throws IOException { @Test public void test_contactdb_recipients_billable_count_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1418,14 +1016,8 @@ public void test_contactdb_recipients_billable_count_get() throws IOException { @Test public void test_contactdb_recipients_count_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1437,14 +1029,8 @@ public void test_contactdb_recipients_count_get() throws IOException { @Test public void test_contactdb_recipients_search_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1457,14 +1043,8 @@ public void test_contactdb_recipients_search_get() throws IOException { @Test public void test_contactdb_recipients__recipient_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1476,14 +1056,8 @@ public void test_contactdb_recipients__recipient_id__get() throws IOException { @Test public void test_contactdb_recipients__recipient_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1495,14 +1069,8 @@ public void test_contactdb_recipients__recipient_id__delete() throws IOException @Test public void test_contactdb_recipients__recipient_id__lists_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1514,14 +1082,8 @@ public void test_contactdb_recipients__recipient_id__lists_get() throws IOExcept @Test public void test_contactdb_reserved_fields_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1533,14 +1095,8 @@ public void test_contactdb_reserved_fields_get() throws IOException { @Test public void test_contactdb_segments_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1553,14 +1109,8 @@ public void test_contactdb_segments_post() throws IOException { @Test public void test_contactdb_segments_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1572,14 +1122,8 @@ public void test_contactdb_segments_get() throws IOException { @Test public void test_contactdb_segments__segment_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1593,14 +1137,8 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { @Test public void test_contactdb_segments__segment_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1613,14 +1151,8 @@ public void test_contactdb_segments__segment_id__get() throws IOException { @Test public void test_contactdb_segments__segment_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1633,14 +1165,8 @@ public void test_contactdb_segments__segment_id__delete() throws IOException { @Test public void test_contactdb_segments__segment_id__recipients_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1654,14 +1180,8 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep @Test public void test_devices_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1678,14 +1198,8 @@ public void test_devices_stats_get() throws IOException { @Test public void test_geo_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1703,14 +1217,8 @@ public void test_geo_stats_get() throws IOException { @Test public void test_ips_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1727,14 +1235,8 @@ public void test_ips_get() throws IOException { @Test public void test_ips_assigned_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1746,14 +1248,8 @@ public void test_ips_assigned_get() throws IOException { @Test public void test_ips_pools_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1766,14 +1262,8 @@ public void test_ips_pools_post() throws IOException { @Test public void test_ips_pools_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1785,14 +1275,8 @@ public void test_ips_pools_get() throws IOException { @Test public void test_ips_pools__pool_name__put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1805,14 +1289,8 @@ public void test_ips_pools__pool_name__put() throws IOException { @Test public void test_ips_pools__pool_name__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1824,14 +1302,8 @@ public void test_ips_pools__pool_name__get() throws IOException { @Test public void test_ips_pools__pool_name__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1843,14 +1315,8 @@ public void test_ips_pools__pool_name__delete() throws IOException { @Test public void test_ips_pools__pool_name__ips_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1863,14 +1329,8 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { @Test public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1882,14 +1342,8 @@ public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { @Test public void test_ips_warmup_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1902,14 +1356,8 @@ public void test_ips_warmup_post() throws IOException { @Test public void test_ips_warmup_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1921,14 +1369,8 @@ public void test_ips_warmup_get() throws IOException { @Test public void test_ips_warmup__ip_address__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1940,14 +1382,8 @@ public void test_ips_warmup__ip_address__get() throws IOException { @Test public void test_ips_warmup__ip_address__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1959,14 +1395,8 @@ public void test_ips_warmup__ip_address__delete() throws IOException { @Test public void test_ips__ip_address__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1978,14 +1408,8 @@ public void test_ips__ip_address__get() throws IOException { @Test public void test_mail_batch_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1997,14 +1421,8 @@ public void test_mail_batch_post() throws IOException { @Test public void test_mail_batch__batch_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2016,14 +1434,8 @@ public void test_mail_batch__batch_id__get() throws IOException { @Test public void test_mail_send_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -2036,14 +1448,8 @@ public void test_mail_send_post() throws IOException { @Test public void test_mail_settings_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2057,14 +1463,8 @@ public void test_mail_settings_get() throws IOException { @Test public void test_mail_settings_address_whitelist_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2077,14 +1477,8 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { @Test public void test_mail_settings_address_whitelist_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2096,14 +1490,8 @@ public void test_mail_settings_address_whitelist_get() throws IOException { @Test public void test_mail_settings_bcc_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2116,14 +1504,8 @@ public void test_mail_settings_bcc_patch() throws IOException { @Test public void test_mail_settings_bcc_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2135,14 +1517,8 @@ public void test_mail_settings_bcc_get() throws IOException { @Test public void test_mail_settings_bounce_purge_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2155,14 +1531,8 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { @Test public void test_mail_settings_bounce_purge_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2174,14 +1544,8 @@ public void test_mail_settings_bounce_purge_get() throws IOException { @Test public void test_mail_settings_footer_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2194,14 +1558,8 @@ public void test_mail_settings_footer_patch() throws IOException { @Test public void test_mail_settings_footer_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2213,14 +1571,8 @@ public void test_mail_settings_footer_get() throws IOException { @Test public void test_mail_settings_forward_bounce_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2233,14 +1585,8 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { @Test public void test_mail_settings_forward_bounce_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2252,14 +1598,8 @@ public void test_mail_settings_forward_bounce_get() throws IOException { @Test public void test_mail_settings_forward_spam_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2272,14 +1612,8 @@ public void test_mail_settings_forward_spam_patch() throws IOException { @Test public void test_mail_settings_forward_spam_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2291,14 +1625,8 @@ public void test_mail_settings_forward_spam_get() throws IOException { @Test public void test_mail_settings_plain_content_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2311,14 +1639,8 @@ public void test_mail_settings_plain_content_patch() throws IOException { @Test public void test_mail_settings_plain_content_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2330,14 +1652,8 @@ public void test_mail_settings_plain_content_get() throws IOException { @Test public void test_mail_settings_spam_check_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2350,14 +1666,8 @@ public void test_mail_settings_spam_check_patch() throws IOException { @Test public void test_mail_settings_spam_check_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2369,14 +1679,8 @@ public void test_mail_settings_spam_check_get() throws IOException { @Test public void test_mail_settings_template_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2389,14 +1693,8 @@ public void test_mail_settings_template_patch() throws IOException { @Test public void test_mail_settings_template_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2408,14 +1706,8 @@ public void test_mail_settings_template_get() throws IOException { @Test public void test_mailbox_providers_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2433,14 +1725,8 @@ public void test_mailbox_providers_stats_get() throws IOException { @Test public void test_partner_settings_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2454,14 +1740,8 @@ public void test_partner_settings_get() throws IOException { @Test public void test_partner_settings_new_relic_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2474,14 +1754,8 @@ public void test_partner_settings_new_relic_patch() throws IOException { @Test public void test_partner_settings_new_relic_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2493,14 +1767,8 @@ public void test_partner_settings_new_relic_get() throws IOException { @Test public void test_scopes_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2512,14 +1780,8 @@ public void test_scopes_get() throws IOException { @Test public void test_senders_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -2532,14 +1794,8 @@ public void test_senders_post() throws IOException { @Test public void test_senders_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2551,14 +1807,8 @@ public void test_senders_get() throws IOException { @Test public void test_senders__sender_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2571,14 +1821,8 @@ public void test_senders__sender_id__patch() throws IOException { @Test public void test_senders__sender_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2590,14 +1834,8 @@ public void test_senders__sender_id__get() throws IOException { @Test public void test_senders__sender_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2609,14 +1847,8 @@ public void test_senders__sender_id__delete() throws IOException { @Test public void test_senders__sender_id__resend_verification_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2628,14 +1860,8 @@ public void test_senders__sender_id__resend_verification_post() throws IOExcepti @Test public void test_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2652,14 +1878,8 @@ public void test_stats_get() throws IOException { @Test public void test_subusers_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2672,14 +1892,8 @@ public void test_subusers_post() throws IOException { @Test public void test_subusers_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2694,14 +1908,8 @@ public void test_subusers_get() throws IOException { @Test public void test_subusers_reputations_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2714,14 +1922,8 @@ public void test_subusers_reputations_get() throws IOException { @Test public void test_subusers_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2739,14 +1941,8 @@ public void test_subusers_stats_get() throws IOException { @Test public void test_subusers_stats_monthly_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2764,14 +1960,8 @@ public void test_subusers_stats_monthly_get() throws IOException { @Test public void test_subusers_stats_sums_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2790,14 +1980,8 @@ public void test_subusers_stats_sums_get() throws IOException { @Test public void test_subusers__subuser_name__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2810,14 +1994,8 @@ public void test_subusers__subuser_name__patch() throws IOException { @Test public void test_subusers__subuser_name__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2829,14 +2007,8 @@ public void test_subusers__subuser_name__delete() throws IOException { @Test public void test_subusers__subuser_name__ips_put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2849,14 +2021,8 @@ public void test_subusers__subuser_name__ips_put() throws IOException { @Test public void test_subusers__subuser_name__monitor_put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2869,14 +2035,8 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { @Test public void test_subusers__subuser_name__monitor_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2889,14 +2049,8 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { @Test public void test_subusers__subuser_name__monitor_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2908,14 +2062,8 @@ public void test_subusers__subuser_name__monitor_get() throws IOException { @Test public void test_subusers__subuser_name__monitor_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2927,14 +2075,8 @@ public void test_subusers__subuser_name__monitor_delete() throws IOException { @Test public void test_subusers__subuser_name__stats_monthly_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2951,14 +2093,8 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException @Test public void test_suppression_blocks_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2974,14 +2110,8 @@ public void test_suppression_blocks_get() throws IOException { @Test public void test_suppression_blocks_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2994,14 +2124,8 @@ public void test_suppression_blocks_delete() throws IOException { @Test public void test_suppression_blocks__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3013,14 +2137,8 @@ public void test_suppression_blocks__email__get() throws IOException { @Test public void test_suppression_blocks__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3032,14 +2150,8 @@ public void test_suppression_blocks__email__delete() throws IOException { @Test public void test_suppression_bounces_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3053,14 +2165,8 @@ public void test_suppression_bounces_get() throws IOException { @Test public void test_suppression_bounces_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3073,14 +2179,8 @@ public void test_suppression_bounces_delete() throws IOException { @Test public void test_suppression_bounces__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3092,14 +2192,8 @@ public void test_suppression_bounces__email__get() throws IOException { @Test public void test_suppression_bounces__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3112,14 +2206,8 @@ public void test_suppression_bounces__email__delete() throws IOException { @Test public void test_suppression_invalid_emails_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3135,14 +2223,8 @@ public void test_suppression_invalid_emails_get() throws IOException { @Test public void test_suppression_invalid_emails_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3155,14 +2237,8 @@ public void test_suppression_invalid_emails_delete() throws IOException { @Test public void test_suppression_invalid_emails__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3174,14 +2250,8 @@ public void test_suppression_invalid_emails__email__get() throws IOException { @Test public void test_suppression_invalid_emails__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3193,14 +2263,8 @@ public void test_suppression_invalid_emails__email__delete() throws IOException @Test public void test_suppression_spam_report__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3212,14 +2276,8 @@ public void test_suppression_spam_report__email__get() throws IOException { @Test public void test_suppression_spam_report__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3231,14 +2289,8 @@ public void test_suppression_spam_report__email__delete() throws IOException { @Test public void test_suppression_spam_reports_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3254,14 +2306,8 @@ public void test_suppression_spam_reports_get() throws IOException { @Test public void test_suppression_spam_reports_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3274,14 +2320,8 @@ public void test_suppression_spam_reports_delete() throws IOException { @Test public void test_suppression_unsubscribes_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3297,14 +2337,8 @@ public void test_suppression_unsubscribes_get() throws IOException { @Test public void test_templates_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3317,14 +2351,8 @@ public void test_templates_post() throws IOException { @Test public void test_templates_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3336,14 +2364,8 @@ public void test_templates_get() throws IOException { @Test public void test_templates__template_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3356,14 +2378,8 @@ public void test_templates__template_id__patch() throws IOException { @Test public void test_templates__template_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3375,14 +2391,8 @@ public void test_templates__template_id__get() throws IOException { @Test public void test_templates__template_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3394,14 +2404,8 @@ public void test_templates__template_id__delete() throws IOException { @Test public void test_templates__template_id__versions_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3414,14 +2418,8 @@ public void test_templates__template_id__versions_post() throws IOException { @Test public void test_templates__template_id__versions__version_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3434,14 +2432,8 @@ public void test_templates__template_id__versions__version_id__patch() throws IO @Test public void test_templates__template_id__versions__version_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3453,14 +2445,8 @@ public void test_templates__template_id__versions__version_id__get() throws IOEx @Test public void test_templates__template_id__versions__version_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3472,14 +2458,8 @@ public void test_templates__template_id__versions__version_id__delete() throws I @Test public void test_templates__template_id__versions__version_id__activate_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3491,14 +2471,8 @@ public void test_templates__template_id__versions__version_id__activate_post() t @Test public void test_tracking_settings_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3512,14 +2486,8 @@ public void test_tracking_settings_get() throws IOException { @Test public void test_tracking_settings_click_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3532,14 +2500,8 @@ public void test_tracking_settings_click_patch() throws IOException { @Test public void test_tracking_settings_click_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3551,14 +2513,8 @@ public void test_tracking_settings_click_get() throws IOException { @Test public void test_tracking_settings_google_analytics_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3571,14 +2527,8 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { @Test public void test_tracking_settings_google_analytics_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3590,14 +2540,8 @@ public void test_tracking_settings_google_analytics_get() throws IOException { @Test public void test_tracking_settings_open_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3610,14 +2554,8 @@ public void test_tracking_settings_open_patch() throws IOException { @Test public void test_tracking_settings_open_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3629,14 +2567,8 @@ public void test_tracking_settings_open_get() throws IOException { @Test public void test_tracking_settings_subscription_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3649,14 +2581,8 @@ public void test_tracking_settings_subscription_patch() throws IOException { @Test public void test_tracking_settings_subscription_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3668,14 +2594,8 @@ public void test_tracking_settings_subscription_get() throws IOException { @Test public void test_user_account_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3687,14 +2607,8 @@ public void test_user_account_get() throws IOException { @Test public void test_user_credits_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3706,14 +2620,8 @@ public void test_user_credits_get() throws IOException { @Test public void test_user_email_put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3726,14 +2634,8 @@ public void test_user_email_put() throws IOException { @Test public void test_user_email_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3745,14 +2647,8 @@ public void test_user_email_get() throws IOException { @Test public void test_user_password_put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3765,14 +2661,8 @@ public void test_user_password_put() throws IOException { @Test public void test_user_profile_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3785,14 +2675,8 @@ public void test_user_profile_patch() throws IOException { @Test public void test_user_profile_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3804,14 +2688,8 @@ public void test_user_profile_get() throws IOException { @Test public void test_user_scheduled_sends_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3824,14 +2702,8 @@ public void test_user_scheduled_sends_post() throws IOException { @Test public void test_user_scheduled_sends_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3843,14 +2715,8 @@ public void test_user_scheduled_sends_get() throws IOException { @Test public void test_user_scheduled_sends__batch_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3863,14 +2729,8 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { @Test public void test_user_scheduled_sends__batch_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3882,14 +2742,8 @@ public void test_user_scheduled_sends__batch_id__get() throws IOException { @Test public void test_user_scheduled_sends__batch_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3901,14 +2755,8 @@ public void test_user_scheduled_sends__batch_id__delete() throws IOException { @Test public void test_user_settings_enforced_tls_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3921,14 +2769,8 @@ public void test_user_settings_enforced_tls_patch() throws IOException { @Test public void test_user_settings_enforced_tls_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3940,14 +2782,8 @@ public void test_user_settings_enforced_tls_get() throws IOException { @Test public void test_user_username_put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3960,14 +2796,8 @@ public void test_user_username_put() throws IOException { @Test public void test_user_username_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3979,14 +2809,8 @@ public void test_user_username_get() throws IOException { @Test public void test_user_webhooks_event_settings_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3999,14 +2823,8 @@ public void test_user_webhooks_event_settings_patch() throws IOException { @Test public void test_user_webhooks_event_settings_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4018,14 +2836,8 @@ public void test_user_webhooks_event_settings_get() throws IOException { @Test public void test_user_webhooks_event_test_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4038,14 +2850,8 @@ public void test_user_webhooks_event_test_post() throws IOException { @Test public void test_user_webhooks_parse_settings_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -4058,14 +2864,8 @@ public void test_user_webhooks_parse_settings_post() throws IOException { @Test public void test_user_webhooks_parse_settings_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4077,14 +2877,8 @@ public void test_user_webhooks_parse_settings_get() throws IOException { @Test public void test_user_webhooks_parse_settings__hostname__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4097,14 +2891,8 @@ public void test_user_webhooks_parse_settings__hostname__patch() throws IOExcept @Test public void test_user_webhooks_parse_settings__hostname__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4116,14 +2904,8 @@ public void test_user_webhooks_parse_settings__hostname__get() throws IOExceptio @Test public void test_user_webhooks_parse_settings__hostname__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4135,14 +2917,8 @@ public void test_user_webhooks_parse_settings__hostname__delete() throws IOExcep @Test public void test_user_webhooks_parse_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4298,14 +3074,8 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { @Test public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4317,14 +3087,8 @@ public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { @Test public void test_whitelabel_domains__id__validate_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4336,14 +3100,8 @@ public void test_whitelabel_domains__id__validate_post() throws IOException { @Test public void test_whitelabel_ips_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -4356,14 +3114,8 @@ public void test_whitelabel_ips_post() throws IOException { @Test public void test_whitelabel_ips_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4378,14 +3130,8 @@ public void test_whitelabel_ips_get() throws IOException { @Test public void test_whitelabel_ips__id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4397,14 +3143,8 @@ public void test_whitelabel_ips__id__get() throws IOException { @Test public void test_whitelabel_ips__id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4416,14 +3156,8 @@ public void test_whitelabel_ips__id__delete() throws IOException { @Test public void test_whitelabel_ips__id__validate_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4435,14 +3169,8 @@ public void test_whitelabel_ips__id__validate_post() throws IOException { @Test public void test_whitelabel_links_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -4457,14 +3185,8 @@ public void test_whitelabel_links_post() throws IOException { @Test public void test_whitelabel_links_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4477,14 +3199,8 @@ public void test_whitelabel_links_get() throws IOException { @Test public void test_whitelabel_links_default_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4497,14 +3213,8 @@ public void test_whitelabel_links_default_get() throws IOException { @Test public void test_whitelabel_links_subuser_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4517,14 +3227,8 @@ public void test_whitelabel_links_subuser_get() throws IOException { @Test public void test_whitelabel_links_subuser_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4537,14 +3241,8 @@ public void test_whitelabel_links_subuser_delete() throws IOException { @Test public void test_whitelabel_links__id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4557,14 +3255,8 @@ public void test_whitelabel_links__id__patch() throws IOException { @Test public void test_whitelabel_links__id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4576,14 +3268,8 @@ public void test_whitelabel_links__id__get() throws IOException { @Test public void test_whitelabel_links__id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4595,14 +3281,8 @@ public void test_whitelabel_links__id__delete() throws IOException { @Test public void test_whitelabel_links__id__validate_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4614,14 +3294,8 @@ public void test_whitelabel_links__id__validate_post() throws IOException { @Test public void test_whitelabel_links__link_id__subuser_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); From 1df94b5758d0ee88011a492c748b0b375c870f58 Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sat, 21 Oct 2017 14:18:10 +0300 Subject: [PATCH 146/439] Update readme - added maven central badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 02725369..505fa717 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ [![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) +[![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. From e224ab20f740df09d97dad439d60443ef04307b1 Mon Sep 17 00:00:00 2001 From: Brandon Smith Date: Sat, 21 Oct 2017 20:37:48 -0400 Subject: [PATCH 147/439] Spelling corrections in .md files --- CHANGELOG.md | 8 ++++---- TROUBLESHOOTING.md | 2 +- USAGE.md | 28 ++++++++++++++-------------- proposals/mail-helper-refactor.md | 2 +- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a85d7e2..818020a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,12 +20,12 @@ All notable changes to this project will be documented in this file. ### BREAKING CHANGE - PR #162 Update java http client dependency to [4.1.0 from 2.3.4](https://github.com/sendgrid/java-http-client/releases) - BIG thanks to [Diego Camargo](https://github.com/belfazt) for the pull request! -- The breaking change is that variables that were public are now private and accessable only via getters and setters -- The `Request` object attributes are now only accessable through getters/setters +- The breaking change is that variables that were public are now private and accessible only via getters and setters +- The `Request` object attributes are now only accessible through getters/setters - `request.method` is now `request.setMethod(string)` - `request.endpoint` is now `request.setEndpoint(string)` - `request.body` is now `request.setBody(string)` -- The `Response` object attributes are now only accessable through getters/setters +- The `Response` object attributes are now only accessible through getters/setters - `response.statusCode` is now `response.getStatusCode()` - `response.body` is now `response.getBody()` - `response.headers` is now `response.getHeaders()` @@ -118,7 +118,7 @@ request.addQueryParam("limit", "1"); ## [2.2.2] - 2015-5-23 ### Fixed -- Subsitution orders being swapped via [#65](https://github.com/sendgrid/sendgrid-java/pull/65) +- Substitution orders being swapped via [#65](https://github.com/sendgrid/sendgrid-java/pull/65) ## [2.2.1] - 2015-5-14 ### Changed diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index fc282d40..e510304b 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -102,7 +102,7 @@ We have an issue to remove that dependency [here](https://github.com/sendgrid/ja ## Viewing the Request Body -When debugging or testing, it may be useful to exampine the raw request body to compare against the [documented format](https://sendgrid.com/docs/API_Reference/api_v3.html). +When debugging or testing, it may be useful to examine the raw request body to compare against the [documented format](https://sendgrid.com/docs/API_Reference/api_v3.html). You can do this right before you call `request.setBody(mail.build())` like so: diff --git a/USAGE.md b/USAGE.md index b29616d7..1374bc51 100644 --- a/USAGE.md +++ b/USAGE.md @@ -161,7 +161,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ``` ## Retrieve a specific whitelisted IP -**This endpoint allows you to retreive a specific IP address that has been whitelisted.** +**This endpoint allows you to retrieve a specific IP address that has been whitelisted.** You must include the ID for the specific IP address you want to retrieve in your call. @@ -497,7 +497,7 @@ If the API Key ID does not exist an HTTP 404 will be returned. **This endpoint allows you to revoke an existing API Key.** -Authentications using this API Key will fail after this request is made, with some small propogation delay.If the API Key ID does not exist an HTTP 404 will be returned. +Authentications using this API Key will fail after this request is made, with some small propagation delay.If the API Key ID does not exist an HTTP 404 will be returned. The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). @@ -563,7 +563,7 @@ This endpoint will return information for each group ID that you include in your Suppressions are a list of email addresses that will not receive content sent under a given [group](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html). -Suppression groups, or [unsubscribe groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html), allow you to label a category of content that you regularly send. This gives your recipients the ability to opt out of a specific set of your email. For example, you might define a group for your transactional email, and one for your marketing email so that your users can continue recieving your transactional email witout having to receive your marketing content. +Suppression groups, or [unsubscribe groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html), allow you to label a category of content that you regularly send. This gives your recipients the ability to opt out of a specific set of your email. For example, you might define a group for your transactional email, and one for your marketing email so that your users can continue receiving your transactional email without having to receive your marketing content. ### GET /asm/groups @@ -814,9 +814,9 @@ A global suppression (or global unsubscribe) is an email address of a recipient ``` ## Retrieve a Global Suppression -**This endpoint allows you to retrieve a global suppression. You can also use this endpoint to confirm if an email address is already globally suppresed.** +**This endpoint allows you to retrieve a global suppression. You can also use this endpoint to confirm if an email address is already globally suppressed.** -If the email address you include in the URL path parameter `{email}` is alreayd globally suppressed, the response will include that email address. If the address you enter for `{email}` is not globally suppressed, an empty JSON object `{}` will be returned. +If the email address you include in the URL path parameter `{email}` is already globally suppressed, the response will include that email address. If the address you enter for `{email}` is not globally suppressed, an empty JSON object `{}` will be returned. A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). @@ -2018,7 +2018,7 @@ Valid operators for create and update depend on the type of the field you are se Segment conditions using "eq" or "ne" for email clicks and opens should provide a "field" of either *clicks.campaign_identifier* or *opens.campaign_identifier*. The condition value should be a string containing the id of a completed campaign. -Segments may contain multiple condtions, joined by an "and" or "or" in the "and_or" field. The first condition in the conditions list must have an empty "and_or", and subsequent conditions must all specify an "and_or". +Segments may contain multiple conditions, joined by an "and" or "or" in the "and_or" field. The first condition in the conditions list must have an empty "and_or", and subsequent conditions must all specify an "and_or". The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. @@ -2701,7 +2701,7 @@ This endpoint has a helper, check it out [here](https://github.com/sendgrid/send Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\")[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\")[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiving these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4961,7 +4961,7 @@ For more information about your user profile: **This endpoint allows you to retrieve the current credit balance for your account.** -Your monthly credit allotment limits the number of emails you may send before incurring overage charges. For more information about credits and billing, please visit our [Clssroom](https://sendgrid.com/docs/Classroom/Basics/Billing/billing_info_and_faqs.html). +Your monthly credit allotment limits the number of emails you may send before incurring overage charges. For more information about credits and billing, please visit our [Classroom](https://sendgrid.com/docs/Classroom/Basics/Billing/billing_info_and_faqs.html). ### GET /user/credits @@ -5453,7 +5453,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting **This endpoint allows you to retrieve all of your current inbound parse settings.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). ### GET /user/webhooks/parse/settings @@ -5476,7 +5476,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting **This endpoint allows you to update a specific inbound parse setting.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). ### PATCH /user/webhooks/parse/settings/{hostname} @@ -5500,7 +5500,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting **This endpoint allows you to retrieve a specific inbound parse setting.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). ### GET /user/webhooks/parse/settings/{hostname} @@ -5523,7 +5523,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting **This endpoint allows you to delete a specific inbound parse setting.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). ### DELETE /user/webhooks/parse/settings/{hostname} @@ -5544,9 +5544,9 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting ``` ## Retrieves Inbound Parse Webhook statistics. -**This endpoint allows you to retrieve the statistics for your Parse Webhook useage.** +**This endpoint allows you to retrieve the statistics for your Parse Webhook usage.** -SendGrid's Inbound Parse Webhook allows you to parse the contents and attachments of incomming emails. The Parse API can then POST the parsed emails to a URL that you specify. The Inbound Parse Webhook cannot parse messages greater than 20MB in size, including all attachments. +SendGrid's Inbound Parse Webhook allows you to parse the contents and attachments of incoming emails. The Parse API can then POST the parsed emails to a URL that you specify. The Inbound Parse Webhook cannot parse messages greater than 20MB in size, including all attachments. There are a number of pre-made integrations for the SendGrid Parse Webhook which make processing events easy. You can find these integrations in the [Library Index](https://sendgrid.com/docs/Integrate/libraries.html#-Webhook-Libraries). diff --git a/proposals/mail-helper-refactor.md b/proposals/mail-helper-refactor.md index b050491a..b06d2f1e 100644 --- a/proposals/mail-helper-refactor.md +++ b/proposals/mail-helper-refactor.md @@ -110,7 +110,7 @@ public class SendGridExample { tos, plainTextContent, htmlContent, - globalSubstition); // or globalSubstitutions + globalSubstitution); // or globalSubstitutions SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); try { From a74a8dfe24d0161db01d30211cf2a4efd8aeb2c4 Mon Sep 17 00:00:00 2001 From: Shashank Sharma Date: Sat, 21 Oct 2017 21:05:55 -0400 Subject: [PATCH 148/439] Making ReadMe/Doc sections more SEO Friendly --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 02725369..45abaabf 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,9 @@ We appreciate your continued support, thank you! # Table of Contents * [Installation](#installation) -* [Quick Start](#quick_start) +* [Quick Start](#quick-start) * [Usage](#usage) -* [Use Cases](#use_cases) +* [Use Cases](#use-cases) * [Announcements](#announcements) * [Roadmap](#roadmap) * [How to Contribute](#contribute) @@ -79,7 +79,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) - + # Quick Start ## Hello Email @@ -180,7 +180,7 @@ public class Example { - [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. - + # Use Cases [Examples of common API use cases](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md), such as how to send an email with a transactional template. @@ -204,10 +204,10 @@ We encourage contribution to our libraries (you might even score some nifty swag Quick links: -- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature_request) -- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit_a_bug_report) +- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) +- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) - [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#cla) -- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements_to_the_codebase) +- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) # Troubleshooting From ab346685994c72b46924501c4423358a34f5ce25 Mon Sep 17 00:00:00 2001 From: Shashank Sharma Date: Sat, 21 Oct 2017 21:09:52 -0400 Subject: [PATCH 149/439] Making README/Doc sections more SEO friendly --- CONTRIBUTING.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8cb8ea5c..8545e2f1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,13 +2,13 @@ Hello! Thank you for choosing to help contribute to one of the SendGrid open sou - [CLAs and CCLAs](#cla) - [Roadmap & Milestones](#roadmap) -- [Feature Request](#feature_request) -- [Submit a Bug Report](#submit_a_bug_report) -- [Improvements to the Codebase](#improvements_to_the_codebase) -- [Understanding the Code Base](#understanding_the_codebase) +- [Feature Request](#feature-request) +- [Submit a Bug Report](#submit-a-bug-report) +- [Improvements to the Codebase](#improvements-to-the-codebase) +- [Understanding the Code Base](#understanding-the-codebase) - [Testing](#testing) -- [Style Guidelines & Naming Conventions](#style_guidelines_and_naming_conventions) -- [Creating a Pull Request](#creating_a_pull_request) +- [Style Guidelines & Naming Conventions](#style-guidelines-and-naming-conventions) +- [Creating a Pull Request](#creating-a-pull-request) We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. @@ -26,7 +26,7 @@ When you create a Pull Request, after a few seconds, a comment will appear with There are a few ways to contribute, which we'll enumerate below: - + ## Feature Request If you'd like to make a feature request, please read this section. @@ -36,7 +36,7 @@ The GitHub issue tracker is the preferred channel for library feature requests, - Please **search for existing issues** in order to ensure we don't have duplicate bugs/feature requests. - Please be respectful and considerate of others when commenting on issues - + ## Submit a Bug Report Note: DO NOT include your credentials in ANY code examples, descriptions, or media you make public. @@ -53,7 +53,7 @@ Before you decide to create a new issue, please try the following: In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. - + ## Improvements to the Codebase We welcome direct contributions to the sendgrid-java code base. Thank you! @@ -105,7 +105,7 @@ Add the example you want to test to Example.java, including the headers at the t javac -classpath ../repo/com/sendgrid/4.1.1/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.1-jar.jar:. Example ``` - + ## Understanding the Code Base **/examples** @@ -149,7 +149,7 @@ For the purposes of contributing to this repo, please update the [`SendGridTest. ./gradlew test -i ``` - + ## Style Guidelines & Naming Conventions Generally, we follow the style guidelines as suggested by the official language. However, we ask that you conform to the styles that already exist in the library. If you wish to deviate, please explain your reasoning. @@ -158,7 +158,7 @@ Please run your code through: - [FindBugs](http://findbugs.sourceforge.net/) - [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](http://checkstyle.sourceforge.net/reports/google-java-style.html). -## Creating a Pull Request +## Creating a Pull Request 1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes: From bbf0d51a4b8cbf4c5565ca49fa8fa43bb6ee121d Mon Sep 17 00:00:00 2001 From: Shashank Sharma Date: Sat, 21 Oct 2017 21:14:17 -0400 Subject: [PATCH 150/439] Making README/Doc sections more SEO friendly --- USAGE.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/USAGE.md b/USAGE.md index b29616d7..c014d11d 100644 --- a/USAGE.md +++ b/USAGE.md @@ -22,9 +22,9 @@ public class Example { # Table of Contents -* [ACCESS SETTINGS](#access_settings) +* [ACCESS SETTINGS](#access-settings) * [ALERTS](#alerts) -* [API KEYS](#api_keys) +* [API KEYS](#api-keys) * [ASM](#asm) * [BROWSERS](#browsers) * [CAMPAIGNS](#campaigns) @@ -35,21 +35,21 @@ public class Example { * [GEO](#geo) * [IPS](#ips) * [MAIL](#mail) -* [MAIL SETTINGS](#mail_settings) -* [MAILBOX PROVIDERS](#mailbox_providers) -* [PARTNER SETTINGS](#partner_settings) +* [MAIL SETTINGS](#mail-settings) +* [MAILBOX PROVIDERS](#mailbox-providers) +* [PARTNER SETTINGS](#partner-settings) * [SCOPES](#scopes) * [SENDERS](#senders) * [STATS](#stats) * [SUBUSERS](#subusers) * [SUPPRESSION](#suppression) * [TEMPLATES](#templates) -* [TRACKING SETTINGS](#tracking_settings) +* [TRACKING SETTINGS](#tracking-settings) * [USER](#user) * [WHITELABEL](#whitelabel) - + # ACCESS SETTINGS ## Retrieve all recent access attempts @@ -353,7 +353,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. throw ex; } ``` - + # API KEYS ## Create API keys @@ -2710,7 +2710,7 @@ This endpoint has a helper, check it out [here](https://github.com/sendgrid/send throw ex; } ``` - + # MAIL SETTINGS ## Retrieve all mail settings @@ -3201,7 +3201,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th throw ex; } ``` - + # MAILBOX PROVIDERS ## Retrieve email statistics by mailbox provider. @@ -3235,7 +3235,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act throw ex; } ``` - + # PARTNER SETTINGS ## Returns a list of all partner settings. @@ -4675,7 +4675,7 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` - + # TRACKING SETTINGS ## Retrieve Tracking Settings From 8000a368731d596c76025023b9d1d6b9cd560d12 Mon Sep 17 00:00:00 2001 From: Shashank Sharma Date: Sat, 21 Oct 2017 21:15:24 -0400 Subject: [PATCH 151/439] Making README/Doc sections more SEO friendly --- USE_CASES.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/USE_CASES.md b/USE_CASES.md index 1bfb62f0..de1613f3 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -2,9 +2,9 @@ This documentation provides examples for specific use cases. Please [open an iss # Table of Contents -* [Transactional Templates](#transactional_templates) +* [Transactional Templates](#transactional-templates) - + # Transactional Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. @@ -98,4 +98,4 @@ public class Example { } } } -``` \ No newline at end of file +``` From ff37ee084ad4d907a5d63eec4a7720515cd899b0 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 21 Oct 2017 18:32:07 -0700 Subject: [PATCH 152/439] Update .travis.yml --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9986d9a1..4fc4dbee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,6 @@ matrix: - os: linux jdk: oraclejdk8 before_script: -- echo TRAVIS $TRAVIS -- echo MOCK_HOST $MOCK_HOST - "./scripts/startPrism.sh &" - sleep 10 before_install: From 5671dcaf42155265e85b5d8e39a666752f58b2ff Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sun, 22 Oct 2017 14:19:40 +0300 Subject: [PATCH 153/439] update readme - logo on separate line --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 82f67c59..2f8aed20 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ ![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + [![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) From f9b1b920b590e992bb2df201943ade47c65bf5df Mon Sep 17 00:00:00 2001 From: sccalabr Date: Sun, 22 Oct 2017 13:17:33 -0500 Subject: [PATCH 154/439] Addressing comments. --- src/main/java/com/sendgrid/SendGridAPI.java | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index d190675c..4f277cd7 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -13,17 +13,17 @@ public interface SendGridAPI { public void initializeSendGrid(String apiKey); /** - * Initializes SendGrid + * Returns the library version * * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - * @return + * @return the library version. */ public String getLibraryVersion(); /** * Gets the version. * - * @return + * @return returns the version. */ public String getVersion(); @@ -36,16 +36,16 @@ public interface SendGridAPI { /** * Gets the request headers. - * @return + * @return returns a map of request headers. */ public Map getRequestHeaders(); /** * Adds a request headers. * - * @param keythe key - * @param valuethe value - * @return + * @param key the key + * @param value the value + * @return returns a map of request headers. */ public Map addRequestHeader(String key, String value); @@ -53,14 +53,14 @@ public interface SendGridAPI { * Removes a request headers. * * @param key the key - * @return + * @return returns a map of request headers. */ public Map removeRequestHeader(String key); /** * Gets the host. * - * @return + * @return returns the host. */ public String getHost(); @@ -76,8 +76,8 @@ public interface SendGridAPI { * testing. * * @param request - * @return - * @throws IOException + * @return returns a response. + * @throws IOException in case of network or marshal error. */ public Response makeCall(Request request) throws IOException; @@ -86,7 +86,7 @@ public interface SendGridAPI { * * @param request * @return - * @throws IOException + * @throws IOException in case of network or marshal error. */ public Response api(Request request) throws IOException; } From 65ce199f4da67991eccfd948caf36d6e8d0b27f3 Mon Sep 17 00:00:00 2001 From: shra1cumar Date: Mon, 23 Oct 2017 14:54:54 +0530 Subject: [PATCH 155/439] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f8aed20..c20e01fb 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Version 3.X.X of this library provides full support for all SendGrid [Web API v3 This library represents the beginning of a new path for SendGrid. We want this library to be community driven and SendGrid led. We need your help to realize this goal. To help make sure we are building the right things in the right order, we ask that you create [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) or simply upvote or comment on existing issues or pull requests. -Please browse the rest of this README for further detail. +Please browse the rest of this README for further details. We appreciate your continued support, thank you! From ac1a990c7869e3fdb2a2a1a30ddff6b7a4623465 Mon Sep 17 00:00:00 2001 From: btrajkovski Date: Mon, 23 Oct 2017 18:32:47 +0200 Subject: [PATCH 156/439] Fix java package names Java packages were not corresponding to the actual location of classes, all packages were update to match class location. --- .../java/com/sendgrid/helpers/mail/Mail.java | 9 +---- .../sendgrid/helpers/mail/objects/ASM.java | 2 +- .../helpers/mail/objects/Attachments.java | 2 +- .../helpers/mail/objects/BccSettings.java | 2 +- .../mail/objects/ClickTrackingSetting.java | 2 +- .../helpers/mail/objects/Content.java | 2 +- .../sendgrid/helpers/mail/objects/Email.java | 2 +- .../helpers/mail/objects/FooterSetting.java | 2 +- .../mail/objects/GoogleAnalyticsSetting.java | 2 +- .../helpers/mail/objects/MailSettings.java | 38 +++++++++---------- .../mail/objects/OpenTrackingSetting.java | 2 +- .../helpers/mail/objects/Personalization.java | 2 +- .../helpers/mail/objects/Setting.java | 2 +- .../mail/objects/SpamCheckSetting.java | 2 +- .../objects/SubscriptionTrackingSetting.java | 2 +- .../mail/objects/TrackingSettings.java | 2 +- .../helpers/AttachmentBuilderTest.java | 2 +- .../java/com/sendgrid/helpers/MailTest.java | 5 ++- 18 files changed, 39 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index edf02a15..937b1e62 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -1,16 +1,11 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; - import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.databind.SerializationFeature; +import com.sendgrid.helpers.mail.objects.*; import java.io.IOException; import java.util.ArrayList; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java index 00763af7..c92a6243 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 059fc835..cb075ed5 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonIgnoreType; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index 37be0866..e1c2fa1b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index e901e086..7e40b57d 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index f6621ac9..81994296 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java index 5642e345..a1b22212 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index 1428b66b..ee033101 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index eac91899..0c6cf0f3 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index 1210eb08..76b21502 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -1,12 +1,12 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; /** - * An object representing a collection of different mail - * settings that you can use to specify how you would + * An object representing a collection of different mail + * settings that you can use to specify how you would * like this email to be handled. */ @JsonInclude(Include.NON_DEFAULT) @@ -25,7 +25,7 @@ public class MailSettings { public BccSettings getBccSettings() { return bccSettings; } - + /** * Set the BCC settings. * @param bccSettings the BCC settings. @@ -33,12 +33,12 @@ public BccSettings getBccSettings() { public void setBccSettings(BccSettings bccSettings) { this.bccSettings = bccSettings; } - + /** - * A setting that allows you to bypass all unsubscribe - * groups and suppressions to ensure that the email is - * delivered to every single recipient. This should only - * be used in emergencies when it is absolutely necessary + * A setting that allows you to bypass all unsubscribe + * groups and suppressions to ensure that the email is + * delivered to every single recipient. This should only + * be used in emergencies when it is absolutely necessary * that every recipient receives your email. * @return the bypass list setting. */ @@ -54,7 +54,7 @@ public Setting getBypassListManagement() { public void setBypassListManagement(Setting bypassListManagement) { this.bypassListManagement = bypassListManagement; } - + /** * Get the the footer settings that you would like included on every email. * @return the setting. @@ -63,7 +63,7 @@ public void setBypassListManagement(Setting bypassListManagement) { public FooterSetting getFooterSetting() { return footerSetting; } - + /** * Set the the footer settings that you would like included on every email. * @param footerSetting the setting. @@ -71,9 +71,9 @@ public FooterSetting getFooterSetting() { public void setFooterSetting(FooterSetting footerSetting) { this.footerSetting = footerSetting; } - + /** - * Get sandbox mode. This allows you to send a test email to + * Get sandbox mode. This allows you to send a test email to * ensure that your request body is valid and formatted correctly. * @return the sandbox mode setting. */ @@ -81,18 +81,18 @@ public void setFooterSetting(FooterSetting footerSetting) { public Setting getSandBoxMode() { return sandBoxMode; } - + /** - * Set sandbox mode. + * Set sandbox mode. * @param sandBoxMode the sandbox mode setting. */ @JsonProperty("sandbox_mode") public void setSandboxMode(Setting sandBoxMode) { this.sandBoxMode = sandBoxMode; } - + /** - * Get the spam check setting. This allows you to test the + * Get the spam check setting. This allows you to test the * content of your email for spam. * @return the spam check setting. */ @@ -100,9 +100,9 @@ public void setSandboxMode(Setting sandBoxMode) { public SpamCheckSetting getSpamCheck() { return spamCheckSetting; } - + /** - * Set the spam check setting. This allows you to test the + * Set the spam check setting. This allows you to test the * content of your email for spam. * @param spamCheckSetting the spam check setting. */ diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index deba6d33..a0dab662 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 83bd9c56..67226059 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 20b8d64e..c6157711 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index dbd43955..95f425b9 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index 304eb916..1280d440 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java index 0e2a47bb..72be0747 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java b/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java index 824e8145..3ea3f379 100644 --- a/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java +++ b/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java @@ -1,6 +1,6 @@ package com.sendgrid.helpers; -import com.sendgrid.Attachments; +import com.sendgrid.helpers.mail.objects.Attachments; import org.apache.commons.codec.binary.Base64; import org.junit.Assert; import org.junit.Test; diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index e4eedd58..9476a1d5 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -1,7 +1,8 @@ -package com.sendgrid; +package com.sendgrid.helpers; +import com.sendgrid.helpers.mail.Mail; +import com.sendgrid.helpers.mail.objects.*; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import java.io.IOException; From a0a51afa4bb675fa706935843860a8e71ca8a901 Mon Sep 17 00:00:00 2001 From: Ajitesh Rai Date: Mon, 23 Oct 2017 23:36:08 +0530 Subject: [PATCH 157/439] Fix a typo Removed duplicate 'the'. --- USAGE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/USAGE.md b/USAGE.md index 7d32bc39..a254fd98 100644 --- a/USAGE.md +++ b/USAGE.md @@ -5672,7 +5672,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) @@ -5704,7 +5704,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) @@ -5813,7 +5813,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) From bd28104bf69f639d6e0329d99f72407a8e72827b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Sz=C3=A9les?= Date: Mon, 23 Oct 2017 20:14:11 +0200 Subject: [PATCH 158/439] Remove redundant word 'the' from USAGE.md. Change the sentence 'The the parent may then associate the whitelabel via the subuser management tools.' to 'The parent may then associate the whitelabel via the subuser management tools.'. --- USAGE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/USAGE.md b/USAGE.md index 7d32bc39..a254fd98 100644 --- a/USAGE.md +++ b/USAGE.md @@ -5672,7 +5672,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) @@ -5704,7 +5704,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) @@ -5813,7 +5813,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) From 22aee8718c90caa87fbc55eb62471574f4227378 Mon Sep 17 00:00:00 2001 From: Pooja Bharadwaj Date: Tue, 24 Oct 2017 17:40:20 +0530 Subject: [PATCH 159/439] correction of typo in USAGE.md replaced "visible by recipient" by "visible to recipient" --- USAGE.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/USAGE.md b/USAGE.md index a254fd98..cf25b2c6 100644 --- a/USAGE.md +++ b/USAGE.md @@ -533,7 +533,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. -The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. +The **name** and **description** of the unsubscribe group will be visible to recipients when they are managing their subscriptions. Each user can create up to 25 different suppression groups. @@ -589,7 +589,7 @@ Suppression groups, or [unsubscribe groups](https://sendgrid.com/docs/API_Refere Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. -The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. +The **name** and **description** of the unsubscribe group will be visible to recipients when they are managing their subscriptions. Each user can create up to 25 different suppression groups. @@ -617,7 +617,7 @@ Each user can create up to 25 different suppression groups. Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. -The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. +The **name** and **description** of the unsubscribe group will be visible to recipients when they are managing their subscriptions. Each user can create up to 25 different suppression groups. @@ -646,7 +646,7 @@ You can only delete groups that have not been attached to sent mail in the last Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. -The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. +The **name** and **description** of the unsubscribe group will be visible to recipients when they are managing their subscriptions. Each user can create up to 25 different suppression groups. From e6b838a9c0d1a0f55cb8cb6b27af94d81e83c1a4 Mon Sep 17 00:00:00 2001 From: Nishith Shah Date: Fri, 27 Oct 2017 01:56:19 +0530 Subject: [PATCH 160/439] Create PULL_REQUEST_TEMPLATE Add a template for describing the change(s) being done. --- .github/PULL_REQUEST_TEMPLATE | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE new file mode 100644 index 00000000..e4059635 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE @@ -0,0 +1,19 @@ + +Closes: #[Issue number] + +**Description of the change**: + +If you have questions, please send an email [Sendgrid](mailto:dx@sendgrid.com), or file a Github Issue in this repository. + From b9ddb85b2e2c5f4856d2bc8eed9215af7715f66d Mon Sep 17 00:00:00 2001 From: Thiago Barbato Date: Thu, 26 Oct 2017 23:12:06 -0200 Subject: [PATCH 161/439] Add .env_sample file --- .env_sample | 1 + .gitignore | 3 ++- README.md | 8 +++++--- 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 .env_sample diff --git a/.env_sample b/.env_sample new file mode 100644 index 00000000..937e999d --- /dev/null +++ b/.env_sample @@ -0,0 +1 @@ +export SENDGRID_API_KEY='' diff --git a/.gitignore b/.gitignore index 009d149a..2c5dd118 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ target examples/Example.java .settings .classpath -.project \ No newline at end of file +.project +.env diff --git a/README.md b/README.md index 9155acd6..009eeb0b 100644 --- a/README.md +++ b/README.md @@ -44,11 +44,13 @@ We appreciate your continued support, thank you! Update the development environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys), for example: +1. Copy the sample environment file to a new file ```bash -echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env -echo "sendgrid.env" >> .gitignore -source ./sendgrid.env +cp .env_sample .env ``` +2. Edit the new `.env` to add your API key +3. Source the `.env` file to set rhe variable in the current session + ## Install Package Choose your installation method - Maven w/ Gradle (recommended), Maven or Jar file. From 2f198a23eb62af443f4dbe3fa471e5573c02cdca Mon Sep 17 00:00:00 2001 From: teisena Date: Sat, 28 Oct 2017 02:14:57 +0300 Subject: [PATCH 162/439] split examples by endpoint --- examples/contactdb/contactdb.java | 717 ------------------------- examples/contactdb/customfields.java | 97 ++++ examples/contactdb/lists.java | 240 +++++++++ examples/contactdb/recipients.java | 305 +++++++++++ examples/contactdb/reservedfields.java | 30 ++ examples/contactdb/segments.java | 147 +++++ 6 files changed, 819 insertions(+), 717 deletions(-) delete mode 100644 examples/contactdb/contactdb.java create mode 100644 examples/contactdb/customfields.java create mode 100644 examples/contactdb/lists.java create mode 100644 examples/contactdb/recipients.java create mode 100644 examples/contactdb/reservedfields.java create mode 100644 examples/contactdb/segments.java diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java deleted file mode 100644 index 1f971c8f..00000000 --- a/examples/contactdb/contactdb.java +++ /dev/null @@ -1,717 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Create a Custom Field -// POST /contactdb/custom_fields - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/custom_fields"); - request.setBody("{\"type\":\"text\",\"name\":\"pet\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all custom fields -// GET /contactdb/custom_fields - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/custom_fields"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a Custom Field -// GET /contactdb/custom_fields/{custom_field_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Custom Field -// DELETE /contactdb/custom_fields/{custom_field_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create a List -// POST /contactdb/lists - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists"); - request.setBody("{\"name\":\"your list name\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all lists -// GET /contactdb/lists - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/lists"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete Multiple lists -// DELETE /contactdb/lists - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/lists"); - request.setBody("[1,2,3,4]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a List -// PATCH /contactdb/lists/{list_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("contactdb/lists/{list_id}"); - request.setBody("{\"name\":\"newlistname\"}"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a single list -// GET /contactdb/lists/{list_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/lists/{list_id}"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a List -// DELETE /contactdb/lists/{list_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/lists/{list_id}"); - request.addQueryParam("delete_contacts", "true"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add Multiple Recipients to a List -// POST /contactdb/lists/{list_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists/{list_id}/recipients"); - request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all recipients on a List -// GET /contactdb/lists/{list_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/lists/{list_id}/recipients"); - request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add a Single Recipient to a List -// POST /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Single Recipient from a Single List -// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - request.addQueryParam("recipient_id", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update Recipient -// PATCH /contactdb/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("contactdb/recipients"); - request.setBody("[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add recipients -// POST /contactdb/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/recipients"); - request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve recipients -// GET /contactdb/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients"); - request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete Recipient -// DELETE /contactdb/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/recipients"); - request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve the count of billable recipients -// GET /contactdb/recipients/billable_count - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients/billable_count"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a Count of Recipients -// GET /contactdb/recipients/count - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients/count"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve recipients matching search criteria -// GET /contactdb/recipients/search - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients/search"); - request.addQueryParam("{field_name}", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a single recipient -// GET /contactdb/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients/{recipient_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Recipient -// DELETE /contactdb/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/recipients/{recipient_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve the lists that a recipient is on -// GET /contactdb/recipients/{recipient_id}/lists - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients/{recipient_id}/lists"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve reserved fields -// GET /contactdb/reserved_fields - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/reserved_fields"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create a Segment -// POST /contactdb/segments - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/segments"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all segments -// GET /contactdb/segments - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/segments"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a segment -// PATCH /contactdb/segments/{segment_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("contactdb/segments/{segment_id}"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); - request.addQueryParam("segment_id", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a segment -// GET /contactdb/segments/{segment_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/segments/{segment_id}"); - request.addQueryParam("segment_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a segment -// DELETE /contactdb/segments/{segment_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/segments/{segment_id}"); - request.addQueryParam("delete_contacts", "true"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve recipients on a segment -// GET /contactdb/segments/{segment_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/segments/{segment_id}/recipients"); - request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - diff --git a/examples/contactdb/customfields.java b/examples/contactdb/customfields.java new file mode 100644 index 00000000..e4ce5c58 --- /dev/null +++ b/examples/contactdb/customfields.java @@ -0,0 +1,97 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a Custom Field +// POST /contactdb/custom_fields + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/custom_fields"); + request.setBody("{\"type\":\"text\",\"name\":\"pet\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all custom fields +// GET /contactdb/custom_fields + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/custom_fields"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a Custom Field +// GET /contactdb/custom_fields/{custom_field_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Custom Field +// DELETE /contactdb/custom_fields/{custom_field_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/contactdb/lists.java b/examples/contactdb/lists.java new file mode 100644 index 00000000..534a739c --- /dev/null +++ b/examples/contactdb/lists.java @@ -0,0 +1,240 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a List +// POST /contactdb/lists + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists"); + request.setBody("{\"name\":\"your list name\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all lists +// GET /contactdb/lists + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete Multiple lists +// DELETE /contactdb/lists + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists"); + request.setBody("[1,2,3,4]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update a List +// PATCH /contactdb/lists/{list_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/lists/{list_id}"); + request.setBody("{\"name\":\"newlistname\"}"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a single list +// GET /contactdb/lists/{list_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a List +// DELETE /contactdb/lists/{list_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}"); + request.addQueryParam("delete_contacts", "true"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add Multiple Recipients to a List +// POST /contactdb/lists/{list_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all recipients on a List +// GET /contactdb/lists/{list_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add a Single Recipient to a List +// POST /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Single Recipient from a Single List +// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + request.addQueryParam("recipient_id", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/contactdb/recipients.java b/examples/contactdb/recipients.java new file mode 100644 index 00000000..255a8e97 --- /dev/null +++ b/examples/contactdb/recipients.java @@ -0,0 +1,305 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all recipients on a List +// GET /contactdb/lists/{list_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add a Single Recipient to a List +// POST /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Single Recipient from a Single List +// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + request.addQueryParam("recipient_id", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update Recipient +// PATCH /contactdb/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/recipients"); + request.setBody("[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add recipients +// POST /contactdb/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/recipients"); + request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve recipients +// GET /contactdb/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete Recipient +// DELETE /contactdb/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve the count of billable recipients +// GET /contactdb/recipients/billable_count + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/billable_count"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a Count of Recipients +// GET /contactdb/recipients/count + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/count"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve recipients matching search criteria +// GET /contactdb/recipients/search + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/search"); + request.addQueryParam("{field_name}", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a single recipient +// GET /contactdb/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/{recipient_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Recipient +// DELETE /contactdb/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/recipients/{recipient_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve the lists that a recipient is on +// GET /contactdb/recipients/{recipient_id}/lists + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/{recipient_id}/lists"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/contactdb/reservedfields.java b/examples/contactdb/reservedfields.java new file mode 100644 index 00000000..e9ceafa9 --- /dev/null +++ b/examples/contactdb/reservedfields.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve reserved fields +// GET /contactdb/reserved_fields + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/reserved_fields"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/contactdb/segments.java b/examples/contactdb/segments.java new file mode 100644 index 00000000..84c60027 --- /dev/null +++ b/examples/contactdb/segments.java @@ -0,0 +1,147 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a Segment +// POST /contactdb/segments + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/segments"); + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all segments +// GET /contactdb/segments + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update a segment +// PATCH /contactdb/segments/{segment_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); + request.addQueryParam("segment_id", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a segment +// GET /contactdb/segments/{segment_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.addQueryParam("segment_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a segment +// DELETE /contactdb/segments/{segment_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.addQueryParam("delete_contacts", "true"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve recipients on a segment +// GET /contactdb/segments/{segment_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments/{segment_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} From 711217924795279c26787302ea6d3d1313e03208 Mon Sep 17 00:00:00 2001 From: teisena Date: Sat, 28 Oct 2017 02:21:13 +0300 Subject: [PATCH 163/439] split lists/recipients endpoint --- examples/contactdb/listrecipients.java | 102 +++++++++++++++++++++++++ examples/contactdb/lists.java | 94 ----------------------- examples/contactdb/recipients.java | 71 ----------------- 3 files changed, 102 insertions(+), 165 deletions(-) create mode 100644 examples/contactdb/listrecipients.java diff --git a/examples/contactdb/listrecipients.java b/examples/contactdb/listrecipients.java new file mode 100644 index 00000000..cfe621e7 --- /dev/null +++ b/examples/contactdb/listrecipients.java @@ -0,0 +1,102 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Add Multiple Recipients to a List +// POST /contactdb/lists/{list_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all recipients on a List +// GET /contactdb/lists/{list_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add a Single Recipient to a List +// POST /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Single Recipient from a Single List +// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + request.addQueryParam("recipient_id", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/contactdb/lists.java b/examples/contactdb/lists.java index 534a739c..1e55fd29 100644 --- a/examples/contactdb/lists.java +++ b/examples/contactdb/lists.java @@ -144,97 +144,3 @@ public static void main(String[] args) throws IOException { } } } - -////////////////////////////////////////////////////////////////// -// Add Multiple Recipients to a List -// POST /contactdb/lists/{list_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists/{list_id}/recipients"); - request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all recipients on a List -// GET /contactdb/lists/{list_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/lists/{list_id}/recipients"); - request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add a Single Recipient to a List -// POST /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Single Recipient from a Single List -// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - request.addQueryParam("recipient_id", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} diff --git a/examples/contactdb/recipients.java b/examples/contactdb/recipients.java index 255a8e97..ebba8d90 100644 --- a/examples/contactdb/recipients.java +++ b/examples/contactdb/recipients.java @@ -7,77 +7,6 @@ import java.util.HashMap; import java.util.Map; -////////////////////////////////////////////////////////////////// -// Retrieve all recipients on a List -// GET /contactdb/lists/{list_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/lists/{list_id}/recipients"); - request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add a Single Recipient to a List -// POST /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Single Recipient from a Single List -// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - request.addQueryParam("recipient_id", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - ////////////////////////////////////////////////////////////////// // Update Recipient // PATCH /contactdb/recipients From 1ca8320d332ec293c9f87e823ed55e24a5a0c541 Mon Sep 17 00:00:00 2001 From: teisena Date: Sat, 28 Oct 2017 02:43:28 +0300 Subject: [PATCH 164/439] split whitelabel examples by endpoint --- examples/whitelabel/domains.java | 281 +++++++++++++ examples/whitelabel/ips.java | 122 ++++++ examples/whitelabel/links.java | 238 +++++++++++ examples/whitelabel/whitelabel.java | 625 ---------------------------- 4 files changed, 641 insertions(+), 625 deletions(-) create mode 100644 examples/whitelabel/domains.java create mode 100644 examples/whitelabel/ips.java create mode 100644 examples/whitelabel/links.java delete mode 100644 examples/whitelabel/whitelabel.java diff --git a/examples/whitelabel/domains.java b/examples/whitelabel/domains.java new file mode 100644 index 00000000..26a0d0a2 --- /dev/null +++ b/examples/whitelabel/domains.java @@ -0,0 +1,281 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a domain whitelabel. +// POST /whitelabel/domains + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// List all domain whitelabels. +// GET /whitelabel/domains + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("domain", "test_string"); + request.addQueryParam("exclude_subusers", "true"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Get the default domain whitelabel. +// GET /whitelabel/domains/default + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/default"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// List the domain whitelabel associated with the given user. +// GET /whitelabel/domains/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/subuser"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Disassociate a domain whitelabel from a given user. +// DELETE /whitelabel/domains/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/subuser"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update a domain whitelabel. +// PATCH /whitelabel/domains/{domain_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setBody("{\"default\":false,\"custom_spf\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a domain whitelabel. +// GET /whitelabel/domains/{domain_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/{domain_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a domain whitelabel. +// DELETE /whitelabel/domains/{domain_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{domain_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Associate a domain whitelabel with a given user. +// POST /whitelabel/domains/{domain_id}/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add an IP to a domain whitelabel. +// POST /whitelabel/domains/{id}/ips + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/ips"); + request.setBody("{\"ip\":\"192.168.0.1\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Remove an IP from a domain whitelabel. +// DELETE /whitelabel/domains/{id}/ips/{ip} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Validate a domain whitelabel. +// POST /whitelabel/domains/{id}/validate + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/validate"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/whitelabel/ips.java b/examples/whitelabel/ips.java new file mode 100644 index 00000000..54cb2af3 --- /dev/null +++ b/examples/whitelabel/ips.java @@ -0,0 +1,122 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create an IP whitelabel +// POST /whitelabel/ips + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips"); + request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all IP whitelabels +// GET /whitelabel/ips + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve an IP whitelabel +// GET /whitelabel/ips/{id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips/{id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete an IP whitelabel +// DELETE /whitelabel/ips/{id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/ips/{id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Validate an IP whitelabel +// POST /whitelabel/ips/{id}/validate + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips/{id}/validate"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/whitelabel/links.java b/examples/whitelabel/links.java new file mode 100644 index 00000000..ca7218ff --- /dev/null +++ b/examples/whitelabel/links.java @@ -0,0 +1,238 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a Link Whitelabel +// POST /whitelabel/links + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links"); + request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all link whitelabels +// GET /whitelabel/links + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links"); + request.addQueryParam("limit", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a Default Link Whitelabel +// GET /whitelabel/links/default + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/default"); + request.addQueryParam("domain", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve Associated Link Whitelabel +// GET /whitelabel/links/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Disassociate a Link Whitelabel +// DELETE /whitelabel/links/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update a Link Whitelabel +// PATCH /whitelabel/links/{id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/links/{id}"); + request.setBody("{\"default\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a Link Whitelabel +// GET /whitelabel/links/{id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/{id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Link Whitelabel +// DELETE /whitelabel/links/{id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/{id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Validate a Link Whitelabel +// POST /whitelabel/links/{id}/validate + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{id}/validate"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Associate a Link Whitelabel +// POST /whitelabel/links/{link_id}/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{link_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java deleted file mode 100644 index 4c668de5..00000000 --- a/examples/whitelabel/whitelabel.java +++ /dev/null @@ -1,625 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Create a domain whitelabel. -// POST /whitelabel/domains - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// List all domain whitelabels. -// GET /whitelabel/domains - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains"); - request.addQueryParam("username", "test_string"); - request.addQueryParam("domain", "test_string"); - request.addQueryParam("exclude_subusers", "true"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Get the default domain whitelabel. -// GET /whitelabel/domains/default - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/default"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// List the domain whitelabel associated with the given user. -// GET /whitelabel/domains/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/subuser"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Disassociate a domain whitelabel from a given user. -// DELETE /whitelabel/domains/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/subuser"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a domain whitelabel. -// PATCH /whitelabel/domains/{domain_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("whitelabel/domains/{domain_id}"); - request.setBody("{\"default\":false,\"custom_spf\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a domain whitelabel. -// GET /whitelabel/domains/{domain_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/{domain_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a domain whitelabel. -// DELETE /whitelabel/domains/{domain_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/{domain_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Associate a domain whitelabel with a given user. -// POST /whitelabel/domains/{domain_id}/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); - request.setBody("{\"username\":\"jane@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add an IP to a domain whitelabel. -// POST /whitelabel/domains/{id}/ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{id}/ips"); - request.setBody("{\"ip\":\"192.168.0.1\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Remove an IP from a domain whitelabel. -// DELETE /whitelabel/domains/{id}/ips/{ip} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Validate a domain whitelabel. -// POST /whitelabel/domains/{id}/validate - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{id}/validate"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create an IP whitelabel -// POST /whitelabel/ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/ips"); - request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all IP whitelabels -// GET /whitelabel/ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/ips"); - request.addQueryParam("ip", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve an IP whitelabel -// GET /whitelabel/ips/{id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/ips/{id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete an IP whitelabel -// DELETE /whitelabel/ips/{id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/ips/{id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Validate an IP whitelabel -// POST /whitelabel/ips/{id}/validate - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/ips/{id}/validate"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create a Link Whitelabel -// POST /whitelabel/links - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links"); - request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all link whitelabels -// GET /whitelabel/links - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links"); - request.addQueryParam("limit", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a Default Link Whitelabel -// GET /whitelabel/links/default - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/default"); - request.addQueryParam("domain", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve Associated Link Whitelabel -// GET /whitelabel/links/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/subuser"); - request.addQueryParam("username", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Disassociate a Link Whitelabel -// DELETE /whitelabel/links/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/links/subuser"); - request.addQueryParam("username", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a Link Whitelabel -// PATCH /whitelabel/links/{id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("whitelabel/links/{id}"); - request.setBody("{\"default\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a Link Whitelabel -// GET /whitelabel/links/{id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/{id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Link Whitelabel -// DELETE /whitelabel/links/{id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/links/{id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Validate a Link Whitelabel -// POST /whitelabel/links/{id}/validate - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links/{id}/validate"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Associate a Link Whitelabel -// POST /whitelabel/links/{link_id}/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links/{link_id}/subuser"); - request.setBody("{\"username\":\"jane@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From 61de103f6df7b786bf477e519e96c90767ccf70a Mon Sep 17 00:00:00 2001 From: Luan Cestari Date: Fri, 27 Oct 2017 22:44:41 -0200 Subject: [PATCH 165/439] [issue#336] Possible fix the duplciated code --- .../java/com/sendgrid/helpers/mail/Mail.java | 71 ++++++++----------- 1 file changed, 29 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index edf02a15..034e768c 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -200,12 +200,7 @@ public List getPersonalization() { * @param personalization a personalization. */ public void addPersonalization(Personalization personalization) { - if (this.personalization == null) { - this.personalization = new ArrayList(); - this.personalization.add(personalization); - } else { - this.personalization.add(personalization); - } + this.personalization = addToList(personalization, this.personalization); } /** @@ -226,12 +221,7 @@ public void addContent(Content content) { Content newContent = new Content(); newContent.setType(content.getType()); newContent.setValue(content.getValue()); - if (this.content == null) { - this.content = new ArrayList(); - this.content.add(newContent); - } else { - this.content.add(newContent); - } + this.content = addToList(newContent, this.content); } /** @@ -255,12 +245,7 @@ public void addAttachments(Attachments attachments) { newAttachment.setFilename(attachments.getFilename()); newAttachment.setDisposition(attachments.getDisposition()); newAttachment.setContentId(attachments.getContentId()); - if (this.attachments == null) { - this.attachments = new ArrayList(); - this.attachments.add(newAttachment); - } else { - this.attachments.add(newAttachment); - } + this.attachments = addToList(newAttachment, this.attachments); } /** @@ -296,12 +281,7 @@ public Map getSections() { * @param value the section's value. */ public void addSection(String key, String value) { - if (sections == null) { - sections = new HashMap(); - sections.put(key, value); - } else { - sections.put(key, value); - } + this.sections = addToMap(key, value, this.sections); } /** @@ -320,12 +300,7 @@ public Map getHeaders() { * @param value the header's value. */ public void addHeader(String key, String value) { - if (headers == null) { - headers = new HashMap(); - headers.put(key, value); - } else { - headers.put(key, value); - } + this.headers = addToMap(key, value, this.headers); } /** @@ -343,12 +318,7 @@ public List getCategories() { * @param category the category. */ public void addCategory(String category) { - if (categories == null) { - categories = new ArrayList(); - categories.add(category); - } else { - categories.add(category); - } + this.categories = addToList(category, this.categories); } /** @@ -367,12 +337,7 @@ public Map getCustomArgs() { * @param value the argument's value. */ public void addCustomArg(String key, String value) { - if (customArgs == null) { - customArgs = new HashMap(); - customArgs.put(key, value); - } else { - customArgs.put(key, value); - } + this.customArgs = addToMap(key, value, this.customArgs); } /** @@ -504,4 +469,26 @@ public String buildPretty() throws IOException { throw ex; } } + + private List addToList(T element, List defaultList) { + if (defaultList != null) { + defaultList.add(element); + return defaultList; + } else { + List list = new ArrayList(); + list.add(element); + return list; + } + } + + private Map addToMap(K key, V value, Map defaultMap) { + if (defaultMap != null) { + defaultMap.put(key, value); + return defaultMap; + } else { + Map map = new HashMap(); + map.put(key, value); + return map; + } + } } From 7cb6fb1d03e16fa24337159f75ec4e52d73df1f3 Mon Sep 17 00:00:00 2001 From: Luan Cestari Date: Fri, 27 Oct 2017 22:50:37 -0200 Subject: [PATCH 166/439] [issue#336] Fix a generic type mismatch --- src/main/java/com/sendgrid/helpers/mail/Mail.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index 034e768c..a1af2c2b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -486,7 +486,7 @@ private Map addToMap(K key, V value, Map defaultMap) { defaultMap.put(key, value); return defaultMap; } else { - Map map = new HashMap(); + Map map = new HashMap(); map.put(key, value); return map; } From aaa28b33bf49c22a3ac3d121b4a530f93d90f855 Mon Sep 17 00:00:00 2001 From: Luan Cestari Date: Fri, 27 Oct 2017 22:53:43 -0200 Subject: [PATCH 167/439] [issue#336] Fix a generic type mismatch --- src/main/java/com/sendgrid/helpers/mail/Mail.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index a1af2c2b..b34d7294 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -481,7 +481,7 @@ private List addToList(T element, List defaultList) { } } - private Map addToMap(K key, V value, Map defaultMap) { + private Map addToMap(K key, V value, Map defaultMap) { if (defaultMap != null) { defaultMap.put(key, value); return defaultMap; From dc40bc981ae458184cf27d30b1b3dab8f1295d06 Mon Sep 17 00:00:00 2001 From: sccalabr Date: Fri, 27 Oct 2017 20:15:10 -0500 Subject: [PATCH 168/439] Addressing comments. --- src/main/java/com/sendgrid/SendGridAPI.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index 4f277cd7..32998459 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -75,7 +75,7 @@ public interface SendGridAPI { * Class makeCall makes the call to the SendGrid API, override this method for * testing. * - * @param request + * @param request the request * @return returns a response. * @throws IOException in case of network or marshal error. */ @@ -84,8 +84,8 @@ public interface SendGridAPI { /** * Class api sets up the request to the SendGrid API, this is main interface. * - * @param request - * @return + * @param request the request + * @return returns a response. * @throws IOException in case of network or marshal error. */ public Response api(Request request) throws IOException; From 1844839842351239990442d9ced274311660884a Mon Sep 17 00:00:00 2001 From: Raja Sekhar Karanam Date: Sat, 28 Oct 2017 15:59:04 +0530 Subject: [PATCH 169/439] Update CONTRIBUTING.md While I was reading the CONTRIBUTING section to learn how to contribute, I stumbled upon these broken links and typos. Hope this helps! --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c818c473..8c70abe1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -129,7 +129,7 @@ All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tr For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. -1. Download [prism](https://stoplight.io/prism/) for your platform ([Mac OS X](https://github.com/stoplightio/prism/releases/download/v0.1.5/prism_darwin_amd64)) and save the binary to the sendgrid-ruby directory (or any directory you would like. The sendgrid-ruby directory is chosen mostly for convenience.) +1. Download [prism](http://stoplight.io/platform/prism/) for your platform ([Mac OS X](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_darwin_amd64), [Linux](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_linux_amd64), [Windows](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_windows_amd64.exe)) and save the binary to the sendgrid-java directory (or any directory you would like. The sendgrid-java directory is chosen mostly for convenience.) 1. Add execute permissions From ccad505444c9da3df3c8dd8848c8d020242b684d Mon Sep 17 00:00:00 2001 From: "Julian J. Maurer" Date: Sat, 28 Oct 2017 16:37:46 +0200 Subject: [PATCH 170/439] Fix for issue #335 Created seperate files for each example --- examples/ips/README.md | 5 + examples/ips/RetrieveAllIPs.java | 34 +++ examples/ips/addiptowarmup.java | 33 +++ examples/ips/addtopool.java | 32 +++ examples/ips/createpool.java | 32 +++ examples/ips/deletepool.java | 31 +++ examples/ips/ips.java | 326 ------------------------- examples/ips/removefromwarmup.java | 32 +++ examples/ips/removeipfrompool.java | 31 +++ examples/ips/retrieveallpools.java | 30 +++ examples/ips/retrieveassignedips.java | 31 +++ examples/ips/retrieveipsinpool.java | 31 +++ examples/ips/retrieveipsinwarmup.java | 32 +++ examples/ips/retrievepoolsforip.java | 33 +++ examples/ips/retrievewarmupstatus.java | 32 +++ examples/ips/updatepoolname.java | 32 +++ 16 files changed, 451 insertions(+), 326 deletions(-) create mode 100644 examples/ips/README.md create mode 100644 examples/ips/RetrieveAllIPs.java create mode 100644 examples/ips/addiptowarmup.java create mode 100644 examples/ips/addtopool.java create mode 100644 examples/ips/createpool.java create mode 100644 examples/ips/deletepool.java delete mode 100644 examples/ips/ips.java create mode 100644 examples/ips/removefromwarmup.java create mode 100644 examples/ips/removeipfrompool.java create mode 100644 examples/ips/retrieveallpools.java create mode 100644 examples/ips/retrieveassignedips.java create mode 100644 examples/ips/retrieveipsinpool.java create mode 100644 examples/ips/retrieveipsinwarmup.java create mode 100644 examples/ips/retrievepoolsforip.java create mode 100644 examples/ips/retrievewarmupstatus.java create mode 100644 examples/ips/updatepoolname.java diff --git a/examples/ips/README.md b/examples/ips/README.md new file mode 100644 index 00000000..e4358848 --- /dev/null +++ b/examples/ips/README.md @@ -0,0 +1,5 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + +This folder contains various examples on using the IPs endpoint of SendGrid with Java: + +* [Retrieve all IP addresses (GET /ips)](retrieveallips.java) \ No newline at end of file diff --git a/examples/ips/RetrieveAllIPs.java b/examples/ips/RetrieveAllIPs.java new file mode 100644 index 00000000..14845939 --- /dev/null +++ b/examples/ips/RetrieveAllIPs.java @@ -0,0 +1,34 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + + +////////////////////////////////////////////////////////////////// +// Retrieve all IP addresses +// GET /ips + + +public class RetrieveAllIPs { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("exclude_whitelabels", "true"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/addiptowarmup.java b/examples/ips/addiptowarmup.java new file mode 100644 index 00000000..89ebaad1 --- /dev/null +++ b/examples/ips/addiptowarmup.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + + +////////////////////////////////////////////////////////////////// +// Add an IP to warmup +// POST /ips/warmup + + +public class AddIPToWarmup { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("ips/warmup"); + request.setBody("{\"ip\":\"0.0.0.0\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/addtopool.java b/examples/ips/addtopool.java new file mode 100644 index 00000000..01e6b16b --- /dev/null +++ b/examples/ips/addtopool.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Add an IP address to a pool +// POST /ips/pools/{pool_name}/ips + + +public class AddIPToPool { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("ips/pools/{pool_name}/ips"); + request.setBody("{\"ip\":\"0.0.0.0\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/createpool.java b/examples/ips/createpool.java new file mode 100644 index 00000000..c91d82f0 --- /dev/null +++ b/examples/ips/createpool.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Create an IP pool. +// POST /ips/pools + + +public class CreateIPPool { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("ips/pools"); + request.setBody("{\"name\":\"marketing\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/deletepool.java b/examples/ips/deletepool.java new file mode 100644 index 00000000..51c50249 --- /dev/null +++ b/examples/ips/deletepool.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Delete an IP pool. +// DELETE /ips/pools/{pool_name} + + +public class DeletePool { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("ips/pools/{pool_name}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/ips.java b/examples/ips/ips.java deleted file mode 100644 index 55c97644..00000000 --- a/examples/ips/ips.java +++ /dev/null @@ -1,326 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Retrieve all IP addresses -// GET /ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips"); - request.addQueryParam("subuser", "test_string"); - request.addQueryParam("ip", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("exclude_whitelabels", "true"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all assigned IPs -// GET /ips/assigned - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/assigned"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create an IP pool. -// POST /ips/pools - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("ips/pools"); - request.setBody("{\"name\":\"marketing\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all IP pools. -// GET /ips/pools - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/pools"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update an IP pools name. -// PUT /ips/pools/{pool_name} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("ips/pools/{pool_name}"); - request.setBody("{\"name\":\"new_pool_name\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all IPs in a specified pool. -// GET /ips/pools/{pool_name} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/pools/{pool_name}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete an IP pool. -// DELETE /ips/pools/{pool_name} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("ips/pools/{pool_name}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add an IP address to a pool -// POST /ips/pools/{pool_name}/ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("ips/pools/{pool_name}/ips"); - request.setBody("{\"ip\":\"0.0.0.0\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Remove an IP address from a pool. -// DELETE /ips/pools/{pool_name}/ips/{ip} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("ips/pools/{pool_name}/ips/{ip}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add an IP to warmup -// POST /ips/warmup - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("ips/warmup"); - request.setBody("{\"ip\":\"0.0.0.0\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all IPs currently in warmup -// GET /ips/warmup - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/warmup"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve warmup status for a specific IP address -// GET /ips/warmup/{ip_address} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/warmup/{ip_address}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Remove an IP from warmup -// DELETE /ips/warmup/{ip_address} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("ips/warmup/{ip_address}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all IP pools an IP address belongs to -// GET /ips/{ip_address} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/{ip_address}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - diff --git a/examples/ips/removefromwarmup.java b/examples/ips/removefromwarmup.java new file mode 100644 index 00000000..b99229de --- /dev/null +++ b/examples/ips/removefromwarmup.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + + +////////////////////////////////////////////////////////////////// +// Remove an IP from warmup +// DELETE /ips/warmup/{ip_address} + + +public class RemoveFromWarmup { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("ips/warmup/{ip_address}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/removeipfrompool.java b/examples/ips/removeipfrompool.java new file mode 100644 index 00000000..ceb5f2be --- /dev/null +++ b/examples/ips/removeipfrompool.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + + + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Remove an IP address from a pool. +// DELETE /ips/pools/{pool_name}/ips/{ip} + + +public class RemoveIPFromPool { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("ips/pools/{pool_name}/ips/{ip}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/retrieveallpools.java b/examples/ips/retrieveallpools.java new file mode 100644 index 00000000..a4362ce0 --- /dev/null +++ b/examples/ips/retrieveallpools.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve all IP pools. +// GET /ips/pools + + +public class RetieveAllIPPools { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/pools"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } \ No newline at end of file diff --git a/examples/ips/retrieveassignedips.java b/examples/ips/retrieveassignedips.java new file mode 100644 index 00000000..968834cc --- /dev/null +++ b/examples/ips/retrieveassignedips.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve all assigned IPs +// GET /ips/assigned + + +public class RetrieveAllAssignedIPs { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/assigned"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/retrieveipsinpool.java b/examples/ips/retrieveipsinpool.java new file mode 100644 index 00000000..72330c3f --- /dev/null +++ b/examples/ips/retrieveipsinpool.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve all IPs in a specified pool. +// GET /ips/pools/{pool_name} + + +public class RetrieveIPsInPool { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/pools/{pool_name}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/retrieveipsinwarmup.java b/examples/ips/retrieveipsinwarmup.java new file mode 100644 index 00000000..3767656b --- /dev/null +++ b/examples/ips/retrieveipsinwarmup.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + + +////////////////////////////////////////////////////////////////// +// Retrieve all IPs currently in warmup +// GET /ips/warmup + + +public class RetrieveIPsInWarmup { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/warmup"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/retrievepoolsforip.java b/examples/ips/retrievepoolsforip.java new file mode 100644 index 00000000..8f19b7a7 --- /dev/null +++ b/examples/ips/retrievepoolsforip.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + + +////////////////////////////////////////////////////////////////// +// Retrieve all IP pools an IP address belongs to +// GET /ips/{ip_address} + + +public class RetrieveAllPoolsForIP { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/{ip_address}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/ips/retrievewarmupstatus.java b/examples/ips/retrievewarmupstatus.java new file mode 100644 index 00000000..5d315b8f --- /dev/null +++ b/examples/ips/retrievewarmupstatus.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + + +////////////////////////////////////////////////////////////////// +// Retrieve warmup status for a specific IP address +// GET /ips/warmup/{ip_address} + + +public class RetrieveIPsWarmupStatus { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/warmup/{ip_address}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/updatepoolname.java b/examples/ips/updatepoolname.java new file mode 100644 index 00000000..4e9c2a26 --- /dev/null +++ b/examples/ips/updatepoolname.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Update an IP pools name. +// PUT /ips/pools/{pool_name} + + +public class UpdateIPPoolName { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setEndpoint("ips/pools/{pool_name}"); + request.setBody("{\"name\":\"new_pool_name\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file From b02c534f777854baf9ba57ca3f7fa8c2412dea13 Mon Sep 17 00:00:00 2001 From: "Julian J. Maurer" Date: Sat, 28 Oct 2017 16:54:13 +0200 Subject: [PATCH 171/439] Added README.md --- examples/ips/README.md | 15 ++++++++++++++- .../ips/{addiptowarmup.java => addtowarmup.java} | 0 ...{removeipfrompool.java => removefrompool.java} | 0 .../{RetrieveAllIPs.java => retrieveallips.java} | 0 4 files changed, 14 insertions(+), 1 deletion(-) rename examples/ips/{addiptowarmup.java => addtowarmup.java} (100%) rename examples/ips/{removeipfrompool.java => removefrompool.java} (100%) rename examples/ips/{RetrieveAllIPs.java => retrieveallips.java} (100%) diff --git a/examples/ips/README.md b/examples/ips/README.md index e4358848..f8a9780b 100644 --- a/examples/ips/README.md +++ b/examples/ips/README.md @@ -2,4 +2,17 @@ This folder contains various examples on using the IPs endpoint of SendGrid with Java: -* [Retrieve all IP addresses (GET /ips)](retrieveallips.java) \ No newline at end of file +* [Retrieve all IP addresses (GET /ips)](retrieveallips.java) +* [Retrieve all assigned IPs (GET /ips/assigned)](retrieveassignedips.java) +* [Create an IP pool (POST /ips/pools)](createpool.java) +* [Retrieve all IP pools (GET /ips/pools)](retrieveallpools.java) +* [Update an IP pools name (PUT /ips/pools/{pool_name})](updatepoolname.java) +* [Retrieve all IPs in a specified pool (GET /ips/pools/{pool_name})](retrieveipsinpool.java) +* [Delete an IP pool. (DELETE /ips/pools/{pool_name})](deletepool.java) +* [Add an IP address to a pool (POST /ips/pools/{pool_name}/ips)](addtopool.java) +* [Remove an IP address from a pool (DELETE /ips/pools/{pool_name}/ips/{ip}](removefrompool.java) +* [Add an IP to warmup (POST /ips/warmup)](addtowarmup.java) +* [Retrieve all IPs currently in warmup (GET /ips/warmup)](retrieveipsinwarmup.java) +* [Retrieve warmup status for a specific IP address (GET /ips/warmup/{ip_address})](retrievewarmupstatus.java) +* [Remove an IP from warmup (DELETE /ips/warmup/{ip_address})](removefromwarmup.java) +* [Retrieve all IP pools an IP address belongs to (GET /ips/{ip_address})](retrievepoolsforip.java) \ No newline at end of file diff --git a/examples/ips/addiptowarmup.java b/examples/ips/addtowarmup.java similarity index 100% rename from examples/ips/addiptowarmup.java rename to examples/ips/addtowarmup.java diff --git a/examples/ips/removeipfrompool.java b/examples/ips/removefrompool.java similarity index 100% rename from examples/ips/removeipfrompool.java rename to examples/ips/removefrompool.java diff --git a/examples/ips/RetrieveAllIPs.java b/examples/ips/retrieveallips.java similarity index 100% rename from examples/ips/RetrieveAllIPs.java rename to examples/ips/retrieveallips.java From b845405921903e45bcc884367ed6fa3da2ac8731 Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sat, 28 Oct 2017 18:56:10 +0300 Subject: [PATCH 172/439] update LICENSE - fix year --- LICENSE.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.txt b/LICENSE.txt index 3e9812c6..84a49643 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013-2016 SendGrid +Copyright (c) 2013-2017 SendGrid Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 6a32211f480cd91ccd314c93fc0f32c91409a568 Mon Sep 17 00:00:00 2001 From: Julian Jacques Maurer Date: Sat, 28 Oct 2017 19:48:18 +0200 Subject: [PATCH 173/439] Changed file names Made the file names more readable --- .../ips/{addtopool.java => AddToPool.java} | 0 .../{addtowarmup.java => AddToWarmup.java} | 0 .../ips/{createpool.java => CreatePool.java} | 0 .../ips/{deletepool.java => DeletePool.java} | 0 examples/ips/README.md | 28 +++++++++---------- ...emovefrompool.java => RemoveFromPool.java} | 0 ...efromwarmup.java => RemoveFromWarmup.java} | 0 ...etrieveallips.java => RetrieveAllIPs.java} | 0 ...eveallpools.java => RetrieveAllPools.java} | 0 ...ignedips.java => RetrieveAssignedIPs.java} | 0 ...eipsinpool.java => RetrieveIPsInPool.java} | 0 ...inwarmup.java => RetrieveIPsInWarmup.java} | 0 ...oolsforip.java => RetrievePoolsForIP.java} | 0 ...pstatus.java => RetrieveWarmupStatus.java} | 0 ...pdatepoolname.java => UpdatePoolName.java} | 0 15 files changed, 14 insertions(+), 14 deletions(-) rename examples/ips/{addtopool.java => AddToPool.java} (100%) rename examples/ips/{addtowarmup.java => AddToWarmup.java} (100%) rename examples/ips/{createpool.java => CreatePool.java} (100%) rename examples/ips/{deletepool.java => DeletePool.java} (100%) rename examples/ips/{removefrompool.java => RemoveFromPool.java} (100%) rename examples/ips/{removefromwarmup.java => RemoveFromWarmup.java} (100%) rename examples/ips/{retrieveallips.java => RetrieveAllIPs.java} (100%) rename examples/ips/{retrieveallpools.java => RetrieveAllPools.java} (100%) rename examples/ips/{retrieveassignedips.java => RetrieveAssignedIPs.java} (100%) rename examples/ips/{retrieveipsinpool.java => RetrieveIPsInPool.java} (100%) rename examples/ips/{retrieveipsinwarmup.java => RetrieveIPsInWarmup.java} (100%) rename examples/ips/{retrievepoolsforip.java => RetrievePoolsForIP.java} (100%) rename examples/ips/{retrievewarmupstatus.java => RetrieveWarmupStatus.java} (100%) rename examples/ips/{updatepoolname.java => UpdatePoolName.java} (100%) diff --git a/examples/ips/addtopool.java b/examples/ips/AddToPool.java similarity index 100% rename from examples/ips/addtopool.java rename to examples/ips/AddToPool.java diff --git a/examples/ips/addtowarmup.java b/examples/ips/AddToWarmup.java similarity index 100% rename from examples/ips/addtowarmup.java rename to examples/ips/AddToWarmup.java diff --git a/examples/ips/createpool.java b/examples/ips/CreatePool.java similarity index 100% rename from examples/ips/createpool.java rename to examples/ips/CreatePool.java diff --git a/examples/ips/deletepool.java b/examples/ips/DeletePool.java similarity index 100% rename from examples/ips/deletepool.java rename to examples/ips/DeletePool.java diff --git a/examples/ips/README.md b/examples/ips/README.md index f8a9780b..6b558ce2 100644 --- a/examples/ips/README.md +++ b/examples/ips/README.md @@ -2,17 +2,17 @@ This folder contains various examples on using the IPs endpoint of SendGrid with Java: -* [Retrieve all IP addresses (GET /ips)](retrieveallips.java) -* [Retrieve all assigned IPs (GET /ips/assigned)](retrieveassignedips.java) -* [Create an IP pool (POST /ips/pools)](createpool.java) -* [Retrieve all IP pools (GET /ips/pools)](retrieveallpools.java) -* [Update an IP pools name (PUT /ips/pools/{pool_name})](updatepoolname.java) -* [Retrieve all IPs in a specified pool (GET /ips/pools/{pool_name})](retrieveipsinpool.java) -* [Delete an IP pool. (DELETE /ips/pools/{pool_name})](deletepool.java) -* [Add an IP address to a pool (POST /ips/pools/{pool_name}/ips)](addtopool.java) -* [Remove an IP address from a pool (DELETE /ips/pools/{pool_name}/ips/{ip}](removefrompool.java) -* [Add an IP to warmup (POST /ips/warmup)](addtowarmup.java) -* [Retrieve all IPs currently in warmup (GET /ips/warmup)](retrieveipsinwarmup.java) -* [Retrieve warmup status for a specific IP address (GET /ips/warmup/{ip_address})](retrievewarmupstatus.java) -* [Remove an IP from warmup (DELETE /ips/warmup/{ip_address})](removefromwarmup.java) -* [Retrieve all IP pools an IP address belongs to (GET /ips/{ip_address})](retrievepoolsforip.java) \ No newline at end of file +* [Retrieve all IP addresses (GET /ips)](RetrieveAllIPs.java) +* [Retrieve all assigned IPs (GET /ips/assigned)](RetrieveAssignedIPs.java) +* [Create an IP pool (POST /ips/pools)](CreatePool.java) +* [Retrieve all IP pools (GET /ips/pools)](RetrieveAllPools.java) +* [Update an IP pools name (PUT /ips/pools/{pool_name})](UpdatePoolName.java) +* [Retrieve all IPs in a specified pool (GET /ips/pools/{pool_name})](RetrieveIPsInPool.java) +* [Delete an IP pool. (DELETE /ips/pools/{pool_name})](DeletePool.java) +* [Add an IP address to a pool (POST /ips/pools/{pool_name}/ips)](AddToPool.java) +* [Remove an IP address from a pool (DELETE /ips/pools/{pool_name}/ips/{ip}](RemoveFromPool.java) +* [Add an IP to warmup (POST /ips/warmup)](AddToWarmup.java) +* [Retrieve all IPs currently in warmup (GET /ips/warmup)](RetrieveIPsInWarmup.java) +* [Retrieve warmup status for a specific IP address (GET /ips/warmup/{ip_address})](RetrieveWarmupStatus.java) +* [Remove an IP from warmup (DELETE /ips/warmup/{ip_address})](RemoveFromwarmup.java) +* [Retrieve all IP pools an IP address belongs to (GET /ips/{ip_address})](RetrievePoolsForIP.java) \ No newline at end of file diff --git a/examples/ips/removefrompool.java b/examples/ips/RemoveFromPool.java similarity index 100% rename from examples/ips/removefrompool.java rename to examples/ips/RemoveFromPool.java diff --git a/examples/ips/removefromwarmup.java b/examples/ips/RemoveFromWarmup.java similarity index 100% rename from examples/ips/removefromwarmup.java rename to examples/ips/RemoveFromWarmup.java diff --git a/examples/ips/retrieveallips.java b/examples/ips/RetrieveAllIPs.java similarity index 100% rename from examples/ips/retrieveallips.java rename to examples/ips/RetrieveAllIPs.java diff --git a/examples/ips/retrieveallpools.java b/examples/ips/RetrieveAllPools.java similarity index 100% rename from examples/ips/retrieveallpools.java rename to examples/ips/RetrieveAllPools.java diff --git a/examples/ips/retrieveassignedips.java b/examples/ips/RetrieveAssignedIPs.java similarity index 100% rename from examples/ips/retrieveassignedips.java rename to examples/ips/RetrieveAssignedIPs.java diff --git a/examples/ips/retrieveipsinpool.java b/examples/ips/RetrieveIPsInPool.java similarity index 100% rename from examples/ips/retrieveipsinpool.java rename to examples/ips/RetrieveIPsInPool.java diff --git a/examples/ips/retrieveipsinwarmup.java b/examples/ips/RetrieveIPsInWarmup.java similarity index 100% rename from examples/ips/retrieveipsinwarmup.java rename to examples/ips/RetrieveIPsInWarmup.java diff --git a/examples/ips/retrievepoolsforip.java b/examples/ips/RetrievePoolsForIP.java similarity index 100% rename from examples/ips/retrievepoolsforip.java rename to examples/ips/RetrievePoolsForIP.java diff --git a/examples/ips/retrievewarmupstatus.java b/examples/ips/RetrieveWarmupStatus.java similarity index 100% rename from examples/ips/retrievewarmupstatus.java rename to examples/ips/RetrieveWarmupStatus.java diff --git a/examples/ips/updatepoolname.java b/examples/ips/UpdatePoolName.java similarity index 100% rename from examples/ips/updatepoolname.java rename to examples/ips/UpdatePoolName.java From f638e77d117bcd8f09d907835c4834fc6ccc084d Mon Sep 17 00:00:00 2001 From: Julian Jacques Maurer Date: Sat, 28 Oct 2017 19:50:39 +0200 Subject: [PATCH 174/439] Fixed Typo in README.md --- examples/ips/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ips/README.md b/examples/ips/README.md index 6b558ce2..7ded4310 100644 --- a/examples/ips/README.md +++ b/examples/ips/README.md @@ -14,5 +14,5 @@ This folder contains various examples on using the IPs endpoint of SendGrid with * [Add an IP to warmup (POST /ips/warmup)](AddToWarmup.java) * [Retrieve all IPs currently in warmup (GET /ips/warmup)](RetrieveIPsInWarmup.java) * [Retrieve warmup status for a specific IP address (GET /ips/warmup/{ip_address})](RetrieveWarmupStatus.java) -* [Remove an IP from warmup (DELETE /ips/warmup/{ip_address})](RemoveFromwarmup.java) +* [Remove an IP from warmup (DELETE /ips/warmup/{ip_address})](RemoveFromWarmup.java) * [Retrieve all IP pools an IP address belongs to (GET /ips/{ip_address})](RetrievePoolsForIP.java) \ No newline at end of file From c81edde5517910007403d7154f3ee0ab859f2ae6 Mon Sep 17 00:00:00 2001 From: mptap Date: Sat, 28 Oct 2017 13:27:46 -0700 Subject: [PATCH 175/439] Added unittest to check for specific repo files --- .../com/sendgrid/TestRequiredFilesExist.java | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/test/java/com/sendgrid/TestRequiredFilesExist.java diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java new file mode 100644 index 00000000..eb044941 --- /dev/null +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -0,0 +1,92 @@ +import org.junit.Test; + +import java.io.File; + +import static org.junit.Assert.assertTrue; + +public class TestRequiredFilesExist { + + // ./Docker or docker/Docker + @Test public void checkDockerExists() { + boolean dockerExists = new File("./Docker").exists() || + new File("./docker/Docker").exists(); + assertTrue(dockerExists); + } + + // ./docker-compose.yml or ./docker/docker-compose.yml + @Test public void checkDockerComposeExists() { + boolean dockerComposeExists = new File("./docker-compose.yml").exists() || + new File("./docker/docker-compose.yml").exists(); + assertTrue(dockerComposeExists); + } + + // ./.env_sample + @Test public void checkEnvSampleExists() { + assertTrue(new File("./.env_sample").exists()); + } + + // ./.gitignore + @Test public void checkGitIgnoreExists() { + assertTrue(new File("./.gitignore").exists()); + } + + // ./.travis.yml + @Test public void checkTravisExists() { + assertTrue(new File("./.travis.yml").exists()); + } + + // ./.codeclimate.yml + @Test public void checkCodeClimateExists() { + assertTrue(new File("./.codeclimate.yml").exists()); + } + + // ./CHANGELOG.md + @Test public void checkChangelogExists() { + assertTrue(new File("./CHANGELOG.md").exists()); + } + + // ./CODE_OF_CONDUCT.md + @Test public void checkCodeOfConductExists() { + assertTrue(new File("./CODE_OF_CONDUCT.md").exists()); + } + + // ./CONTRIBUTING.md + @Test public void checkContributingGuideExists() { + assertTrue(new File("./CONTRIBUTING.md").exists()); + } + + // ./.github/ISSUE_TEMPLATE + @Test public void checkIssuesTemplateExists() { + assertTrue(new File("./.github/ISSUE_TEMPLATE").exists()); + } + + // ./LICENSE.md + @Test public void checkLicenseExists() { + assertTrue(new File("./LICENSE.md").exists()); + } + + // ./.github/PULL_REQUEST_TEMPLATE + @Test public void checkPullRequestExists() { + assertTrue(new File("./.github/PULL_REQUEST_TEMPLATE").exists()); + } + + // ./README.md + @Test public void checkReadMeExists() { + assertTrue(new File("./README.md").exists()); + } + + // ./TROUBLESHOOTING.md + @Test public void checkTroubleShootingGuideExists() { + assertTrue(new File("./TROUBLESHOOTING.md").exists()); + } + + // ./USAGE.md + @Test public void checkUsageGuideExists() { + assertTrue(new File("./USAGE.md").exists()); + } + + // ./USE_CASES.md + @Test public void checkUseCases() { + assertTrue(new File("./USE_CASES.md").exists()); + } +} From 6380cec03a26ff7dc06dc42a494763f7fa8ff833 Mon Sep 17 00:00:00 2001 From: Matt Bernier Date: Sat, 28 Oct 2017 17:05:08 -0600 Subject: [PATCH 176/439] Quick and dirty changes to wait for prism --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4fc4dbee..d3048eb5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ matrix: jdk: oraclejdk8 before_script: - "./scripts/startPrism.sh &" -- sleep 10 +- sleep 20 before_install: - cat /etc/hosts # optionally check the content *before* - sudo hostname "$(hostname | cut -c1-63)" From dd5ef8c541eda21e7b39da0df494181da39a1efc Mon Sep 17 00:00:00 2001 From: Andy Trimble Date: Sat, 28 Oct 2017 17:32:05 -0600 Subject: [PATCH 177/439] Updating fix for https://github.com/travis-ci/travis-ci/issues/5227 --- .travis.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index d3048eb5..8a09eb63 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,14 +14,15 @@ before_script: - "./scripts/startPrism.sh &" - sleep 20 before_install: -- cat /etc/hosts # optionally check the content *before* -- sudo hostname "$(hostname | cut -c1-63)" -- sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts | sudo tee /etc/hosts -- cat /etc/hosts # optionally check the content *after* + - cat /etc/hosts # optionally check the content *before* + - sudo hostname "$(hostname | cut -c1-63)" + - sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts > /tmp/hosts + - sudo mv /tmp/hosts /etc/hosts + - cat /etc/hosts # optionally check the content *after* after_script: -- lsof -i :4010 -S # adds some debugging statements -- "./gradlew build" -- "./scripts/upload.sh" + - lsof -i :4010 -S # adds some debugging statements + - "./gradlew build" + - "./scripts/upload.sh" env: global: - S3_POLICY: ewogICJleHBpcmF0aW9uIjogIjIxMDAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCIgfSwKICAgIHsiYnVja2V0IjogInNlbmRncmlkLW9wZW4tc291cmNlIiB9LAogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgInNlbmRncmlkLWphdmEvIl0sCiAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMjA0OCwgMjY4NDM1NDU2XSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi96aXAiXQogIF0KfQo= From 36a23610bfd722bb2c605e9992ba7849e0a89764 Mon Sep 17 00:00:00 2001 From: Aditya Patil Date: Sun, 29 Oct 2017 11:23:49 +0530 Subject: [PATCH 178/439] remove sudo: false to make prism work --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8a09eb63..55ad5ae2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,4 @@ language: java -sudo: false matrix: include: - os: linux From 2a716727efecdd5c508d659469c4464dd680e850 Mon Sep 17 00:00:00 2001 From: Aditya Patil Date: Sun, 29 Oct 2017 11:27:28 +0530 Subject: [PATCH 179/439] update travis.yml to change openjdk7 to openjdk8 --- .travis.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 55ad5ae2..944f6df3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,8 @@ language: java matrix: include: - - os: linux - dist: precise - jdk: openjdk7 - - os: linux - dist: precise - jdk: oraclejdk7 - - os: linux - jdk: oraclejdk8 + - jdk: openjdk8 + - jdk: oraclejdk8 before_script: - "./scripts/startPrism.sh &" - sleep 20 From 06b381efb4a7ea5eef79775e3f3a4650728d109a Mon Sep 17 00:00:00 2001 From: Bhargodev Arya Date: Sun, 29 Oct 2017 00:30:42 +0530 Subject: [PATCH 180/439] Fix similar-code issue in examples/accesssettings/accesssettings.java --- .../accesssettings/CreateAccessSettings.java | 30 ++++ .../accesssettings/DeleteAccessSettings.java | 30 ++++ .../DeleteIPFromAccessSettings.java | 29 ++++ examples/accesssettings/Example.java | 31 ++++ .../accesssettings/GetAccessSettings.java | 30 ++++ .../GetAccessSettingsActivity.java | 33 ++++ .../GetIPFromAccessSettings.java | 30 ++++ examples/accesssettings/README.md | 10 ++ examples/accesssettings/accesssettings.java | 142 ------------------ 9 files changed, 223 insertions(+), 142 deletions(-) create mode 100644 examples/accesssettings/CreateAccessSettings.java create mode 100644 examples/accesssettings/DeleteAccessSettings.java create mode 100644 examples/accesssettings/DeleteIPFromAccessSettings.java create mode 100644 examples/accesssettings/Example.java create mode 100644 examples/accesssettings/GetAccessSettings.java create mode 100644 examples/accesssettings/GetAccessSettingsActivity.java create mode 100644 examples/accesssettings/GetIPFromAccessSettings.java create mode 100644 examples/accesssettings/README.md delete mode 100644 examples/accesssettings/accesssettings.java diff --git a/examples/accesssettings/CreateAccessSettings.java b/examples/accesssettings/CreateAccessSettings.java new file mode 100644 index 00000000..6c98df1b --- /dev/null +++ b/examples/accesssettings/CreateAccessSettings.java @@ -0,0 +1,30 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/*Add one or more IPs to the whitelist +POST /access_settings/whitelist +*/ + +public class CreateAccessSettings extends Example { + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + Request request = createRequest(Method.POST, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + CreateAccessSettings createAccessSettings = new CreateAccessSettings(); + createAccessSettings.run(); + } +} diff --git a/examples/accesssettings/DeleteAccessSettings.java b/examples/accesssettings/DeleteAccessSettings.java new file mode 100644 index 00000000..a1abc860 --- /dev/null +++ b/examples/accesssettings/DeleteAccessSettings.java @@ -0,0 +1,30 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/* Remove one or more IPs from the whitelist + DELETE /access_settings/whitelist + */ + +public class DeleteAccessSettings extends Example { + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + DeleteAccessSettings deleteAccessSettings = new DeleteAccessSettings(); + deleteAccessSettings.run(); + } +} \ No newline at end of file diff --git a/examples/accesssettings/DeleteIPFromAccessSettings.java b/examples/accesssettings/DeleteIPFromAccessSettings.java new file mode 100644 index 00000000..d084c99c --- /dev/null +++ b/examples/accesssettings/DeleteIPFromAccessSettings.java @@ -0,0 +1,29 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/*Remove a specific IP from the whitelist +DELETE /access_settings/whitelist/{rule_id} +*/ + +public class DeleteIPFromAccessSettings extends Example { + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + DeleteIPFromAccessSettings deleteIPFromAccessSettings = new DeleteIPFromAccessSettings(); + deleteIPFromAccessSettings.run(); +} \ No newline at end of file diff --git a/examples/accesssettings/Example.java b/examples/accesssettings/Example.java new file mode 100644 index 00000000..6fd33a36 --- /dev/null +++ b/examples/accesssettings/Example.java @@ -0,0 +1,31 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +public class Example { + + protected Request createRequest(Method method, String endPoint, String requestBody) { + Request request = new Request(); + request.setMethod(method); + request.setEndpoint(endPoint); + if (requestBody != null) { + request.setBody(requestBody); + } + return request; + } + + protected Response execute(Request request) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Response response = sg.api(request); + return response; + } + + protected void printResonseInfo(Response response) { + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } +} \ No newline at end of file diff --git a/examples/accesssettings/GetAccessSettings.java b/examples/accesssettings/GetAccessSettings.java new file mode 100644 index 00000000..24beee95 --- /dev/null +++ b/examples/accesssettings/GetAccessSettings.java @@ -0,0 +1,30 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/*Retrieve a list of currently whitelisted IPs +GET /access_settings/whitelist +*/ + +public class GetAccessSettings extends Example{ + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + GetAccessSettings getAccessSettings = new GetAccessSettings(); + getAccessSettings.run(); + } +} \ No newline at end of file diff --git a/examples/accesssettings/GetAccessSettingsActivity.java b/examples/accesssettings/GetAccessSettingsActivity.java new file mode 100644 index 00000000..5ca02258 --- /dev/null +++ b/examples/accesssettings/GetAccessSettingsActivity.java @@ -0,0 +1,33 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/*Retrieve all recent access attempts +GET /access_settings/activity +*/ + +public class GetAccessSettingsActivity extends Example { + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + request.addQueryParam("limit", "1"); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + GetAccessSettingsActivity getAccessSettingsActivity = new GetAccessSettingsActivity(); + getAccessSettingsActivity.run(); + } +} + + diff --git a/examples/accesssettings/GetIPFromAccessSettings.java b/examples/accesssettings/GetIPFromAccessSettings.java new file mode 100644 index 00000000..456b141c --- /dev/null +++ b/examples/accesssettings/GetIPFromAccessSettings.java @@ -0,0 +1,30 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/* Retrieve a specific whitelisted IP +GET /access_settings/whitelist/{rule_id} +*/ + +public class GetIPFromAccessSettings extends Example { + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + GetIPFromAccessSettings getIPFromAccessSettings = new GetIPFromAccessSettings(); + getIPFromAccessSettings.run(); + } +} \ No newline at end of file diff --git a/examples/accesssettings/README.md b/examples/accesssettings/README.md new file mode 100644 index 00000000..05d64211 --- /dev/null +++ b/examples/accesssettings/README.md @@ -0,0 +1,10 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + + + +This folder contains various examples on using the ACCESS_SETTINGS endpoint of SendGrid with Java: + + + +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettings.java) + +* [Retrieve a specific whitelisted IP (GET /access_settings/whitelist/{rule_id})](GetIPFromAccessSettings.java) + +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettingsActivity.java) + +* [Remove a specific IP from the whitelist (DELETE /access_settings/whitelist/{rule_id}](DeleteIPFromAccessSettings.java) + +* [Remove one or more IPs from the whitelist (DELETE /access_settings/whitelist)](DeleteAccessSettings.java) + +* [Add one or more IPs to the whitelist (POST /access_settings/whitelist)](CreateAccessSettings.java) \ No newline at end of file diff --git a/examples/accesssettings/accesssettings.java b/examples/accesssettings/accesssettings.java deleted file mode 100644 index 5008bafd..00000000 --- a/examples/accesssettings/accesssettings.java +++ /dev/null @@ -1,142 +0,0 @@ -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; - -import java.io.IOException; - -////////////////////////////////////////////////////////////////// -// Retrieve all recent access attempts -// GET /access_settings/activity - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("access_settings/activity"); - request.addQueryParam("limit", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add one or more IPs to the whitelist -// POST /access_settings/whitelist - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("access_settings/whitelist"); - request.setBody("{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a list of currently whitelisted IPs -// GET /access_settings/whitelist - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("access_settings/whitelist"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Remove one or more IPs from the whitelist -// DELETE /access_settings/whitelist - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("access_settings/whitelist"); - request.setBody("{\"ids\":[1,2,3]}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a specific whitelisted IP -// GET /access_settings/whitelist/{rule_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("access_settings/whitelist/{rule_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Remove a specific IP from the whitelist -// DELETE /access_settings/whitelist/{rule_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("access_settings/whitelist/{rule_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From c9e948a8ad1e792721f5f456278042dc255d3a0e Mon Sep 17 00:00:00 2001 From: Mithun Sasidharan Date: Sun, 29 Oct 2017 19:52:56 +0530 Subject: [PATCH 181/439] Fix file_lines issue in examples/mailsettings/mailsettings.java --- .../GetAddressWhitelistMailSettings.java | 28 ++ examples/mailsettings/GetAllMailSettings.java | 30 ++ examples/mailsettings/GetBCCMailSettings.java | 28 ++ .../GetBouncePurgeMailSettings.java | 28 ++ .../mailsettings/GetFooterMailSettings.java | 31 ++ .../GetForwardBounceMailSettings.java | 31 ++ .../GetForwardSpamMailSettings.java | 28 ++ .../GetPlainContentMailSettings.java | 28 ++ .../GetSpamCheckMailSettings.java | 28 ++ .../mailsettings/GetTemplateMailSettings.java | 28 ++ examples/mailsettings/README.md | 23 + .../mailsettings/UpdateAddressWhitelist.java | 29 ++ .../mailsettings/UpdateBCCMailSettings.java | 29 ++ .../UpdateBouncePurgeMailSettings.java | 29 ++ .../UpdateFooterMailSettings.java | 29 ++ .../UpdateForwardBounceMailSettings.java | 29 ++ .../UpdateForwardSpamMailSettings.java | 29 ++ .../UpdatePlainContentMailSettings.java | 29 ++ .../UpdateSpamCheckMailSettings.java | 29 ++ .../UpdateTemplateMailSettings.java | 29 ++ examples/mailsettings/mailsettings.java | 438 ------------------ 21 files changed, 572 insertions(+), 438 deletions(-) create mode 100644 examples/mailsettings/GetAddressWhitelistMailSettings.java create mode 100644 examples/mailsettings/GetAllMailSettings.java create mode 100644 examples/mailsettings/GetBCCMailSettings.java create mode 100644 examples/mailsettings/GetBouncePurgeMailSettings.java create mode 100644 examples/mailsettings/GetFooterMailSettings.java create mode 100644 examples/mailsettings/GetForwardBounceMailSettings.java create mode 100644 examples/mailsettings/GetForwardSpamMailSettings.java create mode 100644 examples/mailsettings/GetPlainContentMailSettings.java create mode 100644 examples/mailsettings/GetSpamCheckMailSettings.java create mode 100644 examples/mailsettings/GetTemplateMailSettings.java create mode 100644 examples/mailsettings/README.md create mode 100644 examples/mailsettings/UpdateAddressWhitelist.java create mode 100644 examples/mailsettings/UpdateBCCMailSettings.java create mode 100644 examples/mailsettings/UpdateBouncePurgeMailSettings.java create mode 100644 examples/mailsettings/UpdateFooterMailSettings.java create mode 100644 examples/mailsettings/UpdateForwardBounceMailSettings.java create mode 100644 examples/mailsettings/UpdateForwardSpamMailSettings.java create mode 100644 examples/mailsettings/UpdatePlainContentMailSettings.java create mode 100644 examples/mailsettings/UpdateSpamCheckMailSettings.java create mode 100644 examples/mailsettings/UpdateTemplateMailSettings.java delete mode 100644 examples/mailsettings/mailsettings.java diff --git a/examples/mailsettings/GetAddressWhitelistMailSettings.java b/examples/mailsettings/GetAddressWhitelistMailSettings.java new file mode 100644 index 00000000..fdc81c1b --- /dev/null +++ b/examples/mailsettings/GetAddressWhitelistMailSettings.java @@ -0,0 +1,28 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +////////////////////////////////////////////////////////////////// +// Retrieve address whitelist mail settings +// GET /mail_settings/address_whitelist + + +public class GetAddressWhitelistMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/address_whitelist"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetAllMailSettings.java b/examples/mailsettings/GetAllMailSettings.java new file mode 100644 index 00000000..e85b6e48 --- /dev/null +++ b/examples/mailsettings/GetAllMailSettings.java @@ -0,0 +1,30 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Retrieve all mail settings +// GET /mail_settings + + +public class GetAllMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/mailsettings/GetBCCMailSettings.java b/examples/mailsettings/GetBCCMailSettings.java new file mode 100644 index 00000000..90ab31d9 --- /dev/null +++ b/examples/mailsettings/GetBCCMailSettings.java @@ -0,0 +1,28 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Retrieve all BCC mail settings +// GET /mail_settings/bcc + + +public class GetBCCMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/bcc"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetBouncePurgeMailSettings.java b/examples/mailsettings/GetBouncePurgeMailSettings.java new file mode 100644 index 00000000..2f390764 --- /dev/null +++ b/examples/mailsettings/GetBouncePurgeMailSettings.java @@ -0,0 +1,28 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +////////////////////////////////////////////////////////////////// +// Retrieve bounce purge mail settings +// GET /mail_settings/bounce_purge + + +public class GetBouncePurgeMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/bounce_purge"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetFooterMailSettings.java b/examples/mailsettings/GetFooterMailSettings.java new file mode 100644 index 00000000..bea04d0b --- /dev/null +++ b/examples/mailsettings/GetFooterMailSettings.java @@ -0,0 +1,31 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +////////////////////////////////////////////////////////////////// +// Retrieve footer mail settings +// GET /mail_settings/footer + + +public class GetFooterMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/footer"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetForwardBounceMailSettings.java b/examples/mailsettings/GetForwardBounceMailSettings.java new file mode 100644 index 00000000..33331585 --- /dev/null +++ b/examples/mailsettings/GetForwardBounceMailSettings.java @@ -0,0 +1,31 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +////////////////////////////////////////////////////////////////// +// Retrieve forward bounce mail settings +// GET /mail_settings/forward_bounce + + +public class GetForwardBounceMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/forward_bounce"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetForwardSpamMailSettings.java b/examples/mailsettings/GetForwardSpamMailSettings.java new file mode 100644 index 00000000..0b890294 --- /dev/null +++ b/examples/mailsettings/GetForwardSpamMailSettings.java @@ -0,0 +1,28 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +////////////////////////////////////////////////////////////////// +// Retrieve forward spam mail settings +// GET /mail_settings/forward_spam + + +public class GetForwardSpamMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/forward_spam"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetPlainContentMailSettings.java b/examples/mailsettings/GetPlainContentMailSettings.java new file mode 100644 index 00000000..38f7cfe4 --- /dev/null +++ b/examples/mailsettings/GetPlainContentMailSettings.java @@ -0,0 +1,28 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Retrieve plain content mail settings +// GET /mail_settings/plain_content + + +public class GetPlainContentMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/plain_content"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetSpamCheckMailSettings.java b/examples/mailsettings/GetSpamCheckMailSettings.java new file mode 100644 index 00000000..9460cac0 --- /dev/null +++ b/examples/mailsettings/GetSpamCheckMailSettings.java @@ -0,0 +1,28 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Retrieve spam check mail settings +// GET /mail_settings/spam_check + + +public class GetSpamCheckMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/spam_check"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetTemplateMailSettings.java b/examples/mailsettings/GetTemplateMailSettings.java new file mode 100644 index 00000000..8b648be4 --- /dev/null +++ b/examples/mailsettings/GetTemplateMailSettings.java @@ -0,0 +1,28 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Retrieve legacy template mail settings +// GET /mail_settings/template + + +public class GetTemplateMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/template"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/README.md b/examples/mailsettings/README.md new file mode 100644 index 00000000..34e83317 --- /dev/null +++ b/examples/mailsettings/README.md @@ -0,0 +1,23 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + +This folder contains various examples on using the Mail Settings endpoint of SendGrid with Java: + +* [Retrieve all mail settings (GET /mail_settings)](GetAllMailSettings.java) +* [Retrieve address whitelist mail settings (GET /mail_settings/address_whitelist)](GetAddressWhitelistMailSettings.java) +* [Retrieve all BCC mail settings (GET /mail_settings/bcc)](GetBCCMailSettings.java) +* [Retrieve bounce purge mail settings (GET /mail_settings/bounce_purge)](GetBouncePurgeMailSettings.java) +* [Retrieve footer mail settings (GET /mail_settings/footer)](GetFooterMailSettings.java) +* [Retrieve forward bounce mail settings (GET /mail_settings/forward_bounce)](GetForwardBounceMailSettings.java) +* [Retrieve forward spam mail settings (GET /mail_settings/forward_spam)](GetForwardSpamMailSettings.java) +* [Retrieve plain content mail settings (GET /mail_settings/plain_content)](GetPlainContentMailSettings.java) +* [Retrieve spam check mail settings (GET /mail_settings/spam_check)](GetSpamCheckMailSettings.java) +* [Retrieve legacy template mail settings (GET /mail_settings/template)](GetTemplateMailSettings.java) +* [Update address whitelist mail settings (PATCH /mail_settings/address_whitelist)](UpdateAddressWhitelist.java) +* [Update BCC mail settings (PATCH /mail_settings/bcc)](UpdateBCCMailSettings.java) +* [Update bounce purge mail settings (PATCH /mail_settings/bounce_purge)](UpdateBouncePurgeMailSettings.java) +* [Update footer mail settings (PATCH /mail_settings/footer)](UpdateFooterMailSettings.java) +* [Update forward bounce mail settings (PATCH /mail_settings/forward_bounce)](UpdateForwardBounceMailSettings.java) +* [Update forward spam mail settings (PATCH /mail_settings/forward_spam)](UpdateForwardSpamMailSettings.java) +* [Update plain content mail settings (PATCH /mail_settings/plain_content)](UpdatePlainContentMailSettings.java) +* [Update spam check mail settings (PATCH /mail_settings/spam_check)](UpdateSpamCheckMailSettings.java) +* [Update template mail settings (PATCH /mail_settings/template)](UpdateTemplateMailSettings.java) diff --git a/examples/mailsettings/UpdateAddressWhitelist.java b/examples/mailsettings/UpdateAddressWhitelist.java new file mode 100644 index 00000000..db58c282 --- /dev/null +++ b/examples/mailsettings/UpdateAddressWhitelist.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update address whitelist mail settings +// PATCH /mail_settings/address_whitelist + + +public class UpdateAddressWhitelist { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/address_whitelist"); + request.setBody("{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateBCCMailSettings.java b/examples/mailsettings/UpdateBCCMailSettings.java new file mode 100644 index 00000000..33faba1a --- /dev/null +++ b/examples/mailsettings/UpdateBCCMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update BCC mail settings +// PATCH /mail_settings/bcc + + +public class UpdateBCCMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/bcc"); + request.setBody("{\"enabled\":false,\"email\":\"email@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateBouncePurgeMailSettings.java b/examples/mailsettings/UpdateBouncePurgeMailSettings.java new file mode 100644 index 00000000..83a53e10 --- /dev/null +++ b/examples/mailsettings/UpdateBouncePurgeMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update bounce purge mail settings +// PATCH /mail_settings/bounce_purge + + +public class UpdateBouncePurgeMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/bounce_purge"); + request.setBody("{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateFooterMailSettings.java b/examples/mailsettings/UpdateFooterMailSettings.java new file mode 100644 index 00000000..fedf35b0 --- /dev/null +++ b/examples/mailsettings/UpdateFooterMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update footer mail settings +// PATCH /mail_settings/footer + + +public class UpdateFooterMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/footer"); + request.setBody("{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateForwardBounceMailSettings.java b/examples/mailsettings/UpdateForwardBounceMailSettings.java new file mode 100644 index 00000000..677b94e9 --- /dev/null +++ b/examples/mailsettings/UpdateForwardBounceMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update forward bounce mail settings +// PATCH /mail_settings/forward_bounce + + +public class UpdateForwardBounceMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/forward_bounce"); + request.setBody("{\"enabled\":true,\"email\":\"example@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateForwardSpamMailSettings.java b/examples/mailsettings/UpdateForwardSpamMailSettings.java new file mode 100644 index 00000000..3b27f353 --- /dev/null +++ b/examples/mailsettings/UpdateForwardSpamMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update forward spam mail settings +// PATCH /mail_settings/forward_spam + + +public class UpdateForwardSpamMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/forward_spam"); + request.setBody("{\"enabled\":false,\"email\":\"\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdatePlainContentMailSettings.java b/examples/mailsettings/UpdatePlainContentMailSettings.java new file mode 100644 index 00000000..4cb680f5 --- /dev/null +++ b/examples/mailsettings/UpdatePlainContentMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update plain content mail settings +// PATCH /mail_settings/plain_content + + +public class UpdatePlainContentMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/plain_content"); + request.setBody("{\"enabled\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateSpamCheckMailSettings.java b/examples/mailsettings/UpdateSpamCheckMailSettings.java new file mode 100644 index 00000000..e7cf8dc2 --- /dev/null +++ b/examples/mailsettings/UpdateSpamCheckMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update spam check mail settings +// PATCH /mail_settings/spam_check + + +public class UpdateSpamCheckMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/spam_check"); + request.setBody("{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateTemplateMailSettings.java b/examples/mailsettings/UpdateTemplateMailSettings.java new file mode 100644 index 00000000..57e1b22a --- /dev/null +++ b/examples/mailsettings/UpdateTemplateMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update template mail settings +// PATCH /mail_settings/template + + +public class UpdateTemplateMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/template"); + request.setBody("{\"html_content\":\"<% body %>\",\"enabled\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java deleted file mode 100644 index d42ffd2a..00000000 --- a/examples/mailsettings/mailsettings.java +++ /dev/null @@ -1,438 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Retrieve all mail settings -// GET /mail_settings - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update address whitelist mail settings -// PATCH /mail_settings/address_whitelist - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/address_whitelist"); - request.setBody("{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve address whitelist mail settings -// GET /mail_settings/address_whitelist - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/address_whitelist"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update BCC mail settings -// PATCH /mail_settings/bcc - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/bcc"); - request.setBody("{\"enabled\":false,\"email\":\"email@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all BCC mail settings -// GET /mail_settings/bcc - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/bcc"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update bounce purge mail settings -// PATCH /mail_settings/bounce_purge - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/bounce_purge"); - request.setBody("{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve bounce purge mail settings -// GET /mail_settings/bounce_purge - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/bounce_purge"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update footer mail settings -// PATCH /mail_settings/footer - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/footer"); - request.setBody("{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve footer mail settings -// GET /mail_settings/footer - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/footer"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update forward bounce mail settings -// PATCH /mail_settings/forward_bounce - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/forward_bounce"); - request.setBody("{\"enabled\":true,\"email\":\"example@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve forward bounce mail settings -// GET /mail_settings/forward_bounce - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/forward_bounce"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update forward spam mail settings -// PATCH /mail_settings/forward_spam - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/forward_spam"); - request.setBody("{\"enabled\":false,\"email\":\"\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve forward spam mail settings -// GET /mail_settings/forward_spam - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/forward_spam"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update plain content mail settings -// PATCH /mail_settings/plain_content - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/plain_content"); - request.setBody("{\"enabled\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve plain content mail settings -// GET /mail_settings/plain_content - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/plain_content"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update spam check mail settings -// PATCH /mail_settings/spam_check - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/spam_check"); - request.setBody("{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve spam check mail settings -// GET /mail_settings/spam_check - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/spam_check"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update template mail settings -// PATCH /mail_settings/template - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/template"); - request.setBody("{\"html_content\":\"<% body %>\",\"enabled\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve legacy template mail settings -// GET /mail_settings/template - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/template"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From 141848eeb10686efd58f2071048f0dab8918809f Mon Sep 17 00:00:00 2001 From: huy tran Date: Mon, 30 Oct 2017 18:48:32 +0900 Subject: [PATCH 182/439] Break up the examples in examples/subusers/subusers.java to their own files --- examples/subusers/CreateMonitorSettings.java | 31 ++ examples/subusers/CreateSubUser.java | 31 ++ examples/subusers/DeleteMonitorSettings.java | 31 ++ examples/subusers/DeleteSubUser.java | 30 ++ examples/subusers/EnableOrDisableUser.java | 31 ++ examples/subusers/ListAllSubUsers.java | 32 ++ .../subusers/RetrieveEmailStatistics.java | 37 ++ .../subusers/RetrieveMonitorSettings.java | 31 ++ .../RetrieveMonthlyEmailStatistics.java | 36 ++ examples/subusers/RetrieveMonthlyStats.java | 36 ++ .../subusers/RetrieveSubUserReputation.java | 32 ++ .../subusers/RetrieveTotalsForEachEmail.java | 37 ++ examples/subusers/UpdateAssignedIPs.java | 31 ++ examples/subusers/UpdateMonitorSettings.java | 31 ++ examples/subusers/subusers.java | 350 ------------------ 15 files changed, 457 insertions(+), 350 deletions(-) create mode 100644 examples/subusers/CreateMonitorSettings.java create mode 100644 examples/subusers/CreateSubUser.java create mode 100644 examples/subusers/DeleteMonitorSettings.java create mode 100644 examples/subusers/DeleteSubUser.java create mode 100644 examples/subusers/EnableOrDisableUser.java create mode 100644 examples/subusers/ListAllSubUsers.java create mode 100644 examples/subusers/RetrieveEmailStatistics.java create mode 100644 examples/subusers/RetrieveMonitorSettings.java create mode 100644 examples/subusers/RetrieveMonthlyEmailStatistics.java create mode 100644 examples/subusers/RetrieveMonthlyStats.java create mode 100644 examples/subusers/RetrieveSubUserReputation.java create mode 100644 examples/subusers/RetrieveTotalsForEachEmail.java create mode 100644 examples/subusers/UpdateAssignedIPs.java create mode 100644 examples/subusers/UpdateMonitorSettings.java delete mode 100644 examples/subusers/subusers.java diff --git a/examples/subusers/CreateMonitorSettings.java b/examples/subusers/CreateMonitorSettings.java new file mode 100644 index 00000000..6fecfaff --- /dev/null +++ b/examples/subusers/CreateMonitorSettings.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create monitor settings +// POST /subusers/{subuser_name}/monitor + + +public class CreateMonitorSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/CreateSubUser.java b/examples/subusers/CreateSubUser.java new file mode 100644 index 00000000..9cb283c8 --- /dev/null +++ b/examples/subusers/CreateSubUser.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create Subuser +// POST /subusers + + +public class CreateSubUser { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("subusers"); + request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/DeleteMonitorSettings.java b/examples/subusers/DeleteMonitorSettings.java new file mode 100644 index 00000000..ffcc25c8 --- /dev/null +++ b/examples/subusers/DeleteMonitorSettings.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Delete monitor settings +// DELETE /subusers/{subuser_name}/monitor + + +public class DeleteMonitorSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}/monitor"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/DeleteSubUser.java b/examples/subusers/DeleteSubUser.java new file mode 100644 index 00000000..68207edf --- /dev/null +++ b/examples/subusers/DeleteSubUser.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete a subuser +// DELETE /subusers/{subuser_name} + + +public class DeleteSubUser { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/EnableOrDisableUser.java b/examples/subusers/EnableOrDisableUser.java new file mode 100644 index 00000000..107b7def --- /dev/null +++ b/examples/subusers/EnableOrDisableUser.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Enable/disable a subuser +// PATCH /subusers/{subuser_name} + + +public class EnableOrDisableUser { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("subusers/{subuser_name}"); + request.setBody("{\"disabled\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/ListAllSubUsers.java b/examples/subusers/ListAllSubUsers.java new file mode 100644 index 00000000..ebc408f3 --- /dev/null +++ b/examples/subusers/ListAllSubUsers.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// List all Subusers +// GET /subusers + +public class ListAllSubUsers { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/RetrieveEmailStatistics.java b/examples/subusers/RetrieveEmailStatistics.java new file mode 100644 index 00000000..479f4f2e --- /dev/null +++ b/examples/subusers/RetrieveEmailStatistics.java @@ -0,0 +1,37 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve email statistics for your subusers. +// GET /subusers/stats + + +public class RetrieveEmailStatistics { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("subusers", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/subusers/RetrieveMonitorSettings.java b/examples/subusers/RetrieveMonitorSettings.java new file mode 100644 index 00000000..6d219e2f --- /dev/null +++ b/examples/subusers/RetrieveMonitorSettings.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve monitor settings for a subuser +// GET /subusers/{subuser_name}/monitor + + +public class RetrieveMonitorSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/monitor"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/RetrieveMonthlyEmailStatistics.java b/examples/subusers/RetrieveMonthlyEmailStatistics.java new file mode 100644 index 00000000..b7d1c9b2 --- /dev/null +++ b/examples/subusers/RetrieveMonthlyEmailStatistics.java @@ -0,0 +1,36 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve the monthly email statistics for a single subuser +// GET /subusers/{subuser_name}/stats/monthly + + +public class RetrieveMonthlyEmailStatistics { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/stats/monthly"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/RetrieveMonthlyStats.java b/examples/subusers/RetrieveMonthlyStats.java new file mode 100644 index 00000000..7310c072 --- /dev/null +++ b/examples/subusers/RetrieveMonthlyStats.java @@ -0,0 +1,36 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve monthly stats for all subusers +// GET /subusers/stats/monthly + + +public class RetrieveMonthlyStats { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/monthly"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/subusers/RetrieveSubUserReputation.java b/examples/subusers/RetrieveSubUserReputation.java new file mode 100644 index 00000000..18664ed2 --- /dev/null +++ b/examples/subusers/RetrieveSubUserReputation.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve Subuser Reputations +// GET /subusers/reputations + + +public class RetrieveSubUserReputation { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/reputations"); + request.addQueryParam("usernames", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/subusers/RetrieveTotalsForEachEmail.java b/examples/subusers/RetrieveTotalsForEachEmail.java new file mode 100644 index 00000000..de741967 --- /dev/null +++ b/examples/subusers/RetrieveTotalsForEachEmail.java @@ -0,0 +1,37 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve the totals for each email statistic metric for all subusers. +// GET /subusers/stats/sums + + +public class RetrieveTotalsForEachEmail { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/UpdateAssignedIPs.java b/examples/subusers/UpdateAssignedIPs.java new file mode 100644 index 00000000..60479769 --- /dev/null +++ b/examples/subusers/UpdateAssignedIPs.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Update IPs assigned to a subuser +// PUT /subusers/{subuser_name}/ips + + +public class UpdateAssignedIps { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/ips"); + request.setBody("[\"127.0.0.1\"]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/UpdateMonitorSettings.java b/examples/subusers/UpdateMonitorSettings.java new file mode 100644 index 00000000..81567982 --- /dev/null +++ b/examples/subusers/UpdateMonitorSettings.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Update Monitor Settings for a subuser +// PUT /subusers/{subuser_name}/monitor + + +public class UpdateMonitorSetting { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java deleted file mode 100644 index 6959ac8d..00000000 --- a/examples/subusers/subusers.java +++ /dev/null @@ -1,350 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Create Subuser -// POST /subusers - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("subusers"); - request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// List all Subusers -// GET /subusers - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers"); - request.addQueryParam("username", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve Subuser Reputations -// GET /subusers/reputations - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/reputations"); - request.addQueryParam("usernames", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve email statistics for your subusers. -// GET /subusers/stats - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/stats"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("subusers", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve monthly stats for all subusers -// GET /subusers/stats/monthly - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/stats/monthly"); - request.addQueryParam("subuser", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - request.addQueryParam("date", "test_string"); - request.addQueryParam("sort_by_direction", "asc"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve the totals for each email statistic metric for all subusers. -// GET /subusers/stats/sums - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/stats/sums"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("sort_by_direction", "asc"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Enable/disable a subuser -// PATCH /subusers/{subuser_name} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("subusers/{subuser_name}"); - request.setBody("{\"disabled\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a subuser -// DELETE /subusers/{subuser_name} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("subusers/{subuser_name}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update IPs assigned to a subuser -// PUT /subusers/{subuser_name}/ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("subusers/{subuser_name}/ips"); - request.setBody("[\"127.0.0.1\"]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update Monitor Settings for a subuser -// PUT /subusers/{subuser_name}/monitor - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("subusers/{subuser_name}/monitor"); - request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create monitor settings -// POST /subusers/{subuser_name}/monitor - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("subusers/{subuser_name}/monitor"); - request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve monitor settings for a subuser -// GET /subusers/{subuser_name}/monitor - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/{subuser_name}/monitor"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete monitor settings -// DELETE /subusers/{subuser_name}/monitor - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("subusers/{subuser_name}/monitor"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve the monthly email statistics for a single subuser -// GET /subusers/{subuser_name}/stats/monthly - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/{subuser_name}/stats/monthly"); - request.addQueryParam("date", "test_string"); - request.addQueryParam("sort_by_direction", "asc"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From 909216982216aa6eaa4ffcf62e50c47b01f8675f Mon Sep 17 00:00:00 2001 From: huy tran Date: Mon, 30 Oct 2017 19:04:40 +0900 Subject: [PATCH 183/439] Fix "similar-code" issue in examples/whitelabel/ips.java --- examples/whitelabel/ips.java | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/examples/whitelabel/ips.java b/examples/whitelabel/ips.java index 54cb2af3..22836d99 100644 --- a/examples/whitelabel/ips.java +++ b/examples/whitelabel/ips.java @@ -7,16 +7,25 @@ import java.util.HashMap; import java.util.Map; +public class CommonExample { + protected SendGrid sg; + protected Request request; + + protected static void init() { + this.sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + this.request = new Request(); + } +} + ////////////////////////////////////////////////////////////////// // Create an IP whitelabel // POST /whitelabel/ips -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/ips"); request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); @@ -35,11 +44,10 @@ public static void main(String[] args) throws IOException { // GET /whitelabel/ips -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.GET); request.setEndpoint("whitelabel/ips"); request.addQueryParam("ip", "test_string"); @@ -60,11 +68,10 @@ public static void main(String[] args) throws IOException { // GET /whitelabel/ips/{id} -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.GET); request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); @@ -82,11 +89,10 @@ public static void main(String[] args) throws IOException { // DELETE /whitelabel/ips/{id} -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.DELETE); request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); @@ -104,11 +110,10 @@ public static void main(String[] args) throws IOException { // POST /whitelabel/ips/{id}/validate -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/ips/{id}/validate"); Response response = sg.api(request); From fdc7deae55d66e6f2f1027d1591b2bd639bcd66d Mon Sep 17 00:00:00 2001 From: huy tran Date: Mon, 30 Oct 2017 19:07:02 +0900 Subject: [PATCH 184/439] Fix "similar-code" issue in examples/whitelabel/ips.java --- examples/whitelabel/ips.java | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/examples/whitelabel/ips.java b/examples/whitelabel/ips.java index 54cb2af3..22836d99 100644 --- a/examples/whitelabel/ips.java +++ b/examples/whitelabel/ips.java @@ -7,16 +7,25 @@ import java.util.HashMap; import java.util.Map; +public class CommonExample { + protected SendGrid sg; + protected Request request; + + protected static void init() { + this.sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + this.request = new Request(); + } +} + ////////////////////////////////////////////////////////////////// // Create an IP whitelabel // POST /whitelabel/ips -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/ips"); request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); @@ -35,11 +44,10 @@ public static void main(String[] args) throws IOException { // GET /whitelabel/ips -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.GET); request.setEndpoint("whitelabel/ips"); request.addQueryParam("ip", "test_string"); @@ -60,11 +68,10 @@ public static void main(String[] args) throws IOException { // GET /whitelabel/ips/{id} -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.GET); request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); @@ -82,11 +89,10 @@ public static void main(String[] args) throws IOException { // DELETE /whitelabel/ips/{id} -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.DELETE); request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); @@ -104,11 +110,10 @@ public static void main(String[] args) throws IOException { // POST /whitelabel/ips/{id}/validate -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/ips/{id}/validate"); Response response = sg.api(request); From 442362733e3c759932d2efc4eab6ce004e490a0e Mon Sep 17 00:00:00 2001 From: pushkyn Date: Mon, 30 Oct 2017 16:50:50 +0300 Subject: [PATCH 185/439] update github PR template --- .github/PULL_REQUEST_TEMPLATE | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index e4059635..ba377ae7 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -1,19 +1,24 @@ - -Closes: #[Issue number] +# Fixes # -**Description of the change**: +### Checklist +- [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) +- [ ] I have read the [Contribution Guide] and my PR follows them. +- [ ] I updated my branch with the master branch. +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] I have added necessary documentation about the functionality in the appropriate .md file +- [ ] I have added in line documentation to the code I modified -If you have questions, please send an email [Sendgrid](mailto:dx@sendgrid.com), or file a Github Issue in this repository. +### Short description of what this PR does: +- +- +If you have questions, please send an email to [Sendgrid](mailto:dx@sendgrid.com), or file a Github Issue in this repository. \ No newline at end of file From 91725bfaf495464bc59602aac6ddb3c8f0595e8c Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sat, 28 Oct 2017 20:59:06 +0300 Subject: [PATCH 186/439] Refactoring suppression examples --- examples/suppression/DeleteBlocks.java | 30 ++ examples/suppression/DeleteBounce.java | 30 ++ examples/suppression/DeleteBounces.java | 30 ++ examples/suppression/DeleteInvalidEmails.java | 30 ++ examples/suppression/DeleteSpamReports.java | 30 ++ examples/suppression/DeleteSpecificBlock.java | 29 ++ .../DeleteSpecificInvalidEmail.java | 29 ++ .../suppression/DeleteSpecificSpamReport.java | 29 ++ examples/suppression/GetAllBlocks.java | 33 ++ examples/suppression/GetAllBounces.java | 31 ++ .../suppression/GetAllGlobalSuppressions.java | 33 ++ examples/suppression/GetAllInvalidEmails.java | 33 ++ examples/suppression/GetAllSpamReports.java | 33 ++ examples/suppression/GetBounce.java | 29 ++ examples/suppression/GetSpecificBlock.java | 29 ++ .../suppression/GetSpecificInvalidEmail.java | 29 ++ .../suppression/GetSpecificSpamReport.java | 29 ++ examples/suppression/README.md | 21 + examples/suppression/suppression.java | 406 ------------------ 19 files changed, 537 insertions(+), 406 deletions(-) create mode 100644 examples/suppression/DeleteBlocks.java create mode 100644 examples/suppression/DeleteBounce.java create mode 100644 examples/suppression/DeleteBounces.java create mode 100644 examples/suppression/DeleteInvalidEmails.java create mode 100644 examples/suppression/DeleteSpamReports.java create mode 100644 examples/suppression/DeleteSpecificBlock.java create mode 100644 examples/suppression/DeleteSpecificInvalidEmail.java create mode 100644 examples/suppression/DeleteSpecificSpamReport.java create mode 100644 examples/suppression/GetAllBlocks.java create mode 100644 examples/suppression/GetAllBounces.java create mode 100644 examples/suppression/GetAllGlobalSuppressions.java create mode 100644 examples/suppression/GetAllInvalidEmails.java create mode 100644 examples/suppression/GetAllSpamReports.java create mode 100644 examples/suppression/GetBounce.java create mode 100644 examples/suppression/GetSpecificBlock.java create mode 100644 examples/suppression/GetSpecificInvalidEmail.java create mode 100644 examples/suppression/GetSpecificSpamReport.java create mode 100644 examples/suppression/README.md delete mode 100644 examples/suppression/suppression.java diff --git a/examples/suppression/DeleteBlocks.java b/examples/suppression/DeleteBlocks.java new file mode 100644 index 00000000..484ddc67 --- /dev/null +++ b/examples/suppression/DeleteBlocks.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete blocks +// DELETE /suppression/blocks + +public class DeleteBlocks { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteBounce.java b/examples/suppression/DeleteBounce.java new file mode 100644 index 00000000..a8a9270d --- /dev/null +++ b/examples/suppression/DeleteBounce.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete a bounce +// DELETE /suppression/bounces/{email} + +public class DeleteBounce { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces/{email}"); + request.addQueryParam("email_address", "example@example.com"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteBounces.java b/examples/suppression/DeleteBounces.java new file mode 100644 index 00000000..ec286aec --- /dev/null +++ b/examples/suppression/DeleteBounces.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete bounces +// DELETE /suppression/bounces + +public class DeleteBounces { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces"); + request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteInvalidEmails.java b/examples/suppression/DeleteInvalidEmails.java new file mode 100644 index 00000000..56e3e25e --- /dev/null +++ b/examples/suppression/DeleteInvalidEmails.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete invalid emails +// DELETE /suppression/invalid_emails + +public class DeleteInvalidEmails { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteSpamReports.java b/examples/suppression/DeleteSpamReports.java new file mode 100644 index 00000000..c4adb4b3 --- /dev/null +++ b/examples/suppression/DeleteSpamReports.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete spam reports +// DELETE /suppression/spam_reports + +public class DeleteSpamReports { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_reports"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteSpecificBlock.java b/examples/suppression/DeleteSpecificBlock.java new file mode 100644 index 00000000..4e252c3f --- /dev/null +++ b/examples/suppression/DeleteSpecificBlock.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete a specific block +// DELETE /suppression/blocks/{email} + +public class DeleteSpecificBlock { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteSpecificInvalidEmail.java b/examples/suppression/DeleteSpecificInvalidEmail.java new file mode 100644 index 00000000..03def455 --- /dev/null +++ b/examples/suppression/DeleteSpecificInvalidEmail.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete a specific invalid email +// DELETE /suppression/invalid_emails/{email} + +public class DeleteSpecificInvalidEmail { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteSpecificSpamReport.java b/examples/suppression/DeleteSpecificSpamReport.java new file mode 100644 index 00000000..fcad75bf --- /dev/null +++ b/examples/suppression/DeleteSpecificSpamReport.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete a specific spam report +// DELETE /suppression/spam_report/{email} + +public class DeleteSpecificSpamReport { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_report/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetAllBlocks.java b/examples/suppression/GetAllBlocks.java new file mode 100644 index 00000000..c653c9be --- /dev/null +++ b/examples/suppression/GetAllBlocks.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all blocks +// GET /suppression/blocks + +public class GetAllBlocks { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/blocks"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetAllBounces.java b/examples/suppression/GetAllBounces.java new file mode 100644 index 00000000..6c98010d --- /dev/null +++ b/examples/suppression/GetAllBounces.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all bounces +// GET /suppression/bounces + +public class GetAllBounces { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/bounces"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("end_time", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetAllGlobalSuppressions.java b/examples/suppression/GetAllGlobalSuppressions.java new file mode 100644 index 00000000..f714b2c9 --- /dev/null +++ b/examples/suppression/GetAllGlobalSuppressions.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all global suppressions +// GET /suppression/unsubscribes + +public class GetAllGlobalSuppressions { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/unsubscribes"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetAllInvalidEmails.java b/examples/suppression/GetAllInvalidEmails.java new file mode 100644 index 00000000..d2b2028b --- /dev/null +++ b/examples/suppression/GetAllInvalidEmails.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all invalid emails +// GET /suppression/invalid_emails + +public class GetAllInvalidEmails { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/invalid_emails"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetAllSpamReports.java b/examples/suppression/GetAllSpamReports.java new file mode 100644 index 00000000..03795c45 --- /dev/null +++ b/examples/suppression/GetAllSpamReports.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all spam reports +// GET /suppression/spam_reports + +public class GetAllSpamReports { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_reports"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetBounce.java b/examples/suppression/GetBounce.java new file mode 100644 index 00000000..fe3259f5 --- /dev/null +++ b/examples/suppression/GetBounce.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve a Bounce +// GET /suppression/bounces/{email} + +public class GetBounce { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/bounces/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetSpecificBlock.java b/examples/suppression/GetSpecificBlock.java new file mode 100644 index 00000000..1c9b8dee --- /dev/null +++ b/examples/suppression/GetSpecificBlock.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve a specific block +// GET /suppression/blocks/{email} + +public class GetSpecificBlock { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/blocks/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetSpecificInvalidEmail.java b/examples/suppression/GetSpecificInvalidEmail.java new file mode 100644 index 00000000..54f8f8a4 --- /dev/null +++ b/examples/suppression/GetSpecificInvalidEmail.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve a specific invalid email +// GET /suppression/invalid_emails/{email} + +public class GetSpecificInvalidEmail { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/invalid_emails/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetSpecificSpamReport.java b/examples/suppression/GetSpecificSpamReport.java new file mode 100644 index 00000000..bd5d3826 --- /dev/null +++ b/examples/suppression/GetSpecificSpamReport.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve a specific spam report +// GET /suppression/spam_report/{email} + +public class GetSpecificSpamReport { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_report/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/README.md b/examples/suppression/README.md new file mode 100644 index 00000000..ca686a4b --- /dev/null +++ b/examples/suppression/README.md @@ -0,0 +1,21 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + +This folder contains various examples on using the SUPPRESSION endpoint of SendGrid with Java: + +* [Retrieve all blocks (GET /suppression/blocks)](GetAllBlocks.java) +* [Delete blocks (DELETE /suppression/blocks)](DeleteBlocks.java) +* [Retrieve a specific block (GET /suppression/blocks/{email})](GetSpecificBlock.java) +* [Delete a specific block (DELETE /suppression/blocks/{email})](DeleteSpecificBlock.java) +* [Retrieve all bounces (GET /suppression/bounces)](GetAllBounces.java) +* [Delete bounces (DELETE /suppression/bounces)](DeleteBounces.java) +* [Retrieve a Bounce (GET /suppression/bounces/{email})](GetBounce.java) +* [Delete a bounce (DELETE /suppression/bounces/{email})](DeleteBounce.java) +* [Retrieve all invalid emails (GET /suppression/invalid_emails)](GetAllInvalidEmails.java) +* [Delete invalid emails (DELETE /suppression/invalid_emails)](DeleteInvalidEmails.java) +* [Retrieve a specific invalid email (GET /suppression/invalid_emails/{email})](GetSpecificInvalidEmail.java) +* [Delete a specific invalid email (DELETE /suppression/invalid_emails/{email})](DeleteSpecificInvalidEmail.java) +* [Retrieve a specific spam report (GET /suppression/spam_report/{email})](GetSpecificSpamReport.java) +* [Delete a specific spam report (DELETE /suppression/spam_report/{email})](DeleteSpecificSpamReport.java) +* [Retrieve all spam reports (GET /suppression/spam_reports)](GetAllSpamReports.java) +* [Delete spam reports (DELETE /suppression/spam_reports)](DeleteSpamReports.java) +* [Retrieve all global suppressions (GET /suppression/unsubscribes)](GetAllGlobalSuppressions.java) \ No newline at end of file diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java deleted file mode 100644 index 049581a8..00000000 --- a/examples/suppression/suppression.java +++ /dev/null @@ -1,406 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Retrieve all blocks -// GET /suppression/blocks - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/blocks"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete blocks -// DELETE /suppression/blocks - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/blocks"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a specific block -// GET /suppression/blocks/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/blocks/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a specific block -// DELETE /suppression/blocks/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/blocks/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all bounces -// GET /suppression/bounces - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/bounces"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("end_time", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete bounces -// DELETE /suppression/bounces - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/bounces"); - request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a Bounce -// GET /suppression/bounces/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/bounces/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a bounce -// DELETE /suppression/bounces/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/bounces/{email}"); - request.addQueryParam("email_address", "example@example.com"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all invalid emails -// GET /suppression/invalid_emails - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/invalid_emails"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete invalid emails -// DELETE /suppression/invalid_emails - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/invalid_emails"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a specific invalid email -// GET /suppression/invalid_emails/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/invalid_emails/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a specific invalid email -// DELETE /suppression/invalid_emails/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/invalid_emails/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a specific spam report -// GET /suppression/spam_report/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/spam_report/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a specific spam report -// DELETE /suppression/spam_report/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/spam_report/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all spam reports -// GET /suppression/spam_reports - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/spam_reports"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete spam reports -// DELETE /suppression/spam_reports - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/spam_reports"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all global suppressions -// GET /suppression/unsubscribes - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/unsubscribes"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From e6a54591020cbe7be29f055b0c29736421caec8a Mon Sep 17 00:00:00 2001 From: Manjiri Tapaswi Date: Mon, 30 Oct 2017 10:25:42 -0700 Subject: [PATCH 187/439] Addressed comments --- src/test/java/com/sendgrid/TestRequiredFilesExist.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index eb044941..b1bb5375 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -8,8 +8,8 @@ public class TestRequiredFilesExist { // ./Docker or docker/Docker @Test public void checkDockerExists() { - boolean dockerExists = new File("./Docker").exists() || - new File("./docker/Docker").exists(); + boolean dockerExists = new File("./Dockerfile").exists() || + new File("./docker/Dockerfile").exists(); assertTrue(dockerExists); } From 056dd671c6eb818c51f12e81e37e3f1192889a5e Mon Sep 17 00:00:00 2001 From: Matt Bernier Date: Mon, 30 Oct 2017 21:21:57 -0600 Subject: [PATCH 188/439] Changed license file path to .md from .txt --- LICENSE.txt => LICENSE.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE.txt => LICENSE.md (100%) diff --git a/LICENSE.txt b/LICENSE.md similarity index 100% rename from LICENSE.txt rename to LICENSE.md From 82b2867bcea5ae37302d3e56aa3a283ff9fdf284 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 30 Oct 2017 21:13:14 -0700 Subject: [PATCH 189/439] Version Bump v4.1.2: PR #220 Alway serialize click-tracking parameters --- CHANGELOG.md | 5 +++++ CONTRIBUTING.md | 2 +- README.md | 2 +- build.gradle | 2 +- pom.xml | 2 +- .../sendgrid/helpers/mail/objects/ClickTrackingSetting.java | 1 - 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 818020a4..a42d9086 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.1.2] - 2017-10-30 +### Added +- PR #220 Alway serialize click-tracking parameters. +- BIG thanks to [Mattia Barbon](https://github.com/mbarbon) + ## [4.1.1] - 2017-10-10 ### Added - PR #247 Added Javadocs. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8c70abe1..cc48269d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.1.1/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.1.2/sendgrid-4.1.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.2/sendgrid-4.1.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index 9155acd6..ed0ce3d9 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.1.1' + compile 'com.sendgrid:sendgrid-java:4.1.2' } repositories { diff --git a/build.gradle b/build.gradle index 8db48489..9a010d2a 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.1.1' +version = '4.1.2' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 249d79d4..e5811e71 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.1.1 + 4.1.2 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index 0644ffc1..2c139cda 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -9,7 +9,6 @@ * Settings to determine how you would like to track the * metrics of how your recipients interact with your email. */ -@JsonInclude(Include.NON_DEFAULT) public class ClickTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("enable_text") private boolean enableText; From fabd726fba31e9fa1d32e95eb299fa5ebf74cec8 Mon Sep 17 00:00:00 2001 From: Rostyslav Zatserkovnyi Date: Sat, 28 Oct 2017 11:27:06 +0300 Subject: [PATCH 190/439] Add .codeclimate.yml file --- .codeclimate.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .codeclimate.yml diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 00000000..5b82009c --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,8 @@ +--- +plugins: + checkstyle: + enabled: true + fixme: + enabled: true + pmd: + enabled: true From f9b4ac43a70e94765ad6c9bbe2a00aea8590d980 Mon Sep 17 00:00:00 2001 From: Matt Bernier Date: Tue, 31 Oct 2017 14:16:01 -0600 Subject: [PATCH 191/439] added source command --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 009eeb0b..4eba81e4 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,9 @@ cp .env_sample .env ``` 2. Edit the new `.env` to add your API key 3. Source the `.env` file to set rhe variable in the current session +```bash +source .env +``` ## Install Package @@ -231,4 +234,4 @@ sendgrid-java is guided and supported by the SendGrid [Developer Experience Team sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. # License -[The MIT License (MIT)](LICENSE.txt) \ No newline at end of file +[The MIT License (MIT)](LICENSE.txt) From 9722ac1d4c375fccd7258c3819ee6df9b843427b Mon Sep 17 00:00:00 2001 From: dmitraver Date: Tue, 14 Nov 2017 17:47:28 +0100 Subject: [PATCH 192/439] Updates jackson dependencies to the latest version. --- build.gradle | 6 +++--- pom.xml | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 881a496e..97d66950 100644 --- a/build.gradle +++ b/build.gradle @@ -46,9 +46,9 @@ buildscript { dependencies { compile 'com.sendgrid:java-http-client:4.1.0' - compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' - compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' - compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' + compile 'com.fasterxml.jackson.core:jackson-core:2.9.2' + compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.2' + compile 'com.fasterxml.jackson.core:jackson-databind:2.9.2' testCompile group: 'junit', name: 'junit', version: '4.12' } diff --git a/pom.xml b/pom.xml index 07545420..3683507f 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,9 @@ repo + + 2.9.2 + https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git @@ -94,17 +97,17 @@ com.fasterxml.jackson.core jackson-core - 2.5.3 + ${jackson.version} com.fasterxml.jackson.core jackson-annotations - 2.5.3 + ${jackson.version} com.fasterxml.jackson.core jackson-databind - 2.5.3 + ${jackson.version} junit From e3a9cdfd5aabbebe6f4eb21ee8a60d7099119cde Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sun, 29 Oct 2017 01:49:22 +0300 Subject: [PATCH 193/439] Test to check year in license file --- LICENSE.md | 2 +- src/test/java/com/sendgrid/LicenseTest.java | 27 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/sendgrid/LicenseTest.java diff --git a/LICENSE.md b/LICENSE.md index 84a49643..1e1037a5 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013-2017 SendGrid +Copyright (c) 2013-2017 SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/src/test/java/com/sendgrid/LicenseTest.java b/src/test/java/com/sendgrid/LicenseTest.java new file mode 100644 index 00000000..1e06bf71 --- /dev/null +++ b/src/test/java/com/sendgrid/LicenseTest.java @@ -0,0 +1,27 @@ +package com.sendgrid; + +import org.junit.Assert; +import org.junit.Test; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.Calendar; + +public class LicenseTest { + + @Test + public void testLicenseShouldHaveCorrectYear() throws IOException { + String copyrightText = null; + try (BufferedReader br = new BufferedReader(new FileReader("./LICENSE.md"))) { + for (String line; (line = br.readLine()) != null; ) { + if (line.startsWith("Copyright")) { + copyrightText = line; + break; + } + } + } + String expectedCopyright = String.format("Copyright (c) 2013-%d SendGrid, Inc.", Calendar.getInstance().get(Calendar.YEAR)); + Assert.assertEquals("License has incorrect year", copyrightText, expectedCopyright); + } +} From 258f80b8ec4f2023ae98d6d6b74969a2aa50258e Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 4 May 2018 14:27:44 -0700 Subject: [PATCH 194/439] Version Bump v4.2.0: Hacktoberfest rollup release --- .gitignore | 1 + CHANGELOG.md | 20 +++++++++++++ CONTRIBUTING.md | 2 +- LICENSE.md | 2 +- README.md | 4 +-- bin/com/sendgrid/helpers/README.md | 2 +- build.gradle | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/SendGridAPI.java | 1 - .../helpers/mail/objects/Content.java | 29 +++++++++---------- .../com/sendgrid/TestRequiredFilesExist.java | 12 ++++---- .../java/com/sendgrid/helpers/MailTest.java | 2 ++ 12 files changed, 50 insertions(+), 29 deletions(-) diff --git a/.gitignore b/.gitignore index 2c5dd118..551957d8 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ examples/Example.java .classpath .project .env +.vscode \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index a42d9086..6f207e92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.2.0] - 2018-05-04 +### Added +- [PR #275](https://github.com/sendgrid/sendgrid-java/pull/275/files): Add a way to verify that the content doesn't contain sensitive information -- BIG thanks to [Diego Camargo](https://github.com/belfazt) +- [PR #249](https://github.com/sendgrid/sendgrid-java/pull/249): Add optional rate limit support -- BIG thanks to [Andy Trimble](https://github.com/andy-trimble) +- [PR #379](https://github.com/sendgrid/sendgrid-java/pull/379): Break up the examples in examples/subusers/subusers.java to their own files -- BIG thanks to [huytranrjc](https://github.com/huytranrjc) +- [PR #365](https://github.com/sendgrid/sendgrid-java/pull/365): Test to check year in license file -- BIG thanks to [Alex](https://github.com/pushkyn) +- [PR #345](https://github.com/sendgrid/sendgrid-java/pull/345): Add .codeclimate.yml file -- BIG thanks to [Rostyslav Zatserkovnyi](https://github.com/rzats) +- [PR #319](https://github.com/sendgrid/sendgrid-java/pull/319): Add .env_sample file -- BIG thanks to [Thiago Barbato](https://github.com/thiagobbt) +- [PR #223](https://github.com/sendgrid/sendgrid-java/pull/223): The license file is now in the release jar -- BIG thanks to [sccalabr](https://github.com/sccalabr) +- [PR #224](https://github.com/sendgrid/sendgrid-java/pull/224): Adding SendGridApi interface -- BIG thanks to [sccalabr](https://github.com/sccalabr) + +### Fix +- [PR #410](https://github.com/sendgrid/sendgrid-java/pull/410): Update Jackson dependencies to the latest version -- BIG thanks to [Dmitry Avershin](https://github.com/dmitraver) +- [PR #380](https://github.com/sendgrid/sendgrid-java/pull/380): Fix "similar-code" issue in examples/whitelabel/ips.java -- BIG thanks to [huytranrjc](https://github.com/huytranrjc) +- [PR #255](https://github.com/sendgrid/sendgrid-java/pull/225): Fix Mail deserialization issue -- BIG thanks to [sccalabr](https://github.com/sccalabr) +- [PR #359](https://github.com/sendgrid/sendgrid-java/pull/359): Fix code issue in examples/suppression/suppression.java -- BIG thanks to [Alex](https://github.com/pushkyn) +- [PR #228](https://github.com/sendgrid/sendgrid-java/pull/228): Changes serialization type from default to non-empty -- BIG thanks to [Dmitry Avershin](https://github.com/dmitraver) +- [PR #373](https://github.com/sendgrid/sendgrid-java/pull/373): Fix file_lines issue in examples/mailsettings/mailsettings.java -- BIG thanks to [Mithun Sasidharan](https://github.com/mithunsasidharan) + + ## [4.1.2] - 2017-10-30 ### Added - PR #220 Alway serialize click-tracking parameters. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cc48269d..54f88f96 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.1.2/sendgrid-4.1.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.2/sendgrid-4.1.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.2.0/sendgrid-4.2.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.2.0/sendgrid-4.2.0-jar.jar:. Example ``` diff --git a/LICENSE.md b/LICENSE.md index 1e1037a5..7756fd61 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013-2017 SendGrid, Inc. +Copyright (c) 2013-2018 SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 5d582daf..ee22606f 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.1.2' + compile 'com.sendgrid:sendgrid-java:4.2.0' } repositories { @@ -85,7 +85,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java-latest.jar](http://dx.sendgrid.com/downloads/sendgrid-java/sendgrid-java-latest.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.2.0/sendgrid-java.jar) ## Dependencies diff --git a/bin/com/sendgrid/helpers/README.md b/bin/com/sendgrid/helpers/README.md index b676e6f9..1bec4955 100644 --- a/bin/com/sendgrid/helpers/README.md +++ b/bin/com/sendgrid/helpers/README.md @@ -10,7 +10,7 @@ Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples ```bash cd examples/mail -javac -classpath ../../build/libs/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-4.1.0-jar.jar:. Example +javac -classpath ../../build/libs/sendgrid-4.2.0-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.9.2.jar:../../build/libs/sendgrid-4.2.0-jar.jar:. Example ``` ## Usage diff --git a/build.gradle b/build.gradle index 3c2794f3..686bb182 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.1.2' +version = '4.2.0' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 1e640183..0255d4cf 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.1.2 + 4.2.0 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index 32998459..34599a7d 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -15,7 +15,6 @@ public interface SendGridAPI { /** * Returns the library version * - * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @return the library version. */ public String getLibraryVersion(); diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index 787d2d4d..0d6c73b2 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -47,21 +47,6 @@ public void setValue(String value) { ContentVerifier.verifyContent(value); this.value = value; } -} - -class ContentVerifier { - private static final List FORBIDDEN_PATTERNS = Collections.singletonList( - Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") - ); - - static void verifyContent(String content) { - for (Pattern pattern: FORBIDDEN_PATTERNS) { - if (pattern.matcher(content).matches()) { - throw new IllegalArgumentException("Found a Forbidden Pattern in the content of the email"); - } - } - } -} @Override public int hashCode() { @@ -94,3 +79,17 @@ public boolean equals(Object obj) { return true; } } + +class ContentVerifier { + private static final List FORBIDDEN_PATTERNS = Collections.singletonList( + Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") + ); + + static void verifyContent(String content) { + for (Pattern pattern: FORBIDDEN_PATTERNS) { + if (pattern.matcher(content).matches()) { + throw new IllegalArgumentException("Found a Forbidden Pattern in the content of the email"); + } + } + } +} \ No newline at end of file diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index b1bb5375..f503c424 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -13,12 +13,12 @@ public class TestRequiredFilesExist { assertTrue(dockerExists); } - // ./docker-compose.yml or ./docker/docker-compose.yml - @Test public void checkDockerComposeExists() { - boolean dockerComposeExists = new File("./docker-compose.yml").exists() || - new File("./docker/docker-compose.yml").exists(); - assertTrue(dockerComposeExists); - } + // // ./docker-compose.yml or ./docker/docker-compose.yml + // @Test public void checkDockerComposeExists() { + // boolean dockerComposeExists = new File("./docker-compose.yml").exists() || + // new File("./docker/docker-compose.yml").exists(); + // assertTrue(dockerComposeExists); + // } // ./.env_sample @Test public void checkEnvSampleExists() { diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 73336ef9..67d893a4 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -1,5 +1,7 @@ package com.sendgrid; +import com.fasterxml.jackson.databind.ObjectMapper; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; From 816451fd1ad6334e9235f11437a1b10d03f9b3ff Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 8 May 2018 11:06:38 -0700 Subject: [PATCH 195/439] Version Bump v4.2.1: Update to latest Jackson recommended dependency --- CHANGELOG.md | 4 ++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- bin/com/sendgrid/helpers/README.md | 2 +- build.gradle | 8 ++++---- pom.xml | 4 ++-- src/main/java/com/sendgrid/helpers/README.md | 2 +- 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f207e92..8694111a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.2.1] - 2018-05-08 +### Security Fix +- Update to latest Jackson recommended dependency, based on [this article](https://medium.com/@cowtowncoder/on-jackson-cves-dont-panic-here-is-what-you-need-to-know-54cd0d6e8062). + ## [4.2.0] - 2018-05-04 ### Added - [PR #275](https://github.com/sendgrid/sendgrid-java/pull/275/files): Add a way to verify that the content doesn't contain sensitive information -- BIG thanks to [Diego Camargo](https://github.com/belfazt) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 54f88f96..985d0371 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.2.0/sendgrid-4.2.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.2.0/sendgrid-4.2.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.2.1/sendgrid-4.2.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.2.1/sendgrid-4.2.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index ee22606f..995f7beb 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.2.0' + compile 'com.sendgrid:sendgrid-java:4.2.1' } repositories { @@ -85,7 +85,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.2.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.2.1/sendgrid-java.jar) ## Dependencies diff --git a/bin/com/sendgrid/helpers/README.md b/bin/com/sendgrid/helpers/README.md index 1bec4955..8a2b905d 100644 --- a/bin/com/sendgrid/helpers/README.md +++ b/bin/com/sendgrid/helpers/README.md @@ -10,7 +10,7 @@ Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples ```bash cd examples/mail -javac -classpath ../../build/libs/sendgrid-4.2.0-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.9.2.jar:../../build/libs/sendgrid-4.2.0-jar.jar:. Example +javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.9.5.jar:../../build/libs/sendgrid-4.1.0-jar.jar:. Example ``` ## Usage diff --git a/build.gradle b/build.gradle index 686bb182..5a8ba959 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.2.0' +version = '4.2.1' ext.packaging = 'jar' allprojects { @@ -46,9 +46,9 @@ buildscript { dependencies { compile 'com.sendgrid:java-http-client:4.1.0' - compile 'com.fasterxml.jackson.core:jackson-core:2.9.2' - compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.2' - compile 'com.fasterxml.jackson.core:jackson-databind:2.9.2' + compile 'com.fasterxml.jackson.core:jackson-core:2.9.5' + compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.5' + compile 'com.fasterxml.jackson.core:jackson-databind:2.9.5' testCompile group: 'junit', name: 'junit', version: '4.12' } diff --git a/pom.xml b/pom.xml index 0255d4cf..e6f0541c 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.2.0 + 4.2.1 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -20,7 +20,7 @@ - 2.9.2 + 2.9.5 https://github.com/sendgrid/sendgrid-java diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index 4c829e4a..8a2b905d 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -10,7 +10,7 @@ Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples ```bash cd examples/mail -javac -classpath ../../build/libs/sendgrid-3.2.0-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.2.0-jar.jar:. Example +javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.9.5.jar:../../build/libs/sendgrid-4.1.0-jar.jar:. Example ``` ## Usage From 5437db45144010bcf11cc092c3155109f1f15d04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Mon, 30 Jul 2018 10:36:06 -0300 Subject: [PATCH 196/439] Added dynamic_template_data property --- .../helpers/mail/objects/Personalization.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index e3646451..48aafea2 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -19,8 +19,9 @@ public class Personalization { @JsonProperty("headers") private Map headers; @JsonProperty("substitutions") private Map substitutions; @JsonProperty("custom_args") private Map customArgs; + @JsonProperty("dynamic_template_data") private Map dynamicTemplateData; @JsonProperty("send_at") private long sendAt; - + @JsonProperty("to") public List getTos() { if(tos == null) @@ -144,6 +145,22 @@ public void setSendAt(long sendAt) { this.sendAt = sendAt; } + @JsonProperty("dynamic_template_data") + public Map getDynamicTemplateData() { + if(dynamicTemplateData == null) + return Collections.emptyMap(); + return dynamicTemplateData; + } + + public void addDynamicTemplateData(String key, String value) { + if (dynamicTemplateData == null) { + dynamicTemplateData = new HashMap(); + dynamicTemplateData.put(key, value); + } else { + dynamicTemplateData.put(key, value); + } + } + @Override public int hashCode() { final int prime = 31; From 27206d02de5796498c59b9a8af6e5248f7bf9e60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Mon, 30 Jul 2018 10:38:00 -0300 Subject: [PATCH 197/439] Included generation of dynamic_template_data in testKitchenSink --- .../java/com/sendgrid/helpers/MailTest.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 67d893a4..fbae6b39 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -96,6 +96,38 @@ public void testKitchenSink() throws IOException { personalization2.setSendAt(1443636843); mail.addPersonalization(personalization2); + Personalization personalization3 = new Personalization(); + Email to3 = new Email(); + to3.setName("Example User"); + to3.setEmail("test@example.com"); + personalization3.addTo(to3); + to3.setName("Example User"); + to3.setEmail("test@example.com"); + personalization3.addTo(to3); + Email cc3 = new Email(); + cc3.setName("Example User"); + cc3.setEmail("test@example.com"); + personalization3.addCc(cc3); + cc3.setName("Example User"); + cc3.setEmail("test@example.com"); + personalization3.addCc(cc3); + Email bcc3 = new Email(); + bcc3.setName("Example User"); + bcc3.setEmail("test@example.com"); + personalization3.addBcc(bcc3); + bcc3.setName("Example User"); + bcc3.setEmail("test@example.com"); + personalization3.addBcc(bcc3); + personalization3.setSubject("Hello World from the Personalized SendGrid Java Library"); + personalization3.addHeader("X-Test", "test"); + personalization3.addHeader("X-Mock", "true"); + personalization3.addDynamicTemplateData("name", "Example User"); + personalization3.addDynamicTemplateData("city", "Denver"); + personalization3.addCustomArg("user_id", "343"); + personalization3.addCustomArg("type", "marketing"); + personalization3.setSendAt(1443636843); + mail.addPersonalization(personalization3); + Content content = new Content(); content.setType("text/plain"); content.setValue("some text here"); @@ -199,7 +231,7 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } @Test @@ -210,7 +242,7 @@ public void fromShouldReturnCorrectFrom() { Assert.assertSame(from, mail.getFrom()); } - + @Test public void mailDeserialization() throws IOException { Email to = new Email("foo@bar.com"); From 56c293ff0d70103d1d6ecd0f8fd11885ed150bb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Mon, 30 Jul 2018 10:39:31 -0300 Subject: [PATCH 198/439] Updated to demonstrate new Dynamic Templates using helper and renamed the current example to Legacy Templates --- USE_CASES.md | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/USE_CASES.md b/USE_CASES.md index 5ec48991..7eb4b1b1 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -7,12 +7,99 @@ This documentation provides examples for specific use cases. Please [open an iss * [How to View Email Statistics](#email_stats) -# Transactional Templates +# Dynamic Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. Template ID (replace with your own): +```text +d-2c214ac919e84170b21855cc129b4a5f +``` + +Template Body: + +```html + + + + + +Hello {{name}}, +

    +I'm glad you are trying out the template feature! +

    +I hope you are having a great day in {{city}} :) +

    + + +``` + +## With Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + Mail mail = new Mail(); + mail.setFrom(new Email("teste@example.com")); + mail.setTemplateId("d-2c214ac919e84170b21855cc129b4a5f"); + mail.personalization.get(0).addDynamicTemplateData("name", "Example User"); + mail.personalization.get(0).addDynamicTemplateData("city", "Denver"); + mail.personalization.get(0).addTo(new Email("test@example.com")); + mail.addPersonalization(personalization); + + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` + +## Without Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{\"from\":{\"email\":\"test@example.com\"},\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"dynamic_template_data\":{\"name\":\"Example User\",\"city\":\"Denver\"}}],\"template_id\":\"d-2c214ac919e84170b21855cc129b4a5f\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` + + +# Legacy Templates + +For this example, we assume you have created a [legacy template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. + +Template ID (replace with your own): + ```text 13b8f94f-bcae-4ec6-b752-70d6cb59f932 ``` From c2713449e0f2cceaade7dcb9e25380d934e3baff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Tue, 31 Jul 2018 19:47:42 -0300 Subject: [PATCH 199/439] Changed type parameter of dynamicTemplateData --- .../sendgrid/helpers/mail/objects/Personalization.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 48aafea2..c26057ce 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -19,7 +19,7 @@ public class Personalization { @JsonProperty("headers") private Map headers; @JsonProperty("substitutions") private Map substitutions; @JsonProperty("custom_args") private Map customArgs; - @JsonProperty("dynamic_template_data") private Map dynamicTemplateData; + @JsonProperty("dynamic_template_data") private Map dynamicTemplateData; @JsonProperty("send_at") private long sendAt; @JsonProperty("to") @@ -146,15 +146,15 @@ public void setSendAt(long sendAt) { } @JsonProperty("dynamic_template_data") - public Map getDynamicTemplateData() { + public Map getDynamicTemplateData() { if(dynamicTemplateData == null) - return Collections.emptyMap(); + return Collections.emptyMap(); return dynamicTemplateData; } - public void addDynamicTemplateData(String key, String value) { + public void addDynamicTemplateData(String key, Object value) { if (dynamicTemplateData == null) { - dynamicTemplateData = new HashMap(); + dynamicTemplateData = new HashMap(); dynamicTemplateData.put(key, value); } else { dynamicTemplateData.put(key, value); From b8710435fcbe891f8faadcf2fa776fefa478cc5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Tue, 31 Jul 2018 19:49:12 -0300 Subject: [PATCH 200/439] Included generation of more complex dynamic template data to testKitchenSink --- .../java/com/sendgrid/helpers/MailTest.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index fbae6b39..40ac75ce 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -6,6 +6,11 @@ import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import java.io.IOException; public class MailTest { @@ -121,8 +126,18 @@ public void testKitchenSink() throws IOException { personalization3.setSubject("Hello World from the Personalized SendGrid Java Library"); personalization3.addHeader("X-Test", "test"); personalization3.addHeader("X-Mock", "true"); + List> items = new ArrayList<>(); + Map item1 = new HashMap<>(); + item1.put("text", "New Line Sneakers"); + item1.put("price", "$ 79.95"); + items.add(item1); + Map item2 = new HashMap<>(); + item2.put("text", "Old Line Sneakers"); + item1.put("price", "$ 59.95"); + items.add(item2); personalization3.addDynamicTemplateData("name", "Example User"); personalization3.addDynamicTemplateData("city", "Denver"); + personalization3.addDynamicTemplateData("items", items); personalization3.addCustomArg("user_id", "343"); personalization3.addCustomArg("type", "marketing"); personalization3.setSendAt(1443636843); @@ -231,7 +246,7 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"items\":[{\"price\":\"$ 59.95\",\"text\":\"New Line Sneakers\"},{\"text\":\"Old Line Sneakers\"}],\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } @Test From 74962e5d9fbbad18c9fb5a75d98b41bd4f4b2e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Wed, 1 Aug 2018 22:46:07 -0300 Subject: [PATCH 201/439] Refactor in getDynamicemplateData --- .../com/sendgrid/helpers/mail/objects/Personalization.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index c26057ce..816d1241 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -147,9 +147,8 @@ public void setSendAt(long sendAt) { @JsonProperty("dynamic_template_data") public Map getDynamicTemplateData() { - if(dynamicTemplateData == null) - return Collections.emptyMap(); - return dynamicTemplateData; + return dynamicTemplateData == null + ? Collections.emptyMap() : dynamicTemplateData; } public void addDynamicTemplateData(String key, Object value) { From 07b0be29e495a19c3bcfb8699e81e2e4af27da67 Mon Sep 17 00:00:00 2001 From: Anshul Singhal Date: Tue, 7 Aug 2018 09:56:12 -0700 Subject: [PATCH 202/439] Added coders tag --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 995f7beb..48bcc302 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) +[![Open Source Helpers](https://www.codetriage.com/sendgrid/sendgrid-java/badges/users.svg)](https://www.codetriage.com/sendgrid/sendgrid-java) [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.txt) **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. From cced93c069eb97f8b04e8b74f03d8b032e779d67 Mon Sep 17 00:00:00 2001 From: Anshul Singhal <1997anshul@gmail.com> Date: Fri, 10 Aug 2018 16:19:49 -0700 Subject: [PATCH 203/439] Readability update --- CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 985d0371..ff9c0222 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -168,8 +168,10 @@ Please run your code through: ```bash # Clone your fork of the repo into the current directory git clone https://github.com/sendgrid/sendgrid-java + # Navigate to the newly cloned directory cd sendgrid-java + # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/sendgrid/sendgrid-java ``` From 96655f39e1a4f45c9406736d8f22013e6a712996 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 20 Aug 2018 18:14:18 -0700 Subject: [PATCH 204/439] Update USE_CASES.md --- USE_CASES.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/USE_CASES.md b/USE_CASES.md index 5ec48991..65310908 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -7,7 +7,9 @@ This documentation provides examples for specific use cases. Please [open an iss * [How to View Email Statistics](#email_stats) -# Transactional Templates +# (LEGACY) Transactional Templates + +IF YOU ARE USING OUR NEW TEMPLATES, PLEASE SEE [THIS ISSUE](https://github.com/sendgrid/sendgrid-java/issues/447). For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. From ff0dc1bcd4baccab1f3e82fe6006e530470d882a Mon Sep 17 00:00:00 2001 From: af4ro <1997anshul@gmail.com> Date: Tue, 21 Aug 2018 11:53:39 -0700 Subject: [PATCH 205/439] Fixed import errors --- .../java/com/sendgrid/TestRequiredFilesExist.java | 2 ++ .../java/com/sendgrid/helpers/ContentTest.java | 3 ++- .../mail/objects/SettingsSerializationTest.java | 14 +++++++------- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index f503c424..928758b9 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -1,3 +1,5 @@ +package com.sendgrid; + import org.junit.Test; import java.io.File; diff --git a/src/test/java/com/sendgrid/helpers/ContentTest.java b/src/test/java/com/sendgrid/helpers/ContentTest.java index 05e2328c..c83b0d2e 100644 --- a/src/test/java/com/sendgrid/helpers/ContentTest.java +++ b/src/test/java/com/sendgrid/helpers/ContentTest.java @@ -1,9 +1,10 @@ -package com.sendgrid; +package com.sendgrid.helpers; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import com.sendgrid.helpers.mail.objects.Content; import org.junit.rules.ExpectedException; import java.util.ArrayList; diff --git a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java index 74e6c8b5..27878162 100644 --- a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java +++ b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java @@ -1,13 +1,13 @@ package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.BccSettings; -import com.sendgrid.ClickTrackingSetting; -import com.sendgrid.FooterSetting; -import com.sendgrid.GoogleAnalyticsSetting; -import com.sendgrid.OpenTrackingSetting; -import com.sendgrid.SpamCheckSetting; -import com.sendgrid.SubscriptionTrackingSetting; +import com.sendgrid.helpers.mail.objects.BccSettings; +import com.sendgrid.helpers.mail.objects.ClickTrackingSetting; +import com.sendgrid.helpers.mail.objects.FooterSetting; +import com.sendgrid.helpers.mail.objects.GoogleAnalyticsSetting; +import com.sendgrid.helpers.mail.objects.OpenTrackingSetting; +import com.sendgrid.helpers.mail.objects.SpamCheckSetting; +import com.sendgrid.helpers.mail.objects.SubscriptionTrackingSetting; import org.junit.Assert; import org.junit.Test; From 994fdba5dcb849983b667c3bc926db953009c048 Mon Sep 17 00:00:00 2001 From: af4ro <1997anshul@gmail.com> Date: Tue, 21 Aug 2018 13:52:36 -0700 Subject: [PATCH 206/439] examples and minor code changes --- USE_CASES.md | 93 ++++++++++++------- docker/Dockerfile | 2 +- docker/USAGE.md | 5 +- examples/helpers/mail/Example.java | 44 ++++++++- .../helpers/mail/objects/Personalization.java | 4 +- 5 files changed, 106 insertions(+), 42 deletions(-) diff --git a/USE_CASES.md b/USE_CASES.md index 7eb4b1b1..204f74ce 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -2,12 +2,13 @@ This documentation provides examples for specific use cases. Please [open an iss # Table of Contents -* [Transactional Templates](#transactional_templates) -* [How to Setup a Domain Whitelabel](#domain_whitelabel) -* [How to View Email Statistics](#email_stats) +* [Transactional Templates](#transactional-templates) +* [Legacy Templates](#legacy-templates) +* [How to Setup a Domain Whitelabel](#domain-whitelabel) +* [How to View Email Statistics](#email-stats) -# Dynamic Templates +# Transactional Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. @@ -21,17 +22,17 @@ Template Body: ```html - - - - -Hello {{name}}, -

    -I'm glad you are trying out the template feature! -

    -I hope you are having a great day in {{city}} :) -

    - + + + + + Hello {{name}}, +

    + I'm glad you are trying out the template feature! +

    + I hope you are having a great day in {{city}} :) +

    + ``` @@ -46,9 +47,11 @@ public class Example { Mail mail = new Mail(); mail.setFrom(new Email("teste@example.com")); mail.setTemplateId("d-2c214ac919e84170b21855cc129b4a5f"); - mail.personalization.get(0).addDynamicTemplateData("name", "Example User"); - mail.personalization.get(0).addDynamicTemplateData("city", "Denver"); - mail.personalization.get(0).addTo(new Email("test@example.com")); + + Personalization personalization = new Personalization(); + personalization.addDynamicTemplateData("name", "Example User"); + personalization.addDynamicTemplateData("city", "Denver"); + personalization.addTo(new Email("test@example.com")); mail.addPersonalization(personalization); SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -81,7 +84,14 @@ public class Example { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"from\":{\"email\":\"test@example.com\"},\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"dynamic_template_data\":{\"name\":\"Example User\",\"city\":\"Denver\"}}],\"template_id\":\"d-2c214ac919e84170b21855cc129b4a5f\"}"); + request.setBody("{ + \"from\": {\"email\": \"test@example.com\"}, + \"personalizations\": + [{ + \"to\": [{\"email\": \"test@example.com\"}], + \"dynamic_template_data\": {\"name\": \"Example User\", \"city\": \"Denver\"} + }], + \"template_id\": \"d-2c214ac919e84170b21855cc129b4a5f\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -114,19 +124,19 @@ Template Body: ```html - - - - -Hello -name-, -

    -I'm glad you are trying out the template feature! -

    -<%body%> -

    -I hope you are having a great day in -city- :) -

    - + + + + + Hello -name-, +

    + I'm glad you are trying out the template feature! +

    + <%body%> +

    + I hope you are having a great day in -city- :) +

    + ``` @@ -177,7 +187,20 @@ public class Example { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"substitutions\":{\"-name-\":\"Example User\",\"-city-\":\"Denver\"},\"subject\":\"Hello World from the SendGrid Java Library!\"}],\"from\":{\"email\":\"test@example.com\"},\"content\":[{\"type\":\"text/html\",\"value\": \"I'm replacing the body tag\"}],\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); + request.setBody("{ + \"personalizations\": + [{ + \"to\": [{\"email\": \"test@example.com\"}], + \"substitutions\": {\"-name-\": \"Example User\", \"-city-\": \"Denver\"}, + \"subject\": \"Hello World from the SendGrid Java Library!\" + }], + \"from\": {\"email\": \"test@example.com\"}, + \"content\": + [{ + \"type\": \"text/html\", + \"value\": \"I'm replacing the body tag\" + }] + ,\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -189,14 +212,14 @@ public class Example { } ``` - + # How to Setup a Domain Whitelabel You can find documentation for how to setup a domain whitelabel via the UI [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/setup_domain_whitelabel.html) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#whitelabel). Find more information about all of SendGrid's whitelabeling related documentation [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/index.html). - + # How to View Email Statistics You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#stats). diff --git a/docker/Dockerfile b/docker/Dockerfile index 943b2b50..66599a60 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,7 +16,7 @@ RUN chmod +x ./install.sh && \ WORKDIR /root/sources RUN git clone https://github.com/sendgrid/sendgrid-java.git WORKDIR /root -RUN ln -s /root/sources/sendgrid-java/sendgrid +RUN ln -s /root/sources/sendgrid-java COPY entrypoint.sh entrypoint.sh RUN chmod +x entrypoint.sh diff --git a/docker/USAGE.md b/docker/USAGE.md index 125b90fe..0cb27fee 100644 --- a/docker/USAGE.md +++ b/docker/USAGE.md @@ -23,7 +23,10 @@ You can mount repositories in the `/mnt/sendgrid-java` and `/mnt/java-http-clien # Testing -Testing is easy! Run the container, `cd sendgrid`, and run `./gradlew test`. +Testing is easy! +1. Run the container: `docker run -it sendgrid/sendgrid-java` +2. `cd sendgrid-java` +3. run `./gradlew test` # About diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index d595d0d3..77c73eb2 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -207,6 +207,26 @@ public static Mail buildKitchenSink() throws IOException { return mail; } + // API V3 Dynamic Template implementation + public static Mail buildDynamicTemplate() throws IOException { + Mail mail = new Mail(); + + Email fromEmail = new Email(); + fromEmail.setName("Example User"); + fromEmail.setEmail("test@example.com"); + mail.setFrom(fromEmail); + + mail.setTemplateId("d-c6dcf1f72bdd4beeb15a9aa6c72fcd2c"); + + Personalization personalization = new Personalization(); + personalization.addDynamicTemplateData("name", "Example User"); + personalization.addDynamicTemplateData("city", "Denver"); + personalization.addTo(new Email("test@example.com")); + mail.addPersonalization(personalization); + + return mail; + } + // Minimum required to send an email public static Mail buildHelloEmail() throws IOException { Email from = new Email("test@example.com"); @@ -261,8 +281,28 @@ public static void kitchenSinkExample() throws IOException { } } + public static void dynamicTemplateExample() throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + sg.addRequestHeader("X-Mock", "true"); + + Request request = new Request(); + Mail dynamicTemplate = buildDynamicTemplate(); + try { + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(dynamicTemplate.build()); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } + public static void main(String[] args) throws IOException { - baselineExample(); - kitchenSinkExample(); + // baselineExample(); + // kitchenSinkExample(); + dynamicTemplateExample(); } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 816d1241..3ace82ff 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -154,10 +154,8 @@ public Map getDynamicTemplateData() { public void addDynamicTemplateData(String key, Object value) { if (dynamicTemplateData == null) { dynamicTemplateData = new HashMap(); - dynamicTemplateData.put(key, value); - } else { - dynamicTemplateData.put(key, value); } + dynamicTemplateData.put(key, value); } @Override From 83c449a857137b6c420c3c2156f95ad0543594ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ros=C3=A1rio=20Pereira=20Fernandes?= Date: Mon, 1 Oct 2018 01:46:04 +0200 Subject: [PATCH 207/439] Update README.md Replace compile with implementation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 48bcc302..a2154351 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.2.1' + implementation 'com.sendgrid:sendgrid-java:4.2.1' } repositories { From 18d1dcece1f5e0a0e09efa9057367a85dd847d1a Mon Sep 17 00:00:00 2001 From: Bharat Raghunathan Date: Mon, 1 Oct 2018 10:17:44 +0530 Subject: [PATCH 208/439] Link to the online version of CLA in README.md Link to signable online version of CLA instead of a copy of the CLA for convenience --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 48bcc302..4c183b9c 100644 --- a/README.md +++ b/README.md @@ -219,7 +219,7 @@ Quick links: - [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) - [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) -- [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#cla) +- [Sign the CLA to Create a Pull Request](https://cla.sendgrid.com/sendgrid/sendgrid-java) - [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) From 62851d5c8892af06b65fd412b0fa3466b6a659f0 Mon Sep 17 00:00:00 2001 From: Bharat123Rox Date: Wed, 3 Oct 2018 17:20:11 +0530 Subject: [PATCH 209/439] Fix alphabetical order --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c183b9c..6dda22b2 100644 --- a/README.md +++ b/README.md @@ -219,8 +219,8 @@ Quick links: - [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) - [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) -- [Sign the CLA to Create a Pull Request](https://cla.sendgrid.com/sendgrid/sendgrid-java) - [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) +- [Sign the CLA to Create a Pull Request](https://cla.sendgrid.com/sendgrid/sendgrid-java) # Troubleshooting From a448f483bfb063a863b39e7877283e0747ea1449 Mon Sep 17 00:00:00 2001 From: Bharat123Rox Date: Wed, 3 Oct 2018 17:23:56 +0530 Subject: [PATCH 210/439] Fix email mention --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6dda22b2..86add9f2 100644 --- a/README.md +++ b/README.md @@ -230,7 +230,9 @@ Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java # About -sendgrid-java is guided and supported by the SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). +sendgrid-java is guided and supported by the SendGrid Developer Experience Team. + +Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. From ca9be79665a52f611e2039348dcdb1ebd32355a9 Mon Sep 17 00:00:00 2001 From: Nathan Seebarran Date: Thu, 4 Oct 2018 20:40:44 -0400 Subject: [PATCH 211/439] Fix formatting of README in examples/accesssettings --- examples/accesssettings/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/accesssettings/README.md b/examples/accesssettings/README.md index 05d64211..f68dc86f 100644 --- a/examples/accesssettings/README.md +++ b/examples/accesssettings/README.md @@ -1,10 +1,10 @@ ![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) - + - +This folder contains various examples on using the ACCESS_SETTINGS endpoint of SendGrid with Java: - + - +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettings.java) - +* [Retrieve a specific whitelisted IP (GET /access_settings/whitelist/{rule_id})](GetIPFromAccessSettings.java) - +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettingsActivity.java) - +* [Remove a specific IP from the whitelist (DELETE /access_settings/whitelist/{rule_id}](DeleteIPFromAccessSettings.java) - +* [Remove one or more IPs from the whitelist (DELETE /access_settings/whitelist)](DeleteAccessSettings.java) - +* [Add one or more IPs to the whitelist (POST /access_settings/whitelist)](CreateAccessSettings.java) \ No newline at end of file + +This folder contains various examples on using the ACCESS_SETTINGS endpoint of SendGrid with Java: + +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettings.java) +* [Retrieve a specific whitelisted IP (GET /access_settings/whitelist/{rule_id})](GetIPFromAccessSettings.java) +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettingsActivity.java) +* [Remove a specific IP from the whitelist (DELETE /access_settings/whitelist/{rule_id}](DeleteIPFromAccessSettings.java) +* [Remove one or more IPs from the whitelist (DELETE /access_settings/whitelist)](DeleteAccessSettings.java) +* [Add one or more IPs to the whitelist (POST /access_settings/whitelist)](CreateAccessSettings.java) From c23507d014dfa70b69486b286e3a6c5820ec5173 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 11 Oct 2018 16:07:15 -0700 Subject: [PATCH 212/439] Update Docker run path --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 943b2b50..66599a60 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,7 +16,7 @@ RUN chmod +x ./install.sh && \ WORKDIR /root/sources RUN git clone https://github.com/sendgrid/sendgrid-java.git WORKDIR /root -RUN ln -s /root/sources/sendgrid-java/sendgrid +RUN ln -s /root/sources/sendgrid-java COPY entrypoint.sh entrypoint.sh RUN chmod +x entrypoint.sh From 7591ceb445de396cf5b366605bf88859f5965d09 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 11 Oct 2018 16:28:14 -0700 Subject: [PATCH 213/439] Version Bump v4.3.0: Dynamic Template support --- CHANGELOG.md | 12 ++++++++++++ CONTRIBUTING.md | 16 +++++++++++----- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8694111a..27e2adc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.3.0] - 2018-10-11 +### Added +- [PR #449](https://github.com/sendgrid/sendgrid-java/pull/449/files): Dynamic Templates support -- BIG thanks to [Marcus Vinícius](https://github.com/Markuus13) +- [PR #451](https://github.com/sendgrid/sendgrid-java/pull/451/files): Added CodeTriage tag -- BIG thanks to [Anshul Singhal](https://github.com/af4ro) +- [PR #453](https://github.com/sendgrid/sendgrid-java/pull/453/files): Documentation readability update -- BIG thanks to [Anshul Singhal](https://github.com/af4ro) +- [PR #461](https://github.com/sendgrid/sendgrid-java/pull/461/files): Update README to use implementation instead of compile -- BIG thanks to [Rosário Pereira Fernandes](https://github.com/rosariopfernandes) +- [PR #463](https://github.com/sendgrid/sendgrid-java/pull/463/files): Link to the online version of CLA in README.md -- BIG thanks to [Bharat Raghunathan](https://github.com/Bharat123rox) + +### Fix +- [PR #358](https://github.com/sendgrid/sendgrid-java/pull/358): Fixing similar code issue in examples/ips/ips.java -- BIG thanks to [Julian Jacques Maurer](https://github.com/derjayjay) +- [PR #475](https://github.com/sendgrid/sendgrid-java/pull/475): Fix formatting of README in examples/accesssettings -- BIG thanks to [Nathan Seebarran](https://github.com/nathan78906) + ## [4.2.1] - 2018-05-08 ### Security Fix - Update to latest Jackson recommended dependency, based on [this article](https://medium.com/@cowtowncoder/on-jackson-cves-dont-panic-here-is-what-you-need-to-know-54cd0d6e8062). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ff9c0222..91668795 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,13 +1,19 @@ Hello! Thank you for choosing to help contribute to one of the SendGrid open source libraries. There are many ways you can contribute and help is always welcome. We simply ask that you follow the following contribution policies. -- [CLAs and CCLAs](#cla) -- [Roadmap & Milestones](#roadmap) +- [CLAs and CCLAs](#clas-and-cclas) - [Feature Request](#feature-request) - [Submit a Bug Report](#submit-a-bug-report) + - [Please use our Bug Report Template](#please-use-our-bug-report-template) - [Improvements to the Codebase](#improvements-to-the-codebase) -- [Understanding the Code Base](#understanding-the-codebase) + - [Development Environment](#development-environment) + - [Install and Run Locally](#install-and-run-locally) + - [Prerequisites](#prerequisites) + - [Initial setup:](#initial-setup) +- [Environment Variables](#environment-variables) + - [Execute:](#execute) +- [Understanding the Code Base](#understanding-the-code-base) - [Testing](#testing) -- [Style Guidelines & Naming Conventions](#style-guidelines-and-naming-conventions) +- [Style Guidelines & Naming Conventions](#style-guidelines--naming-conventions) - [Creating a Pull Request](#creating-a-pull-request) @@ -102,7 +108,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.2.1/sendgrid-4.2.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.2.1/sendgrid-4.2.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.3.0/sendgrid-4.3.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.3.0/sendgrid-4.3.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 6a08285b..b4e1566f 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.2.1' + implementation 'com.sendgrid:sendgrid-java:4.3.0' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.2.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.3.0/sendgrid-java.jar) ## Dependencies diff --git a/build.gradle b/build.gradle index 5a8ba959..149f8a6b 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.2.1' +version = '4.3.0' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index e6f0541c..6a6619fa 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.2.1 + 4.3.0 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java From ba77a01526cc1d10ea719ed7a5f0561110e9bede Mon Sep 17 00:00:00 2001 From: Rohit-T Date: Thu, 11 Oct 2018 22:38:24 -0400 Subject: [PATCH 214/439] Add ability to impersonate subusers SendGrid API has a feature that allows a parent account to impersonate subusers by including an HTTP header "on-behalf-of" in the API request. This commit enables users to use impersonation. --- src/main/java/com/sendgrid/SendGrid.java | 28 +++++++++++++++++++ src/test/java/com/sendgrid/SendGridTest.java | 29 ++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 4bcdadc5..f1686516 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -41,6 +41,9 @@ public class SendGrid implements SendGridAPI { /** The number of milliseconds to sleep between retries. */ private int rateLimitSleep; + /** The subuser to be impersonated. */ + private String subuser; + /** * Construct a new SendGrid API wrapper. * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys @@ -193,6 +196,31 @@ public void setRateLimitSleep(int rateLimitSleep) { this.rateLimitSleep = rateLimitSleep; } + /** + * Impersonate subuser for subsequent requests + * @param subuser the subuser to be impersonated + */ + public void addImpersonateSubuser(String subuser) { + this.subuser = subuser; + this.addRequestHeader("on-behalf-of", subuser); + } + + /** + * Stop Impersonating the subuser + */ + public void removeImpersonateSubuser() { + this.subuser = null; + this.removeRequestHeader("on-behalf-of"); + } + + /** + * Get the impersonated subuser or null if empty + * @return the impersonated subuser + */ + public String getImpersonateSubuser() { + return this.subuser; + } + /** * Makes the call to the SendGrid API, override this method for testing. * @param request the request to make. diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 7a3e9b22..1873be71 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -3406,4 +3406,33 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { Assert.assertEquals(200, response.getStatusCode()); } + @Test + public void test_add_impersonate_subuser() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + + sg.addImpersonateSubuser("subusername"); + Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); + } + + @Test + public void test_remove_impersonate_subuser() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + + sg.addImpersonateSubuser("subusername"); + Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); + + sg.removeImpersonateSubuser(); + Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), null); + } + + @Test + public void test_get_impersonate_subuser() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + + sg.addImpersonateSubuser("subusername"); + Assert.assertEquals(sg.getImpersonateSubuser(), "subusername"); + + sg.removeImpersonateSubuser(); + Assert.assertEquals(sg.getImpersonateSubuser(), null); + } } From 8a97abe696e845f781e849e7c23abe2fd99af23a Mon Sep 17 00:00:00 2001 From: Kyle Roberts Date: Fri, 12 Oct 2018 08:01:23 -0600 Subject: [PATCH 215/439] Update USE_CASES.md Removed some parts that would be confusing about new dynamic templates. --- USE_CASES.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/USE_CASES.md b/USE_CASES.md index 5816669e..204f74ce 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -8,9 +8,7 @@ This documentation provides examples for specific use cases. Please [open an iss * [How to View Email Statistics](#email-stats) -# (LEGACY) Transactional Templates - -IF YOU ARE USING OUR NEW TEMPLATES, PLEASE SEE [THIS ISSUE](https://github.com/sendgrid/sendgrid-java/issues/447). +# Transactional Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. From 58ae93a52e5ae512caf0f49ec4da16ad49bb362a Mon Sep 17 00:00:00 2001 From: Kyle Roberts Date: Fri, 12 Oct 2018 15:26:46 -0600 Subject: [PATCH 216/439] Update USE_CASES.md Was missing the subject in the template and the dynamic data for the subject. --- USE_CASES.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/USE_CASES.md b/USE_CASES.md index 204f74ce..0ba2aeb1 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -17,7 +17,11 @@ Template ID (replace with your own): ```text d-2c214ac919e84170b21855cc129b4a5f ``` +Email Subject: +```text +{{subject}} +``` Template Body: ```html @@ -49,6 +53,7 @@ public class Example { mail.setTemplateId("d-2c214ac919e84170b21855cc129b4a5f"); Personalization personalization = new Personalization(); + personalization.addDynamicTemplateData("subject", "Testing Templates"); personalization.addDynamicTemplateData("name", "Example User"); personalization.addDynamicTemplateData("city", "Denver"); personalization.addTo(new Email("test@example.com")); @@ -89,7 +94,7 @@ public class Example { \"personalizations\": [{ \"to\": [{\"email\": \"test@example.com\"}], - \"dynamic_template_data\": {\"name\": \"Example User\", \"city\": \"Denver\"} + \"dynamic_template_data\": {\"subject\": \"Testing Templates\",\"name\": \"Example User\", \"city\": \"Denver\"} }], \"template_id\": \"d-2c214ac919e84170b21855cc129b4a5f\"}"); Response response = sg.api(request); From e160d8f9bd982dcc4c8695cdab484fc86858badd Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sat, 13 Oct 2018 18:03:03 +0300 Subject: [PATCH 217/439] Update CONTRIBUTING - using gitflow workflow, development branch instead master --- .github/PULL_REQUEST_TEMPLATE | 2 +- CONTRIBUTING.md | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index ba377ae7..bd65d2ff 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -12,7 +12,7 @@ Closes #2 ### Checklist - [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) - [ ] I have read the [Contribution Guide] and my PR follows them. -- [ ] I updated my branch with the master branch. +- [ ] I updated my branch with the development branch. - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have added necessary documentation about the functionality in the appropriate .md file - [ ] I have added in line documentation to the code I modified diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 91668795..230fab0b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -Hello! Thank you for choosing to help contribute to one of the SendGrid open source libraries. There are many ways you can contribute and help is always welcome. We simply ask that you follow the following contribution policies. +Hello! Thank you for choosing to help contribute to one of the SendGrid open source libraries. There are many ways you can contribute and help is always welcome. We simply ask that you follow the following contribution policies. - [CLAs and CCLAs](#clas-and-cclas) - [Feature Request](#feature-request) @@ -64,6 +64,8 @@ In order to make the process easier, we've included a [sample bug report templat We welcome direct contributions to the sendgrid-java code base. Thank you! +Please note that we utilize the [Gitflow Workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) for Git to help keep project development organized and consistent. + ### Development Environment ### #### Install and Run Locally #### @@ -193,7 +195,7 @@ Please run your code through: contain your feature, change, or fix: ```bash - git checkout -b + git checkout -b development ``` 4. Commit your changes in logical chunks. Please adhere to these [git commit @@ -206,10 +208,10 @@ Please run your code through: 4b. Create or update the example code that demonstrates the functionality of this change to the code. -5. Locally merge (or rebase) the upstream development branch into your topic branch: +5. Locally merge (or rebase) the upstream `development` branch into your topic branch: ```bash - git pull [--rebase] upstream master + git pull [--rebase] upstream development ``` 6. Push your topic branch up to your fork: @@ -219,6 +221,6 @@ Please run your code through: ``` 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) - with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. + with a clear title and description against the `development` branch. All tests must be passing before we will review the PR. If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. From 4b1d7a3933c64f749881e0ccded518e147bb549b Mon Sep 17 00:00:00 2001 From: Andrew Joshua Loria Date: Wed, 17 Oct 2018 14:30:31 -0700 Subject: [PATCH 218/439] Update TROUBLESHOOTING.md Fixed broken link. --- TROUBLESHOOTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index e510304b..cc899ebc 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -50,7 +50,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies ## Testing v3 /mail/send Calls Directly -[Here](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/curl_examples.html) are some cURL examples for common use cases. +[Here](https://sendgrid.com/docs/for-developers/sending-email/curl-examples/) are some cURL examples for common use cases. ## Versions @@ -108,4 +108,4 @@ You can do this right before you call `request.setBody(mail.build())` like so: ```java System.out.println(mail.build()); -``` \ No newline at end of file +``` From 0865590f1df2ecf604d0b0354ad67032cea92c4e Mon Sep 17 00:00:00 2001 From: Chandler Weiner Date: Thu, 25 Oct 2018 17:04:23 -0400 Subject: [PATCH 219/439] Fix link to LICENSE.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4e1566f..ef4b904c 100644 --- a/README.md +++ b/README.md @@ -237,4 +237,4 @@ Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in cas sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. # License -[The MIT License (MIT)](LICENSE.txt) +[The MIT License (MIT)](LICENSE.md) From 1e4e11d11cc93b76eae97331df330e3345f5b086 Mon Sep 17 00:00:00 2001 From: Chandler Weiner Date: Fri, 26 Oct 2018 11:41:43 -0400 Subject: [PATCH 220/439] Fix MIT LICENSE Badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ef4b904c..c6b4ba10 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) [![Open Source Helpers](https://www.codetriage.com/sendgrid/sendgrid-java/badges/users.svg)](https://www.codetriage.com/sendgrid/sendgrid-java) -[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.txt) +[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.md) **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. From bf0e731bfa5c1858077dc30071d8a2eb1843abba Mon Sep 17 00:00:00 2001 From: Rishabh Chaudhary Date: Tue, 30 Oct 2018 00:42:07 +0530 Subject: [PATCH 221/439] Updating the prerequisites --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4e1566f..938d48a9 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) +- The SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 40,000 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables From 3eb85a4a92516f454184f085c9069697fbe3f995 Mon Sep 17 00:00:00 2001 From: chandler Date: Wed, 31 Oct 2018 15:48:58 -0400 Subject: [PATCH 222/439] Remove references to 'whitelabel' Signed-off-by: chandler --- USAGE.md | 1971 ++++++++--------- USE_CASES.md | 10 +- .../domains.java | 24 +- .../ips.java | 10 +- .../links.java | 20 +- 5 files changed, 1017 insertions(+), 1018 deletions(-) rename examples/{whitelabel => senderauthentication}/domains.java (94%) rename examples/{whitelabel => senderauthentication}/ips.java (95%) rename examples/{whitelabel => senderauthentication}/links.java (95%) diff --git a/USAGE.md b/USAGE.md index cf25b2c6..f31ea17d 100644 --- a/USAGE.md +++ b/USAGE.md @@ -40,13 +40,13 @@ public class Example { * [PARTNER SETTINGS](#partner-settings) * [SCOPES](#scopes) * [SENDERS](#senders) +* [SENDER AUTHENTICATION](#sender-authentication) * [STATS](#stats) * [SUBUSERS](#subusers) * [SUPPRESSION](#suppression) * [TEMPLATES](#templates) * [TRACKING SETTINGS](#tracking-settings) * [USER](#user) -* [WHITELABEL](#whitelabel) @@ -2258,7 +2258,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act **This endpoint allows you to retrieve a list of all assigned and unassigned IPs.** -Response includes warm up status, pools, assigned subusers, and whitelabel info. The start_date field corresponds to when warmup started for that IP. +Response includes warm up status, pools, assigned subusers, and authorization info. The start_date field corresponds to when warmup started for that IP. A single IP address or a range of IP addresses may be dedicated to an account in order to send email for multiple domains. The reputation of this IP is based on the aggregate performance of all the senders who use it. @@ -3349,7 +3349,7 @@ API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://s *You may create up to 100 unique sender identities.* -Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. ### POST /senders @@ -3373,7 +3373,7 @@ Sender Identities are required to be verified before use. If your domain has bee **This endpoint allows you to retrieve a list of all sender identities that have been created for your account.** -Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. ### GET /senders @@ -3396,7 +3396,7 @@ Sender Identities are required to be verified before use. If your domain has bee **This endpoint allows you to update a sender identity.** -Updates to `from.email` require re-verification. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Updates to `from.email` require re-verification. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. Partial updates are allowed, but fields that are marked as "required" in the POST (create) endpoint must not be nil if that field is included in the PATCH request. @@ -3422,7 +3422,7 @@ Partial updates are allowed, but fields that are marked as "required" in the POS **This endpoint allows you to retrieve a specific sender identity.** -Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. ### GET /senders/{sender_id} @@ -3445,7 +3445,7 @@ Sender Identities are required to be verified before use. If your domain has bee **This endpoint allows you to delete one of your sender identities.** -Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. ### DELETE /senders/{sender_id} @@ -3468,7 +3468,7 @@ Sender Identities are required to be verified before use. If your domain has bee **This endpoint allows you to resend a sender identity verification email.** -Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. ### POST /senders/{sender_id}/resend_verification @@ -3487,29 +3487,31 @@ Sender Identities are required to be verified before use. If your domain has bee throw ex; } ``` - -# STATS + +# SENDER AUTHENTICATION -## Retrieve global email statistics +## Create an authenticated domain. -**This endpoint allows you to retrieve all of your global email statistics between a given date range.** +**This endpoint allows you to create a domain authentication for one of your domains.** -Parent accounts will see aggregated stats for their account and all subuser accounts. Subuser accounts will only see their own stats. +If you are creating a domain authentication that you would like a subuser to use, you have two options: +1. Use the "username" parameter. This allows you to create am authenticated subuser. This means the subuser is able to see and modify the created authentication. +2. Use the Association workflow (see Associate Domain section). This allows you to assign a domain authentication created by the parent to a subuser. This means the subuser will default to the assigned domain authentication, but will not be able to see or modify that authentication. However, if the subuser creates their own domain authentication it will overwrite the assigned domain authentication. -### GET /stats +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) + +### POST /whitelabel/domains ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("stats"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("offset", "1"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic)_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3518,28 +3520,28 @@ Parent accounts will see aggregated stats for their account and all subuser acco throw ex; } ``` - -# SUBUSERS - -## Create Subuser +## List all domain authentications. -This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. +**This endpoint allows you to retrieve a list of all domain authentications you have created.** -For more information about Subusers: +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) -* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### POST /subusers +### GET /whitelabel/domains ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("subusers"); - request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\)":\"John@example.com\"}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("domain", "test_string"); + request.addQueryParam("exclude_subusers", "true"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3548,16 +3550,20 @@ For more information about Subusers: throw ex; } ``` -## List all Subusers +## Get the default domain authentication. -This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. +**This endpoint allows you to retrieve the default authentication for a domain.** -For more information about Subusers: +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) -* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### GET /subusers +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| domain | string |The domain to find a default domain whitelabel for. | + +### GET /whitelabel/domains/default ```java @@ -3565,10 +3571,7 @@ For more information about Subusers: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("subusers"); - request.addQueryParam("username", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); + request.setEndpoint("whitelabel/domains/default"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3577,13 +3580,22 @@ For more information about Subusers: throw ex; } ``` -## Retrieve Subuser Reputations +## List the domain authentication associated with the given user. -Subuser sender reputations give a good idea how well a sender is doing with regards to how recipients and recipient servers react to the mail that is being received. When a bounce, spam report, or other negative action happens on a sent email, it will effect your sender rating. +**This endpoint allows you to retrieve all of the domain authentications that have been assigned to a specific subuser.** -This endpoint allows you to request the reputations for your subusers. +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -### GET /subusers/reputations +Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. + +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| username | string | Username of the subuser to find associated whitelabels for. | + +### GET /whitelabel/domains/subuser ```java @@ -3591,8 +3603,7 @@ This endpoint allows you to request the reputations for your subusers. SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("subusers/reputations"); - request.addQueryParam("usernames", "test_string"); + request.setEndpoint("whitelabel/domains/subuser"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3601,31 +3612,30 @@ This endpoint allows you to request the reputations for your subusers. throw ex; } ``` -## Retrieve email statistics for your subusers. +## Disassociate a domain authentication from a given user. -**This endpoint allows you to retrieve the email statistics for the given subusers.** +**This endpoint allows you to disassociate a specific domain authentication from a subuser.** -You may retrieve statistics for up to 10 different subusers by including an additional _subusers_ parameter for each additional subuser. +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. +Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. -For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### GET /subusers/stats +## URI Parameters +| URI Parameter | Type | Required? | Description | +|---|---|---|---| +| username | string | required | Username for the subuser to find associated whitelabels for. | + +### DELETE /whitelabel/domains/subuser ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/stats"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("subusers", "test_string"); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/subuser"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3634,32 +3644,24 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ throw ex; } ``` -## Retrieve monthly stats for all subusers - -**This endpoint allows you to retrieve the monthly email statistics for all subusers over the given date range.** +## Update a domain authentication. -While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. +**This endpoint allows you to update the settings for a domain authentication.** -When using the `sort_by_metric` to sort your stats by a specific metric, you can not sort by the following metrics: -`bounce_drops`, `deferred`, `invalid_emails`, `processed`, `spam_report_drops`, `spam_reports`, or `unsubscribe_drops`. +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### GET /subusers/stats/monthly +### PATCH /whitelabel/domains/{domain_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/stats/monthly"); - request.addQueryParam("subuser", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - request.addQueryParam("date", "test_string"); - request.addQueryParam("sort_by_direction", "asc"); + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setBody("{\"default\":false,\"custom_spf\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3668,16 +3670,16 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ throw ex; } ``` -## Retrieve the totals for each email statistic metric for all subusers. +## Retrieve a domain authentication. -**This endpoint allows you to retrieve the total sums of each email statistic metric for all subusers over the given date range.** +**This endpoint allows you to retrieve a specific domain authentication.** +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). -### GET /subusers/stats/sums +### GET /whitelabel/domains/{domain_id} ```java @@ -3685,14 +3687,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("subusers/stats/sums"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("sort_by_direction", "asc"); + request.setEndpoint("whitelabel/domains/{domain_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3701,25 +3696,23 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ throw ex; } ``` -## Enable/disable a subuser +## Delete a domain authentication. -This endpoint allows you to enable or disable a subuser. +**This endpoint allows you to delete a domain authentication.** -For more information about Subusers: +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) -* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### PATCH /subusers/{subuser_name} +### DELETE /whitelabel/domains/{domain_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("subusers/{subuser_name}"); - request.setBody("{\"disabled\":false}"); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{domain_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3728,24 +3721,31 @@ For more information about Subusers: throw ex; } ``` -## Delete a subuser +## Associate a domain authentication with a given user. -This endpoint allows you to delete a subuser. This is a permanent action, once deleted a subuser cannot be retrieved. +**This endpoint allows you to associate a specific domain authentication with a subuser.** -For more information about Subusers: +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) -* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) +Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. -### DELETE /subusers/{subuser_name} +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| domain_id | integer | ID of the domain whitelabel to associate with the subuser. | + +### POST /whitelabel/domains/{domain_id}/subuser ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("subusers/{subuser_name}"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3754,25 +3754,29 @@ For more information about Subusers: throw ex; } ``` -## Update IPs assigned to a subuser +## Add an IP to a domain authentication. -Each subuser should be assigned to an IP address, from which all of this subuser's mail will be sent. Often, this is the same IP as the parent account, but each subuser can have their own, or multiple, IP addresses as well. +**This endpoint allows you to add an IP address to a domain authentication.** -More information: +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -* [How to request more IPs](https://sendgrid.com/docs/Classroom/Basics/Account/adding_an_additional_dedicated_ip_to_your_account.html) -* [IPs can be whitelabeled](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/ips.html) +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### PUT /subusers/{subuser_name}/ips +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| id | integer | ID of the domain to which you are adding an IP | + +### POST /whitelabel/domains/{id}/ips ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("subusers/{subuser_name}/ips"); - request.setBody("[\"127.0.0.1\"]"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/ips"); + request.setBody("{\"ip\":\"192.168.0.1\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3781,20 +3785,29 @@ More information: throw ex; } ``` -## Update Monitor Settings for a subuser +## Remove an IP from a domain authenticaiton. -Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. +**This endpoint allows you to remove a domain's IP address from that domain's authentication.** -### PUT /subusers/{subuser_name}/monitor +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| id | integer | ID of the domain whitelabel to delete the IP from. | +| ip | string | IP to remove from the domain whitelabel. | + +### DELETE /whitelabel/domains/{id}/ips/{ip} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("subusers/{subuser_name}/monitor"); - request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3803,11 +3816,20 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by throw ex; } ``` -## Create monitor settings +## Validate a domain authentication. -Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. +**This endpoint allows you to validate a domain authentication. If it fails, it will return an error message describing why the domain could not be validated.** -### POST /subusers/{subuser_name}/monitor +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| id | integer |ID of the domain whitelabel to validate. | + +### POST /whitelabel/domains/{id}/validate ```java @@ -3815,8 +3837,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.POST); - request.setEndpoint("subusers/{subuser_name}/monitor"); - request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); + request.setEndpoint("whitelabel/domains/{id}/validate"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3825,19 +3846,26 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by throw ex; } ``` -## Retrieve monitor settings for a subuser +## Create reverse DNS -Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. +**This endpoint allows you to create a reverse DNS record.** -### GET /subusers/{subuser_name}/monitor +When creating a reverse DNS record, you should use the same subdomain that you used when you created a domain authentication. + +Reverse DNS consists of a subdomain and domain that will be used to generate a record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. + +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/). + +### POST /whitelabel/ips ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips"); + request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3846,19 +3874,28 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by throw ex; } ``` -## Delete monitor settings +## Retrieve all reverse DNS records -Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. +**This endpoint allows you to retrieve all of the reverse DNS records that have been created by this account.** -### DELETE /subusers/{subuser_name}/monitor +You may include a search key by using the "ip" parameter. This enables you to perform a prefix search for a given IP segment (e.g. "192."). + +Reverse DNS consists of a subdomain and domain that will be used to generate a record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. + +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/). + +### GET /whitelabel/ips ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3867,18 +3904,15 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by throw ex; } ``` -## Retrieve the monthly email statistics for a single subuser - -**This endpoint allows you to retrieve the monthly email statistics for a specific subuser.** +## Retrieve an reverse DNS record -While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. +**This endpoint allows you to retrieve a reverse DNS record.** -When using the `sort_by_metric` to sort your stats by a specific metric, you can not sort by the following metrics: -`bounce_drops`, `deferred`, `invalid_emails`, `processed`, `spam_report_drops`, `spam_reports`, or `unsubscribe_drops`. +Reverse DNS consists of a subdomain and domain that will be used to generate a record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. -For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/). -### GET /subusers/{subuser_name}/stats/monthly +### GET /whitelabel/ips/{id} ```java @@ -3886,12 +3920,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("subusers/{subuser_name}/stats/monthly"); - request.addQueryParam("date", "test_string"); - request.addQueryParam("sort_by_direction", "asc"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); + request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3900,30 +3929,23 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ throw ex; } ``` - -# SUPPRESSION +## Delete an reverse DNS record -## Retrieve all blocks +**This endpoint allows you to delete a reverse DNS record.** -**This endpoint allows you to retrieve a list of all email addresses that are currently on your blocks list.** +Reverse DNS consists of a subdomain and domain that will be used to generate a record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. -[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/). -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). - -### GET /suppression/blocks +### DELETE /whitelabel/ips/{id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/blocks"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3932,29 +3954,23 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete blocks - -**This endpoint allows you to delete all email addresses on your blocks list.** - -There are two options for deleting blocked emails: +## Validate a reverse DNS record -1. You can delete all blocked emails by setting `delete_all` to true in the request body. -2. You can delete some blocked emails by specifying the email addresses in an array in the request body. +**This endpoint allows you to validate a reverse DNS record.** -[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. +Reverse DNS consists of a subdomain and domain that will be used to generate a record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/). -### DELETE /suppression/blocks +### POST /whitelabel/ips/{id}/validate ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/blocks"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips/{id}/validate"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3963,23 +3979,26 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve a specific block +## Create a Branded Link -**This endpoint allows you to retrieve a specific email address from your blocks list.** +**This endpoint allows you to create a new link branding.** -[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### GET /suppression/blocks/{email} +### POST /whitelabel/links ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/blocks/{email}"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links"); + request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3988,23 +4007,24 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete a specific block +## Retrieve all link brandings -**This endpoint allows you to delete a specific email address from your blocks list.** +**This endpoint allows you to retrieve all link brandings.** -[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### DELETE /suppression/blocks/{email} +### GET /whitelabel/links ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/blocks/{email}"); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4013,18 +4033,22 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve all bounces +## Retrieve a Default Link Branding -**This endpoint allows you to retrieve all of your bounces.** +**This endpoint allows you to retrieve the default link branding.** -Bounces are messages that are returned to the server that sent it. +Default link branding is the actual link branding to be used when sending messages. If there are multiple link brandings, the default is determined by the following order: +
      +
    • Validated link branding marked as "default"
    • +
    • Legacy link brands (migrated from the whitelabel wizard)
    • +
    • Default SendGrid link whitelabel (i.e. 100.ct.sendgrid.net)
    • +
    -For more information see: +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information -* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### GET /suppression/bounces +### GET /whitelabel/links/default ```java @@ -4032,9 +4056,8 @@ For more information see: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/bounces"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("end_time", "1"); + request.setEndpoint("whitelabel/links/default"); + request.addQueryParam("domain", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4043,30 +4066,28 @@ For more information see: throw ex; } ``` -## Delete bounces +## Retrieve Associated Link Branding -**This endpoint allows you to delete all of your bounces. You can also use this endpoint to remove a specific email address from your bounce list.** - -Bounces are messages that are returned to the server that sent it. +**This endpoint allows you to retrieve the associated link branding for a subuser.** -For more information see: +Link branding can be associated with subusers from the parent account. This functionality allows +subusers to send mail using their parent's link brands. To associate a link branding, the parent account +must first create a branded link and validate it. The parent may then associate that branded link with a subuser via the API or the Subuser Management page in the user interface. -* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information -* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) -* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -Note: the `delete_all` and `emails` parameters should be used independently of each other as they have different purposes. +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### DELETE /suppression/bounces +### GET /whitelabel/links/subuser ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/bounces"); - request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4075,27 +4096,28 @@ Note: the `delete_all` and `emails` parameters should be used independently of e throw ex; } ``` -## Retrieve a Bounce +## Disassociate a Link Branding -**This endpoint allows you to retrieve a specific bounce for a given email address.** +**This endpoint allows you to disassociate a link branding from a subuser.** -Bounces are messages that are returned to the server that sent it. +Link branding can be associated with subusers from the parent account. This functionality allows +subusers to send mail using their parent's link brands. To associate a link branding, the parent account +must first create a branded link and validate it. The parent may then associate that branded link with a subuser via the API or the Subuser Management page in the user interface. -For more information see: +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information -* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) -* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### GET /suppression/bounces/{email} +### DELETE /whitelabel/links/subuser ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/bounces/{email}"); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4104,28 +4126,24 @@ For more information see: throw ex; } ``` -## Delete a bounce - -**This endpoint allows you to remove an email address from your bounce list.** +## Update a Link Branding -Bounces are messages that are returned to the server that sent it. This endpoint allows you to delete a single email addresses from your bounce list. +**This endpoint allows you to update a specific link branding. You can use this endpoint to change a branded link's default status.** -For more information see: +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information -* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) -* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### DELETE /suppression/bounces/{email} +### PATCH /whitelabel/links/{id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/bounces/{email}"); - request.addQueryParam("email_address", "example@example.com"); + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/links/{id}"); + request.setBody("{\"default\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4134,17 +4152,15 @@ For more information see: throw ex; } ``` -## Retrieve all invalid emails - -**This endpoint allows you to retrieve a list of all invalid email addresses.** +## Retrieve a Link Branding -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +**This endpoint allows you to retrieve a specific link branding.** -Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### GET /suppression/invalid_emails +### GET /whitelabel/links/{id} ```java @@ -4152,11 +4168,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/invalid_emails"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); + request.setEndpoint("whitelabel/links/{id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4165,22 +4177,15 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete invalid emails - -**This endpoint allows you to remove email addresses from your invalid email address list.** - -There are two options for deleting invalid email addresses: - -1) You can delete all invalid email addresses by setting `delete_all` to true in the request body. -2) You can delete some invalid email addresses by specifying certain addresses in an array in the request body. +## Delete a Link Branding -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +**This endpoint allows you to delete a link branding.** -Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### DELETE /suppression/invalid_emails +### DELETE /whitelabel/links/{id} ```java @@ -4188,8 +4193,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.DELETE); - request.setEndpoint("suppression/invalid_emails"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setEndpoint("whitelabel/links/{id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4198,25 +4202,23 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve a specific invalid email - -**This endpoint allows you to retrieve a specific invalid email addresses.** +## Validate a Link Branding -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +**This endpoint allows you to validate a link branding.** -Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### GET /suppression/invalid_emails/{email} +### POST /whitelabel/links/{id}/validate ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/invalid_emails/{email}"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{id}/validate"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4225,25 +4227,28 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete a specific invalid email +## Associate a Link Branding -**This endpoint allows you to remove a specific email address from the invalid email address list.** +**This endpoint allows you to associate a link whitelabel with a subuser account.** -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +Link branding can be associated with subusers from the parent account. This functionality allows +subusers to send mail using their parent's link brands. To associate a link branding, the parent account +must first create a branded link and validate it. The parent may then associate that branded link with a subuser via the API or the Subuser Management page in the user interface. -Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### DELETE /suppression/invalid_emails/{email} +### POST /whitelabel/links/{link_id}/subuser ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/invalid_emails/{email}"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{link_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4252,15 +4257,17 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve a specific spam report + + +# STATS -**This endpoint allows you to retrieve a specific spam report.** +## Retrieve global email statistics -[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. +**This endpoint allows you to retrieve all of your global email statistics between a given date range.** -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). +Parent accounts will see aggregated stats for their account and all subuser accounts. Subuser accounts will only see their own stats. -### GET /suppression/spam_report/{email} +### GET /stats ```java @@ -4268,7 +4275,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/spam_report/{email}"); + request.setEndpoint("stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4277,23 +4289,28 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete a specific spam report + +# SUBUSERS -**This endpoint allows you to delete a specific spam report.** +## Create Subuser -[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. +This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). +For more information about Subusers: -### DELETE /suppression/spam_report/{email} +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) + +### POST /subusers ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/spam_report/{email}"); + request.setMethod(Method.POST); + request.setEndpoint("subusers"); + request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\)":\"John@example.com\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4302,15 +4319,16 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve all spam reports +## List all Subusers -**This endpoint allows you to retrieve all spam reports.** +This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. -[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. +For more information about Subusers: -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) -### GET /suppression/spam_reports +### GET /subusers ```java @@ -4318,10 +4336,9 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/spam_reports"); - request.addQueryParam("start_time", "1"); + request.setEndpoint("subusers"); + request.addQueryParam("username", "test_string"); request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); @@ -4331,29 +4348,22 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete spam reports - -**This endpoint allows you to delete your spam reports.** - -There are two options for deleting spam reports: - -1) You can delete all spam reports by setting "delete_all" to true in the request body. -2) You can delete some spam reports by specifying the email addresses in an array in the request body. +## Retrieve Subuser Reputations -[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. +Subuser sender reputations give a good idea how well a sender is doing with regards to how recipients and recipient servers react to the mail that is being received. When a bounce, spam report, or other negative action happens on a sent email, it will effect your sender rating. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). +This endpoint allows you to request the reputations for your subusers. -### DELETE /suppression/spam_reports +### GET /subusers/reputations ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/spam_reports"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setMethod(Method.GET); + request.setEndpoint("subusers/reputations"); + request.addQueryParam("usernames", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4362,13 +4372,17 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve all global suppressions +## Retrieve email statistics for your subusers. -**This endpoint allows you to retrieve a list of all email address that are globally suppressed.** +**This endpoint allows you to retrieve the email statistics for the given subusers.** -A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). +You may retrieve statistics for up to 10 different subusers by including an additional _subusers_ parameter for each additional subuser. -### GET /suppression/unsubscribes +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. + +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). + +### GET /subusers/stats ```java @@ -4376,11 +4390,13 @@ A global suppression (or global unsubscribe) is an email address of a recipient SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/unsubscribes"); - request.addQueryParam("start_time", "1"); + request.setEndpoint("subusers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("subusers", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4389,27 +4405,32 @@ A global suppression (or global unsubscribe) is an email address of a recipient throw ex; } ``` - -# TEMPLATES +## Retrieve monthly stats for all subusers -## Create a transactional template. +**This endpoint allows you to retrieve the monthly email statistics for all subusers over the given date range.** -**This endpoint allows you to create a transactional template.** +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. -Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. +When using the `sort_by_metric` to sort your stats by a specific metric, you can not sort by the following metrics: +`bounce_drops`, `deferred`, `invalid_emails`, `processed`, `spam_report_drops`, `spam_reports`, or `unsubscribe_drops`. -Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). -### POST /templates +### GET /subusers/stats/monthly ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("templates"); - request.setBody("{\"name\":\"example_name\"}"); + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/monthly"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4418,15 +4439,16 @@ Transactional templates are templates created specifically for transactional ema throw ex; } ``` -## Retrieve all transactional templates. +## Retrieve the totals for each email statistic metric for all subusers. -**This endpoint allows you to retrieve all transactional templates.** +**This endpoint allows you to retrieve the total sums of each email statistic metric for all subusers over the given date range.** -Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. -Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. -### GET /templates +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). + +### GET /subusers/stats/sums ```java @@ -4434,7 +4456,14 @@ Transactional templates are templates created specifically for transactional ema SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("templates"); + request.setEndpoint("subusers/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4443,16 +4472,16 @@ Transactional templates are templates created specifically for transactional ema throw ex; } ``` -## Edit a transactional template. - -**This endpoint allows you to edit a transactional template.** +## Enable/disable a subuser -Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. +This endpoint allows you to enable or disable a subuser. -Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +For more information about Subusers: +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) -### PATCH /templates/{template_id} +### PATCH /subusers/{subuser_name} ```java @@ -4460,8 +4489,8 @@ Transactional templates are templates created specifically for transactional ema SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.PATCH); - request.setEndpoint("templates/{template_id}"); - request.setBody("{\"name\":\"new_example_name\"}"); + request.setEndpoint("subusers/{subuser_name}"); + request.setBody("{\"disabled\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4470,24 +4499,24 @@ Transactional templates are templates created specifically for transactional ema throw ex; } ``` -## Retrieve a single transactional template. - -**This endpoint allows you to retrieve a single transactional template.** +## Delete a subuser -Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. +This endpoint allows you to delete a subuser. This is a permanent action, once deleted a subuser cannot be retrieved. -Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +For more information about Subusers: +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) -### GET /templates/{template_id} +### DELETE /subusers/{subuser_name} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("templates/{template_id}"); + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4496,24 +4525,25 @@ Transactional templates are templates created specifically for transactional ema throw ex; } ``` -## Delete a template. - -**This endpoint allows you to delete a transactional template.** +## Update IPs assigned to a subuser -Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. +Each subuser should be assigned to an IP address, from which all of this subuser's mail will be sent. Often, this is the same IP as the parent account, but each subuser can have their own, or multiple, IP addresses as well. -Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +More information: +* [How to request more IPs](https://sendgrid.com/docs/Classroom/Basics/Account/adding_an_additional_dedicated_ip_to_your_account.html) +* [IPs can be whitelabeled](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/ips.html) -### DELETE /templates/{template_id} +### PUT /subusers/{subuser_name}/ips ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("templates/{template_id}"); + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/ips"); + request.setBody("[\"127.0.0.1\"]"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4522,25 +4552,20 @@ Transactional templates are templates created specifically for transactional ema throw ex; } ``` -## Create a new transactional template version. - -**This endpoint allows you to create a new version of a template.** - -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. - -For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +## Update Monitor Settings for a subuser +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. -### POST /templates/{template_id}/versions +### PUT /subusers/{subuser_name}/monitor ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("templates/{template_id}/versions"); - request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\")<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4549,30 +4574,20 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` -## Edit a transactional template version. - -**This endpoint allows you to edit a version of one of your transactional templates.** - -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. - -For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +## Create monitor settings -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| template_id | string | The ID of the original template | -| version_id | string | The ID of the template version | +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. -### PATCH /templates/{template_id}/versions/{version_id} +### POST /subusers/{subuser_name}/monitor ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("templates/{template_id}/versions/{version_id}"); - request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example)_name\",\"plain_content\":\"<%body%>\"}"; + request.setMethod(Method.POST); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4581,21 +4596,11 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` -## Retrieve a specific transactional template version. - -**This endpoint allows you to retrieve a specific version of a template.** - -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. - -For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +## Retrieve monitor settings for a subuser -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| template_id | string | The ID of the original template | -| version_id | string | The ID of the template version | +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. -### GET /templates/{template_id}/versions/{version_id} +### GET /subusers/{subuser_name}/monitor ```java @@ -4603,7 +4608,7 @@ For more information about transactional templates, please see our [User Guide]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("templates/{template_id}/versions/{version_id}"); + request.setEndpoint("subusers/{subuser_name}/monitor"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4612,21 +4617,11 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` -## Delete a transactional template version. - -**This endpoint allows you to delete one of your transactional template versions.** - -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. - -For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +## Delete monitor settings -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| template_id | string | The ID of the original template | -| version_id | string | The ID of the template version | +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. -### DELETE /templates/{template_id}/versions/{version_id} +### DELETE /subusers/{subuser_name}/monitor ```java @@ -4634,7 +4629,7 @@ For more information about transactional templates, please see our [User Guide]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.DELETE); - request.setEndpoint("templates/{template_id}/versions/{version_id}"); + request.setEndpoint("subusers/{subuser_name}/monitor"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4643,30 +4638,31 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` -## Activate a transactional template version. - -**This endpoint allows you to activate a version of one of your templates.** +## Retrieve the monthly email statistics for a single subuser -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. +**This endpoint allows you to retrieve the monthly email statistics for a specific subuser.** +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. -For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +When using the `sort_by_metric` to sort your stats by a specific metric, you can not sort by the following metrics: +`bounce_drops`, `deferred`, `invalid_emails`, `processed`, `spam_report_drops`, `spam_reports`, or `unsubscribe_drops`. -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| template_id | string | The ID of the original template | -| version_id | string | The ID of the template version | +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). -### POST /templates/{template_id}/versions/{version_id}/activate +### GET /subusers/{subuser_name}/stats/monthly ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("templates/{template_id}/versions/{version_id}/activate"); + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/stats/monthly"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4675,18 +4671,18 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` - -# TRACKING SETTINGS + +# SUPPRESSION -## Retrieve Tracking Settings +## Retrieve all blocks -**This endpoint allows you to retrieve a list of all tracking settings that you can enable on your account.** +**This endpoint allows you to retrieve a list of all email addresses that are currently on your blocks list.** -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). -### GET /tracking_settings +### GET /suppression/blocks ```java @@ -4694,8 +4690,10 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("tracking_settings"); - request.addQueryParam("limit", "1"); + request.setEndpoint("suppression/blocks"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); @@ -4705,24 +4703,29 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Update Click Tracking Settings +## Delete blocks -**This endpoint allows you to change your current click tracking setting. You can enable, or disable, click tracking using this endpoint.** +**This endpoint allows you to delete all email addresses on your blocks list.** -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +There are two options for deleting blocked emails: -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +1. You can delete all blocked emails by setting `delete_all` to true in the request body. +2. You can delete some blocked emails by specifying the email addresses in an array in the request body. -### PATCH /tracking_settings/click +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). + +### DELETE /suppression/blocks ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("tracking_settings/click"); - request.setBody("{\"enabled\":true}"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4731,15 +4734,15 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Retrieve Click Track Settings +## Retrieve a specific block -**This endpoint allows you to retrieve your current click tracking setting.** +**This endpoint allows you to retrieve a specific email address from your blocks list.** -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). -### GET /tracking_settings/click +### GET /suppression/blocks/{email} ```java @@ -4747,7 +4750,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("tracking_settings/click"); + request.setEndpoint("suppression/blocks/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4756,28 +4759,23 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Update Google Analytics Settings - -**This endpoint allows you to update your current setting for Google Analytics.** - -For more information about using Google Analytics, please refer to [Googles URL Builder](https://support.google.com/analytics/answer/1033867?hl=en) and their article on ["Best Practices for Campaign Building"](https://support.google.com/analytics/answer/1037445). +## Delete a specific block -We default the settings to Googles recommendations. For more information, see [Google Analytics Demystified](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/google_analytics_demystified_ga_statistics_vs_sg_statistics.html). +**This endpoint allows you to delete a specific email address from your blocks list.** -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). -### PATCH /tracking_settings/google_analytics +### DELETE /suppression/blocks/{email} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("tracking_settings/google_analytics"); - request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm)_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4786,19 +4784,18 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Retrieve Google Analytics Settings - -**This endpoint allows you to retrieve your current setting for Google Analytics.** +## Retrieve all bounces -For more information about using Google Analytics, please refer to [Googles URL Builder](https://support.google.com/analytics/answer/1033867?hl=en) and their article on ["Best Practices for Campaign Building"](https://support.google.com/analytics/answer/1037445). +**This endpoint allows you to retrieve all of your bounces.** -We default the settings to Googles recommendations. For more information, see [Google Analytics Demystified](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/google_analytics_demystified_ga_statistics_vs_sg_statistics.html). +Bounces are messages that are returned to the server that sent it. -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +For more information see: -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) -### GET /tracking_settings/google_analytics +### GET /suppression/bounces ```java @@ -4806,7 +4803,9 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("tracking_settings/google_analytics"); + request.setEndpoint("suppression/bounces"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("end_time", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4815,26 +4814,30 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Update Open Tracking Settings +## Delete bounces -**This endpoint allows you to update your current settings for open tracking.** +**This endpoint allows you to delete all of your bounces. You can also use this endpoint to remove a specific email address from your bounce list.** -Open Tracking adds an invisible image at the end of the email which can track email opens. If the email recipient has images enabled on their email client, a request to SendGrids server for the invisible image is executed and an open event is logged. These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook. +Bounces are messages that are returned to the server that sent it. -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +For more information see: -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) -### PATCH /tracking_settings/open +Note: the `delete_all` and `emails` parameters should be used independently of each other as they have different purposes. + +### DELETE /suppression/bounces ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("tracking_settings/open"); - request.setBody("{\"enabled\":true}"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces"); + request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4843,17 +4846,19 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Get Open Tracking Settings +## Retrieve a Bounce -**This endpoint allows you to retrieve your current settings for open tracking.** +**This endpoint allows you to retrieve a specific bounce for a given email address.** -Open Tracking adds an invisible image at the end of the email which can track email opens. If the email recipient has images enabled on their email client, a request to SendGrids server for the invisible image is executed and an open event is logged. These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook. +Bounces are messages that are returned to the server that sent it. -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +For more information see: -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) -### GET /tracking_settings/open +### GET /suppression/bounces/{email} ```java @@ -4861,7 +4866,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("tracking_settings/open"); + request.setEndpoint("suppression/bounces/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4870,26 +4875,28 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Update Subscription Tracking Settings +## Delete a bounce -**This endpoint allows you to update your current settings for subscription tracking.** +**This endpoint allows you to remove an email address from your bounce list.** -Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails. +Bounces are messages that are returned to the server that sent it. This endpoint allows you to delete a single email addresses from your bounce list. -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +For more information see: -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) -### PATCH /tracking_settings/subscription +### DELETE /suppression/bounces/{email} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("tracking_settings/subscription"); - request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page) html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces/{email}"); + request.addQueryParam("email_address", "example@example.com"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4898,17 +4905,17 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Retrieve Subscription Tracking Settings +## Retrieve all invalid emails -**This endpoint allows you to retrieve your current settings for subscription tracking.** +**This endpoint allows you to retrieve a list of all invalid email addresses.** -Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). -### GET /tracking_settings/subscription +### GET /suppression/invalid_emails ```java @@ -4916,7 +4923,11 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("tracking_settings/subscription"); + request.setEndpoint("suppression/invalid_emails"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4925,30 +4936,31 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` - -# USER +## Delete invalid emails -## Get a user's account information. +**This endpoint allows you to remove email addresses from your invalid email address list.** -**This endpoint allows you to retrieve your user account details.** +There are two options for deleting invalid email addresses: -Your user's account information includes the user's account type and reputation. +1) You can delete all invalid email addresses by setting `delete_all` to true in the request body. +2) You can delete some invalid email addresses by specifying certain addresses in an array in the request body. -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. -For more information about your user profile: +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). -### GET /user/account +### DELETE /suppression/invalid_emails ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/account"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4957,13 +4969,17 @@ For more information about your user profile: throw ex; } ``` -## Retrieve your credit balance +## Retrieve a specific invalid email -**This endpoint allows you to retrieve the current credit balance for your account.** +**This endpoint allows you to retrieve a specific invalid email addresses.** -Your monthly credit allotment limits the number of emails you may send before incurring overage charges. For more information about credits and billing, please visit our [Classroom](https://sendgrid.com/docs/Classroom/Basics/Billing/billing_info_and_faqs.html). +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. -### GET /user/credits +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). + +### GET /suppression/invalid_emails/{email} ```java @@ -4971,7 +4987,7 @@ Your monthly credit allotment limits the number of emails you may send before in SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/credits"); + request.setEndpoint("suppression/invalid_emails/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4980,26 +4996,25 @@ Your monthly credit allotment limits the number of emails you may send before in throw ex; } ``` -## Update your account email address +## Delete a specific invalid email -**This endpoint allows you to update the email address currently on file for your account.** +**This endpoint allows you to remove a specific email address from the invalid email address list.** -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. -For more information about your user profile: +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). -### PUT /user/email +### DELETE /suppression/invalid_emails/{email} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("user/email"); - request.setBody("{\"email\":\"example@example.com\"}"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5008,17 +5023,15 @@ For more information about your user profile: throw ex; } ``` -## Retrieve your account email address - -**This endpoint allows you to retrieve the email address currently on file for your account.** +## Retrieve a specific spam report -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +**This endpoint allows you to retrieve a specific spam report.** -For more information about your user profile: +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). -### GET /user/email +### GET /suppression/spam_report/{email} ```java @@ -5026,7 +5039,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/email"); + request.setEndpoint("suppression/spam_report/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5035,26 +5048,23 @@ For more information about your user profile: throw ex; } ``` -## Update your password - -**This endpoint allows you to update your password.** +## Delete a specific spam report -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +**This endpoint allows you to delete a specific spam report.** -For more information about your user profile: +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). -### PUT /user/password +### DELETE /suppression/spam_report/{email} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("user/password"); - request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_report/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5063,28 +5073,27 @@ For more information about your user profile: throw ex; } ``` -## Update a user's profile - -**This endpoint allows you to update your current profile details.** - -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +## Retrieve all spam reports -For more information about your user profile: +**This endpoint allows you to retrieve all spam reports.** -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. -It should be noted that any one or more of the parameters can be updated via the PATCH /user/profile endpoint. The only requirement is that you include at least one when you PATCH. +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). -### PATCH /user/profile +### GET /suppression/spam_reports ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/profile"); - request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_reports"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5093,23 +5102,29 @@ It should be noted that any one or more of the parameters can be updated via the throw ex; } ``` -## Get a user's profile +## Delete spam reports -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +**This endpoint allows you to delete your spam reports.** -For more information about your user profile: +There are two options for deleting spam reports: -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +1) You can delete all spam reports by setting "delete_all" to true in the request body. +2) You can delete some spam reports by specifying the email addresses in an array in the request body. -### GET /user/profile +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). + +### DELETE /suppression/spam_reports ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/profile"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_reports"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5118,25 +5133,25 @@ For more information about your user profile: throw ex; } ``` -## Cancel or pause a scheduled send - -**This endpoint allows you to cancel or pause an email that has been scheduled to be sent.** +## Retrieve all global suppressions -If the maximum number of cancellations/pauses are added, HTTP 400 will -be returned. +**This endpoint allows you to retrieve a list of all email address that are globally suppressed.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). -### POST /user/scheduled_sends +### GET /suppression/unsubscribes ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/scheduled_sends"); - request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); + request.setMethod(Method.GET); + request.setEndpoint("suppression/unsubscribes"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5145,21 +5160,27 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen throw ex; } ``` -## Retrieve all scheduled sends + +# TEMPLATES -**This endpoint allows you to retrieve all cancel/paused scheduled send information.** +## Create a transactional template. -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +**This endpoint allows you to create a transactional template.** -### GET /user/scheduled_sends +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. + +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +### POST /templates ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/scheduled_sends"); + request.setMethod(Method.POST); + request.setEndpoint("templates"); + request.setBody("{\"name\":\"example_name\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5168,22 +5189,23 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen throw ex; } ``` -## Update user scheduled send information +## Retrieve all transactional templates. -**This endpoint allows you to update the status of a scheduled send for the given `batch_id`.** +**This endpoint allows you to retrieve all transactional templates.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. -### PATCH /user/scheduled_sends/{batch_id} +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +### GET /templates ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/scheduled_sends/{batch_id}"); - request.setBody("{\"status\":\"pause\"}"); + request.setMethod(Method.GET); + request.setEndpoint("templates"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5192,21 +5214,25 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen throw ex; } ``` -## Retrieve scheduled send +## Edit a transactional template. -**This endpoint allows you to retrieve the cancel/paused scheduled send information for a specific `batch_id`.** +**This endpoint allows you to edit a transactional template.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. -### GET /user/scheduled_sends/{batch_id} +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + + +### PATCH /templates/{template_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setMethod(Method.PATCH); + request.setEndpoint("templates/{template_id}"); + request.setBody("{\"name\":\"new_example_name\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5215,21 +5241,24 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen throw ex; } ``` -## Delete a cancellation or pause of a scheduled send +## Retrieve a single transactional template. -**This endpoint allows you to delete the cancellation/pause of a scheduled send.** +**This endpoint allows you to retrieve a single transactional template.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. -### DELETE /user/scheduled_sends/{batch_id} +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + + +### GET /templates/{template_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setMethod(Method.GET); + request.setEndpoint("templates/{template_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5238,24 +5267,24 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen throw ex; } ``` -## Update Enforced TLS settings +## Delete a template. -**This endpoint allows you to update your current Enforced TLS settings.** +**This endpoint allows you to delete a transactional template.** -The Enforced TLS settings specify whether or not the recipient is required to support TLS or have a valid certificate. See the [SMTP Ports User Guide](https://sendgrid.com/docs/Classroom/Basics/Email_Infrastructure/smtp_ports.html) for more information on opportunistic TLS. +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. -**Note:** If either setting is enabled and the recipient does not support TLS or have a valid certificate, we drop the message and send a block event with TLS required but not supported as the description. +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -### PATCH /user/settings/enforced_tls + +### DELETE /templates/{template_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/settings/enforced_tls"); - request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); + request.setMethod(Method.DELETE); + request.setEndpoint("templates/{template_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5264,23 +5293,25 @@ The Enforced TLS settings specify whether or not the recipient is required to su throw ex; } ``` -## Retrieve current Enforced TLS settings. +## Create a new transactional template version. -**This endpoint allows you to retrieve your current Enforced TLS settings.** +**This endpoint allows you to create a new version of a template.** -The Enforced TLS settings specify whether or not the recipient is required to support TLS or have a valid certificate. See the [SMTP Ports User Guide](https://sendgrid.com/docs/Classroom/Basics/Email_Infrastructure/smtp_ports.html) for more information on opportunistic TLS. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. -**Note:** If either setting is enabled and the recipient does not support TLS or have a valid certificate, we drop the message and send a block event with TLS required but not supported as the description. +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -### GET /user/settings/enforced_tls + +### POST /templates/{template_id}/versions ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/settings/enforced_tls"); + request.setMethod(Method.POST); + request.setEndpoint("templates/{template_id}/versions"); + request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\")<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5289,26 +5320,30 @@ The Enforced TLS settings specify whether or not the recipient is required to su throw ex; } ``` -## Update your username +## Edit a transactional template version. -**This endpoint allows you to update the username for your account.** +**This endpoint allows you to edit a version of one of your transactional templates.** -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. -For more information about your user profile: +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | -### PUT /user/username +### PATCH /templates/{template_id}/versions/{version_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("user/username"); - request.setBody("{\"username\":\"test_username\"}"); + request.setMethod(Method.PATCH); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); + request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example)_name\",\"plain_content\":\"<%body%>\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5317,17 +5352,21 @@ For more information about your user profile: throw ex; } ``` -## Retrieve your username +## Retrieve a specific transactional template version. -**This endpoint allows you to retrieve your current account username.** +**This endpoint allows you to retrieve a specific version of a template.** -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. -For more information about your user profile: +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | -### GET /user/username +### GET /templates/{template_id}/versions/{version_id} ```java @@ -5335,7 +5374,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/username"); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5344,26 +5383,29 @@ For more information about your user profile: throw ex; } ``` -## Update Event Notification Settings +## Delete a transactional template version. -**This endpoint allows you to update your current event webhook settings.** +**This endpoint allows you to delete one of your transactional template versions.** -If an event type is marked as `true`, then the event webhook will include information about that event. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. -SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | -### PATCH /user/webhooks/event/settings +### DELETE /templates/{template_id}/versions/{version_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/webhooks/event/settings"); - request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\)",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + request.setMethod(Method.DELETE); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5372,25 +5414,30 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete throw ex; } ``` -## Retrieve Event Webhook settings +## Activate a transactional template version. -**This endpoint allows you to retrieve your current event webhook settings.** +**This endpoint allows you to activate a version of one of your templates.** -If an event type is marked as `true`, then the event webhook will include information about that event. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. -SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. -Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -### GET /user/webhooks/event/settings +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | + +### POST /templates/{template_id}/versions/{version_id}/activate ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/event/settings"); + request.setMethod(Method.POST); + request.setEndpoint("templates/{template_id}/versions/{version_id}/activate"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5399,24 +5446,28 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete throw ex; } ``` -## Test Event Notification Settings + +# TRACKING SETTINGS -**This endpoint allows you to test your event webhook by sending a fake event notification post to the provided URL.** +## Retrieve Tracking Settings -SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. +**This endpoint allows you to retrieve a list of all tracking settings that you can enable on your account.** -Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. -### POST /user/webhooks/event/test +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/webhooks/event/test"); - request.setBody("{\"url\":\"url\"}"); + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5425,22 +5476,24 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete throw ex; } ``` -## Create a parse setting +## Update Click Tracking Settings -**This endpoint allows you to create a new inbound parse setting.** +**This endpoint allows you to change your current click tracking setting. You can enable, or disable, click tracking using this endpoint.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. -### POST /user/webhooks/parse/settings +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### PATCH /tracking_settings/click ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/webhooks/parse/settings"); - request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam)_check\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/click"); + request.setBody("{\"enabled\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5449,13 +5502,15 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting throw ex; } ``` -## Retrieve all parse settings +## Retrieve Click Track Settings -**This endpoint allows you to retrieve all of your current inbound parse settings.** +**This endpoint allows you to retrieve your current click tracking setting.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. -### GET /user/webhooks/parse/settings +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings/click ```java @@ -5463,7 +5518,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/settings"); + request.setEndpoint("tracking_settings/click"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5472,13 +5527,19 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting throw ex; } ``` -## Update a parse setting +## Update Google Analytics Settings -**This endpoint allows you to update a specific inbound parse setting.** +**This endpoint allows you to update your current setting for Google Analytics.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +For more information about using Google Analytics, please refer to [Googles URL Builder](https://support.google.com/analytics/answer/1033867?hl=en) and their article on ["Best Practices for Campaign Building"](https://support.google.com/analytics/answer/1037445). -### PATCH /user/webhooks/parse/settings/{hostname} +We default the settings to Googles recommendations. For more information, see [Google Analytics Demystified](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/google_analytics_demystified_ga_statistics_vs_sg_statistics.html). + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### PATCH /tracking_settings/google_analytics ```java @@ -5486,8 +5547,8 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.PATCH); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); - request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); + request.setEndpoint("tracking_settings/google_analytics"); + request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm)_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5496,13 +5557,19 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting throw ex; } ``` -## Retrieve a specific parse setting +## Retrieve Google Analytics Settings -**This endpoint allows you to retrieve a specific inbound parse setting.** +**This endpoint allows you to retrieve your current setting for Google Analytics.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +For more information about using Google Analytics, please refer to [Googles URL Builder](https://support.google.com/analytics/answer/1033867?hl=en) and their article on ["Best Practices for Campaign Building"](https://support.google.com/analytics/answer/1037445). -### GET /user/webhooks/parse/settings/{hostname} +We default the settings to Googles recommendations. For more information, see [Google Analytics Demystified](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/google_analytics_demystified_ga_statistics_vs_sg_statistics.html). + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings/google_analytics ```java @@ -5510,7 +5577,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setEndpoint("tracking_settings/google_analytics"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5519,21 +5586,26 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting throw ex; } ``` -## Delete a parse setting +## Update Open Tracking Settings -**This endpoint allows you to delete a specific inbound parse setting.** +**This endpoint allows you to update your current settings for open tracking.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +Open Tracking adds an invisible image at the end of the email which can track email opens. If the email recipient has images enabled on their email client, a request to SendGrids server for the invisible image is executed and an open event is logged. These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook. -### DELETE /user/webhooks/parse/settings/{hostname} +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### PATCH /tracking_settings/open ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/open"); + request.setBody("{\"enabled\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5542,15 +5614,17 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting throw ex; } ``` -## Retrieves Inbound Parse Webhook statistics. +## Get Open Tracking Settings -**This endpoint allows you to retrieve the statistics for your Parse Webhook usage.** +**This endpoint allows you to retrieve your current settings for open tracking.** -SendGrid's Inbound Parse Webhook allows you to parse the contents and attachments of incoming emails. The Parse API can then POST the parsed emails to a URL that you specify. The Inbound Parse Webhook cannot parse messages greater than 20MB in size, including all attachments. +Open Tracking adds an invisible image at the end of the email which can track email opens. If the email recipient has images enabled on their email client, a request to SendGrids server for the invisible image is executed and an open event is logged. These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook. -There are a number of pre-made integrations for the SendGrid Parse Webhook which make processing events easy. You can find these integrations in the [Library Index](https://sendgrid.com/docs/Integrate/libraries.html#-Webhook-Libraries). +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. -### GET /user/webhooks/parse/stats +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings/open ```java @@ -5558,12 +5632,7 @@ There are a number of pre-made integrations for the SendGrid Parse Webhook which SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/stats"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "test_string"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("offset", "test_string"); + request.setEndpoint("tracking_settings/open"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5572,31 +5641,26 @@ There are a number of pre-made integrations for the SendGrid Parse Webhook which throw ex; } ``` - -# WHITELABEL - -## Create a domain whitelabel. +## Update Subscription Tracking Settings -**This endpoint allows you to create a whitelabel for one of your domains.** +**This endpoint allows you to update your current settings for subscription tracking.** -If you are creating a domain whitelabel that you would like a subuser to use, you have two options: -1. Use the "username" parameter. This allows you to create a whitelabel on behalf of your subuser. This means the subuser is able to see and modify the created whitelabel. -2. Use the Association workflow (see Associate Domain section). This allows you to assign a whitelabel created by the parent to a subuser. This means the subuser will default to the assigned whitelabel, but will not be able to see or modify that whitelabel. However, if the subuser creates their own whitelabel it will overwrite the assigned whitelabel. +Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails. -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). -### POST /whitelabel/domains +### PATCH /tracking_settings/subscription ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic)_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/subscription"); + request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page) html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5605,16 +5669,17 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## List all domain whitelabels. +## Retrieve Subscription Tracking Settings -**This endpoint allows you to retrieve a list of all domain whitelabels you have created.** +**This endpoint allows you to retrieve your current settings for subscription tracking.** -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). -### GET /whitelabel/domains +### GET /tracking_settings/subscription ```java @@ -5622,12 +5687,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains"); - request.addQueryParam("username", "test_string"); - request.addQueryParam("domain", "test_string"); - request.addQueryParam("exclude_subusers", "true"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); + request.setEndpoint("tracking_settings/subscription"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5636,20 +5696,22 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Get the default domain whitelabel. + +# USER -**This endpoint allows you to retrieve the default whitelabel for a domain.** +## Get a user's account information. -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +**This endpoint allows you to retrieve your user account details.** -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +Your user's account information includes the user's account type and reputation. -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| domain | string |The domain to find a default domain whitelabel for. | +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -### GET /whitelabel/domains/default +For more information about your user profile: + +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### GET /user/account ```java @@ -5657,7 +5719,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/default"); + request.setEndpoint("user/account"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5666,22 +5728,13 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## List the domain whitelabel associated with the given user. - -**This endpoint allows you to retrieve all of the whitelabels that have been assigned to a specific subuser.** - -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. - -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. +## Retrieve your credit balance -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +**This endpoint allows you to retrieve the current credit balance for your account.** -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| username | string | Username of the subuser to find associated whitelabels for. | +Your monthly credit allotment limits the number of emails you may send before incurring overage charges. For more information about credits and billing, please visit our [Classroom](https://sendgrid.com/docs/Classroom/Basics/Billing/billing_info_and_faqs.html). -### GET /whitelabel/domains/subuser +### GET /user/credits ```java @@ -5689,7 +5742,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/subuser"); + request.setEndpoint("user/credits"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5698,30 +5751,26 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Disassociate a domain whitelabel from a given user. - -**This endpoint allows you to disassociate a specific whitelabel from a subuser.** +## Update your account email address -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +**This endpoint allows you to update the email address currently on file for your account.** -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +For more information about your user profile: -## URI Parameters -| URI Parameter | Type | Required? | Description | -|---|---|---|---| -| username | string | required | Username for the subuser to find associated whitelabels for. | +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) -### DELETE /whitelabel/domains/subuser +### PUT /user/email ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/subuser"); + request.setMethod(Method.PUT); + request.setEndpoint("user/email"); + request.setBody("{\"email\":\"example@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5730,24 +5779,25 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Update a domain whitelabel. +## Retrieve your account email address + +**This endpoint allows you to retrieve the email address currently on file for your account.** -**This endpoint allows you to update the settings for a domain whitelabel.** +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +For more information about your user profile: -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) -### PATCH /whitelabel/domains/{domain_id} +### GET /user/email ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("whitelabel/domains/{domain_id}"); - request.setBody("{\"default\":false,\"custom_spf\":true}"); + request.setMethod(Method.GET); + request.setEndpoint("user/email"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5756,24 +5806,26 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Retrieve a domain whitelabel. +## Update your password -**This endpoint allows you to retrieve a specific domain whitelabel.** +**This endpoint allows you to update your password.** -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +For more information about your user profile: +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) -### GET /whitelabel/domains/{domain_id} +### PUT /user/password ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setMethod(Method.PUT); + request.setEndpoint("user/password"); + request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5782,23 +5834,28 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Delete a domain whitelabel. +## Update a user's profile -**This endpoint allows you to delete a domain whitelabel.** +**This endpoint allows you to update your current profile details.** -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +For more information about your user profile: -### DELETE /whitelabel/domains/{domain_id} +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +It should be noted that any one or more of the parameters can be updated via the PATCH /user/profile endpoint. The only requirement is that you include at least one when you PATCH. + +### PATCH /user/profile ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setMethod(Method.PATCH); + request.setEndpoint("user/profile"); + request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5807,31 +5864,23 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Associate a domain whitelabel with a given user. - -**This endpoint allows you to associate a specific domain whitelabel with a subuser.** - -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +## Get a user's profile -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +For more information about your user profile: -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| domain_id | integer | ID of the domain whitelabel to associate with the subuser. | +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) -### POST /whitelabel/domains/{domain_id}/subuser +### GET /user/profile ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); - request.setBody("{\"username\":\"jane@example.com\"}"); + request.setMethod(Method.GET); + request.setEndpoint("user/profile"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5840,20 +5889,16 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Add an IP to a domain whitelabel. - -**This endpoint allows you to add an IP address to a domain whitelabel.** +## Cancel or pause a scheduled send -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +**This endpoint allows you to cancel or pause an email that has been scheduled to be sent.** -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +If the maximum number of cancellations/pauses are added, HTTP 400 will +be returned. -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| id | integer | ID of the domain to which you are adding an IP | +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. -### POST /whitelabel/domains/{id}/ips +### POST /user/scheduled_sends ```java @@ -5861,8 +5906,8 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{id}/ips"); - request.setBody("{\"ip\":\"192.168.0.1\"}"); + request.setEndpoint("user/scheduled_sends"); + request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5871,29 +5916,21 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Remove an IP from a domain whitelabel. - -**This endpoint allows you to remove a domain's IP address from that domain's whitelabel.** - -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +## Retrieve all scheduled sends -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +**This endpoint allows you to retrieve all cancel/paused scheduled send information.** -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| id | integer | ID of the domain whitelabel to delete the IP from. | -| ip | string | IP to remove from the domain whitelabel. | +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. -### DELETE /whitelabel/domains/{id}/ips/{ip} +### GET /user/scheduled_sends ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5902,28 +5939,22 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Validate a domain whitelabel. - -**This endpoint allows you to validate a domain whitelabel. If it fails, it will return an error message describing why the whitelabel could not be validated.** - -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +## Update user scheduled send information -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +**This endpoint allows you to update the status of a scheduled send for the given `batch_id`.** -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| id | integer |ID of the domain whitelabel to validate. | +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. -### POST /whitelabel/domains/{id}/validate +### PATCH /user/scheduled_sends/{batch_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{id}/validate"); + request.setMethod(Method.PATCH); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setBody("{\"status\":\"pause\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5932,26 +5963,21 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Create an IP whitelabel - -**This endpoint allows you to create an IP whitelabel.** - -When creating an IP whitelable, you should use the same subdomain that you used when you created a domain whitelabel. +## Retrieve scheduled send -A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. +**This endpoint allows you to retrieve the cancel/paused scheduled send information for a specific `batch_id`.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. -### POST /whitelabel/ips +### GET /user/scheduled_sends/{batch_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/ips"); - request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends/{batch_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5960,28 +5986,21 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve all IP whitelabels - -**This endpoint allows you to retrieve all of the IP whitelabels that have been created by this account.** - -You may include a search key by using the "ip" parameter. This enables you to perform a prefix search for a given IP segment (e.g. "192."). +## Delete a cancellation or pause of a scheduled send -A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. +**This endpoint allows you to delete the cancellation/pause of a scheduled send.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. -### GET /whitelabel/ips +### DELETE /user/scheduled_sends/{batch_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/ips"); - request.addQueryParam("ip", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); + request.setMethod(Method.DELETE); + request.setEndpoint("user/scheduled_sends/{batch_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5990,23 +6009,24 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve an IP whitelabel +## Update Enforced TLS settings -**This endpoint allows you to retrieve an IP whitelabel.** +**This endpoint allows you to update your current Enforced TLS settings.** -A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. +The Enforced TLS settings specify whether or not the recipient is required to support TLS or have a valid certificate. See the [SMTP Ports User Guide](https://sendgrid.com/docs/Classroom/Basics/Email_Infrastructure/smtp_ports.html) for more information on opportunistic TLS. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). +**Note:** If either setting is enabled and the recipient does not support TLS or have a valid certificate, we drop the message and send a block event with TLS required but not supported as the description. -### GET /whitelabel/ips/{id} +### PATCH /user/settings/enforced_tls ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/ips/{id}"); + request.setMethod(Method.PATCH); + request.setEndpoint("user/settings/enforced_tls"); + request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6015,23 +6035,23 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Delete an IP whitelabel +## Retrieve current Enforced TLS settings. -**This endpoint allows you to delete an IP whitelabel.** +**This endpoint allows you to retrieve your current Enforced TLS settings.** -A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. +The Enforced TLS settings specify whether or not the recipient is required to support TLS or have a valid certificate. See the [SMTP Ports User Guide](https://sendgrid.com/docs/Classroom/Basics/Email_Infrastructure/smtp_ports.html) for more information on opportunistic TLS. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). +**Note:** If either setting is enabled and the recipient does not support TLS or have a valid certificate, we drop the message and send a block event with TLS required but not supported as the description. -### DELETE /whitelabel/ips/{id} +### GET /user/settings/enforced_tls ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/ips/{id}"); + request.setMethod(Method.GET); + request.setEndpoint("user/settings/enforced_tls"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6040,23 +6060,26 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Validate an IP whitelabel +## Update your username -**This endpoint allows you to validate an IP whitelabel.** +**This endpoint allows you to update the username for your account.** -A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). +For more information about your user profile: -### POST /whitelabel/ips/{id}/validate +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### PUT /user/username ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/ips/{id}/validate"); + request.setMethod(Method.PUT); + request.setEndpoint("user/username"); + request.setBody("{\"username\":\"test_username\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6065,26 +6088,25 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Create a Link Whitelabel +## Retrieve your username -**This endpoint allows you to create a new link whitelabel.** +**This endpoint allows you to retrieve your current account username.** -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +For more information about your user profile: -### POST /whitelabel/links +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### GET /user/username ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links"); - request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); + request.setMethod(Method.GET); + request.setEndpoint("user/username"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6093,24 +6115,26 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve all link whitelabels +## Update Event Notification Settings + +**This endpoint allows you to update your current event webhook settings.** -**This endpoint allows you to retrieve all link whitelabels.** +If an event type is marked as `true`, then the event webhook will include information about that event. -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. -### GET /whitelabel/links +### PATCH /user/webhooks/event/settings ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links"); - request.addQueryParam("limit", "1"); + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/event/settings"); + request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\)",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6119,22 +6143,17 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve a Default Link Whitelabel +## Retrieve Event Webhook settings -**This endpoint allows you to retrieve the default link whitelabel.** +**This endpoint allows you to retrieve your current event webhook settings.** -Default link whitelabel is the actual link whitelabel to be used when sending messages. If there are multiple link whitelabels, the default is determined by the following order: -
      -
    • Validated link whitelabels marked as "default"
    • -
    • Legacy link whitelabels (migrated from the whitelabel wizard)
    • -
    • Default SendGrid link whitelabel (i.e. 100.ct.sendgrid.net)
    • -
    +If an event type is marked as `true`, then the event webhook will include information about that event. -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. -### GET /whitelabel/links/default +### GET /user/webhooks/event/settings ```java @@ -6142,8 +6161,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/default"); - request.addQueryParam("domain", "test_string"); + request.setEndpoint("user/webhooks/event/settings"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6152,28 +6170,24 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve Associated Link Whitelabel - -**This endpoint allows you to retrieve the associated link whitelabel for a subuser.** +## Test Event Notification Settings -Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account -must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. +**This endpoint allows you to test your event webhook by sending a fake event notification post to the provided URL.** -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. -### GET /whitelabel/links/subuser +### POST /user/webhooks/event/test ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/subuser"); - request.addQueryParam("username", "test_string"); + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/event/test"); + request.setBody("{\"url\":\"url\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6182,28 +6196,22 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Disassociate a Link Whitelabel - -**This endpoint allows you to disassociate a link whitelabel from a subuser.** - -Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account -must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. +## Create a parse setting -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +**This endpoint allows you to create a new inbound parse setting.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -### DELETE /whitelabel/links/subuser +### POST /user/webhooks/parse/settings ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/links/subuser"); - request.addQueryParam("username", "test_string"); + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/parse/settings"); + request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam)_check\":true}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6212,24 +6220,21 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Update a Link Whitelabel - -**This endpoint allows you to update a specific link whitelabel. You can use this endpoint to change a link whitelabel's default status.** +## Retrieve all parse settings -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +**This endpoint allows you to retrieve all of your current inbound parse settings.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -### PATCH /whitelabel/links/{id} +### GET /user/webhooks/parse/settings ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("whitelabel/links/{id}"); - request.setBody("{\"default\":true}"); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6238,23 +6243,22 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve a Link Whitelabel - -**This endpoint allows you to retrieve a specific link whitelabel.** +## Update a parse setting -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +**This endpoint allows you to update a specific inbound parse setting.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -### GET /whitelabel/links/{id} +### PATCH /user/webhooks/parse/settings/{hostname} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/{id}"); + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6263,23 +6267,21 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Delete a Link Whitelabel - -**This endpoint allows you to delete a link whitelabel.** +## Retrieve a specific parse setting -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +**This endpoint allows you to retrieve a specific inbound parse setting.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -### DELETE /whitelabel/links/{id} +### GET /user/webhooks/parse/settings/{hostname} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/links/{id}"); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6288,23 +6290,21 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Validate a Link Whitelabel - -**This endpoint allows you to validate a link whitelabel.** +## Delete a parse setting -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +**This endpoint allows you to delete a specific inbound parse setting.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -### POST /whitelabel/links/{id}/validate +### DELETE /user/webhooks/parse/settings/{hostname} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links/{id}/validate"); + request.setMethod(Method.DELETE); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6313,28 +6313,28 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Associate a Link Whitelabel - -**This endpoint allows you to associate a link whitelabel with a subuser account.** +## Retrieves Inbound Parse Webhook statistics. -Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account -must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. +**This endpoint allows you to retrieve the statistics for your Parse Webhook usage.** -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +SendGrid's Inbound Parse Webhook allows you to parse the contents and attachments of incoming emails. The Parse API can then POST the parsed emails to a URL that you specify. The Inbound Parse Webhook cannot parse messages greater than 20MB in size, including all attachments. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +There are a number of pre-made integrations for the SendGrid Parse Webhook which make processing events easy. You can find these integrations in the [Library Index](https://sendgrid.com/docs/Integrate/libraries.html#-Webhook-Libraries). -### POST /whitelabel/links/{link_id}/subuser +### GET /user/webhooks/parse/stats ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links/{link_id}/subuser"); - request.setBody("{\"username\":\"jane@example.com\"}"); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "test_string"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6343,4 +6343,3 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` - diff --git a/USE_CASES.md b/USE_CASES.md index 0ba2aeb1..ea846b58 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -4,7 +4,7 @@ This documentation provides examples for specific use cases. Please [open an iss * [Transactional Templates](#transactional-templates) * [Legacy Templates](#legacy-templates) -* [How to Setup a Domain Whitelabel](#domain-whitelabel) +* [How to Setup a Domain Authentication](#domain-authentication) * [How to View Email Statistics](#email-stats) @@ -217,12 +217,12 @@ public class Example { } ``` - -# How to Setup a Domain Whitelabel + +# How to Setup a Domain Authentication -You can find documentation for how to setup a domain whitelabel via the UI [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/setup_domain_whitelabel.html) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#whitelabel). +You can find documentation for how to setup a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/client/USAGE.md#sender-authentication). -Find more information about all of SendGrid's whitelabeling related documentation [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/index.html). +Find more information about all of SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). # How to View Email Statistics diff --git a/examples/whitelabel/domains.java b/examples/senderauthentication/domains.java similarity index 94% rename from examples/whitelabel/domains.java rename to examples/senderauthentication/domains.java index 26a0d0a2..2ffe0a7e 100644 --- a/examples/whitelabel/domains.java +++ b/examples/senderauthentication/domains.java @@ -8,7 +8,7 @@ import java.util.Map; ////////////////////////////////////////////////////////////////// -// Create a domain whitelabel. +// Create a domain authorization. // POST /whitelabel/domains @@ -31,7 +31,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// List all domain whitelabels. +// List all domain authorization. // GET /whitelabel/domains @@ -58,7 +58,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Get the default domain whitelabel. +// Get the default domain authorization. // GET /whitelabel/domains/default @@ -80,7 +80,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// List the domain whitelabel associated with the given user. +// List the domain authorization associated with the given user. // GET /whitelabel/domains/subuser @@ -102,7 +102,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Disassociate a domain whitelabel from a given user. +// Disassociate a domain authorization from a given user. // DELETE /whitelabel/domains/subuser @@ -124,7 +124,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Update a domain whitelabel. +// Update a domain authorization. // PATCH /whitelabel/domains/{domain_id} @@ -147,7 +147,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve a domain whitelabel. +// Retrieve a domain authorization. // GET /whitelabel/domains/{domain_id} @@ -169,7 +169,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Delete a domain whitelabel. +// Delete a domain authorization. // DELETE /whitelabel/domains/{domain_id} @@ -191,7 +191,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Associate a domain whitelabel with a given user. +// Associate a domain authorization with a given user. // POST /whitelabel/domains/{domain_id}/subuser @@ -214,7 +214,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Add an IP to a domain whitelabel. +// Add an IP to a domain authorization. // POST /whitelabel/domains/{id}/ips @@ -237,7 +237,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Remove an IP from a domain whitelabel. +// Remove an IP from a domain authorization. // DELETE /whitelabel/domains/{id}/ips/{ip} @@ -259,7 +259,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Validate a domain whitelabel. +// Validate a domain authorization. // POST /whitelabel/domains/{id}/validate diff --git a/examples/whitelabel/ips.java b/examples/senderauthentication/ips.java similarity index 95% rename from examples/whitelabel/ips.java rename to examples/senderauthentication/ips.java index 22836d99..c1983608 100644 --- a/examples/whitelabel/ips.java +++ b/examples/senderauthentication/ips.java @@ -18,7 +18,7 @@ protected static void init() { } ////////////////////////////////////////////////////////////////// -// Create an IP whitelabel +// Create a reverse DNS record // POST /whitelabel/ips @@ -40,7 +40,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve all IP whitelabels +// Retrieve all reverse DNS records // GET /whitelabel/ips @@ -64,7 +64,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve an IP whitelabel +// Retrieve a reverse DNS record // GET /whitelabel/ips/{id} @@ -85,7 +85,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Delete an IP whitelabel +// Delete a reverse DNS record // DELETE /whitelabel/ips/{id} @@ -106,7 +106,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Validate an IP whitelabel +// Validate a reverse DNS record // POST /whitelabel/ips/{id}/validate diff --git a/examples/whitelabel/links.java b/examples/senderauthentication/links.java similarity index 95% rename from examples/whitelabel/links.java rename to examples/senderauthentication/links.java index ca7218ff..bf661339 100644 --- a/examples/whitelabel/links.java +++ b/examples/senderauthentication/links.java @@ -8,7 +8,7 @@ import java.util.Map; ////////////////////////////////////////////////////////////////// -// Create a Link Whitelabel +// Create a Branded Link // POST /whitelabel/links @@ -33,7 +33,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve all link whitelabels +// Retrieve all link Branding // GET /whitelabel/links @@ -56,7 +56,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve a Default Link Whitelabel +// Retrieve a Default Link Branding // GET /whitelabel/links/default @@ -79,7 +79,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve Associated Link Whitelabel +// Retrieve Associated Link Branding // GET /whitelabel/links/subuser @@ -102,7 +102,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Disassociate a Link Whitelabel +// Disassociate a Link Branding // DELETE /whitelabel/links/subuser @@ -125,7 +125,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Update a Link Whitelabel +// Update a Link Branding // PATCH /whitelabel/links/{id} @@ -148,7 +148,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve a Link Whitelabel +// Retrieve a Link Branding // GET /whitelabel/links/{id} @@ -170,7 +170,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Delete a Link Whitelabel +// Delete a Link Branding // DELETE /whitelabel/links/{id} @@ -192,7 +192,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Validate a Link Whitelabel +// Validate a Link Branding // POST /whitelabel/links/{id}/validate @@ -214,7 +214,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Associate a Link Whitelabel +// Associate a Link Branding // POST /whitelabel/links/{link_id}/subuser From a1bac90ed40cabbfb67b414ae51123fd962860bd Mon Sep 17 00:00:00 2001 From: chandler Date: Thu, 1 Nov 2018 12:38:01 -0400 Subject: [PATCH 223/439] Fix typos Signed-off-by: chandler --- USAGE.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/USAGE.md b/USAGE.md index f31ea17d..1eb8d117 100644 --- a/USAGE.md +++ b/USAGE.md @@ -3588,7 +3588,7 @@ A domain authentication allows you to remove the via or sent on behalf of messag Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Description | @@ -3620,7 +3620,7 @@ A domain authentication allows you to remove the via or sent on behalf of messag Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Required? | Description | @@ -3650,7 +3650,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ### PATCH /whitelabel/domains/{domain_id} @@ -3676,7 +3676,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ### GET /whitelabel/domains/{domain_id} @@ -3702,7 +3702,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ### DELETE /whitelabel/domains/{domain_id} @@ -3729,7 +3729,7 @@ A domain authentication allows you to remove the via or sent on behalf of messag Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Description | @@ -3760,7 +3760,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Description | @@ -3791,7 +3791,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Description | @@ -3822,7 +3822,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Description | From 29b78495c12853061edb25d29af0ac6e0eab0623 Mon Sep 17 00:00:00 2001 From: chandler Date: Sat, 3 Nov 2018 20:19:15 -0400 Subject: [PATCH 224/439] Remove more references to 'whitelabel' Signed-off-by: chandler --- USAGE.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/USAGE.md b/USAGE.md index 1eb8d117..df7dc6dc 100644 --- a/USAGE.md +++ b/USAGE.md @@ -2315,7 +2315,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. -IP pools can only be used with whitelabeled IP addresses. +IP pools can only be used with authenticated IP addresses. If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. @@ -2343,7 +2343,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. -IP pools can only be used with whitelabeled IP addresses. +IP pools can only be used with authenticated IP addresses. If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. @@ -2370,7 +2370,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. -IP pools can only be used with whitelabeled IP addresses. +IP pools can only be used with authenticated IP addresses. If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. @@ -2398,7 +2398,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. -IP pools can only be used with whitelabeled IP addresses. +IP pools can only be used with authenticated IP addresses. If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. @@ -2425,7 +2425,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. -IP pools can only be used with whitelabeled IP addresses. +IP pools can only be used with authenticated IP addresses. If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. @@ -4229,7 +4229,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/ui/a ``` ## Associate a Link Branding -**This endpoint allows you to associate a link whitelabel with a subuser account.** +**This endpoint allows you to associate a link branding with a subuser account.** Link branding can be associated with subusers from the parent account. This functionality allows subusers to send mail using their parent's link brands. To associate a link branding, the parent account @@ -4532,7 +4532,7 @@ Each subuser should be assigned to an IP address, from which all of this subuser More information: * [How to request more IPs](https://sendgrid.com/docs/Classroom/Basics/Account/adding_an_additional_dedicated_ip_to_your_account.html) -* [IPs can be whitelabeled](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/ips.html) +* [How to set up reverse DNS](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/) ### PUT /subusers/{subuser_name}/ips From 22292142bf243d1a838744ee43902b5050bb6e5b Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 4 Apr 2019 16:25:54 -0700 Subject: [PATCH 225/439] Useability update. --- USE_CASES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/USE_CASES.md b/USE_CASES.md index ea846b58..11e3f9fa 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -10,7 +10,7 @@ This documentation provides examples for specific use cases. Please [open an iss # Transactional Templates -For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. +For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. Template ID (replace with your own): From 055ac4f8cc14b5826795c68b1681f7823e655324 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 17 May 2019 09:17:56 -0700 Subject: [PATCH 226/439] SMS example --- USE_CASES.md | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/USE_CASES.md b/USE_CASES.md index 11e3f9fa..522a76f4 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -6,6 +6,7 @@ This documentation provides examples for specific use cases. Please [open an iss * [Legacy Templates](#legacy-templates) * [How to Setup a Domain Authentication](#domain-authentication) * [How to View Email Statistics](#email-stats) +* [Send a SMS Message](#sms) # Transactional Templates @@ -231,3 +232,87 @@ You can find documentation for how to view your email statistics via the UI [her Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as SendGrid processes your email. + +# Send a SMS Message + +Following are the steps to add Twilio SMS to your app: + +## 1. Obtain a Free Twilio Account + +Sign up for a free Twilio account [here](https://www.twilio.com/try-twilio?source=sendgrid-java). + +## 2. Update Your Environment Variables + +You can obtain your Account Sid and Auth Token from [twilio.com/console](https://twilio.com/console). + +### Mac + +```bash +echo "export TWILIO_ACCOUNT_SID='YOUR_TWILIO_ACCOUNT_SID'" > twilio.env +echo "export TWILIO_AUTH_TOKEN='YOUR_TWILIO_AUTH_TOKEN'" >> twilio.env +echo "twilio.env" >> .gitignore +source ./twilio.env +``` + +### Windows + +Temporarily set the environment variable (accessible only during the current CLI session): + +```bash +set TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID +set TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN +``` + +Permanently set the environment variable (accessible in all subsequent CLI sessions): + +```bash +setx TWILIO_ACCOUNT_SID "YOUR_TWILIO_ACCOUNT_SID" +setx TWILIO_AUTH_TOKEN "YOUR_TWILIO_AUTH_TOKEN" +``` + +## 3. Install the Twilio Helper Library + +`twilio-java` uses Maven. At present the jars *are* available from a public [maven](http://mvnrepository.com/artifact/com.twilio.sdk/twilio) repository. + +Use the following dependency in your project to grab via Maven: + +```xml + + com.twilio.sdk + twilio + 7.X.X + compile + +``` + +or Gradle: +```groovy +compile "com.twilio.sdk:twilio:7.X.X" +```` + +If you want to compile it yourself, here is how: + +```bash +$ git clone git@github.com:twilio/twilio-java +$ cd twilio-java +$ mvn install # Requires maven, download from http://maven.apache.org/download.html +``` + +Then, you can execute the following code. + +```java +String accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID"); +String authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN"); + +Twilio.init(accountSid, authToken); + +Message message = Message.creator( + new PhoneNumber("+15558881234"), // To number + new PhoneNumber("+15559994321"), // From number + "Hello world!" // SMS body +).create(); + +System.out.println(message.getSid()); +``` + +For more information, please visit the [Twilio SMS Java documentation](https://www.twilio.com/docs/sms/quickstart/java). \ No newline at end of file From c1038b2faf5f62311bdac290a4b8f4866b384159 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 17 May 2019 11:03:10 -0700 Subject: [PATCH 227/439] Twilio branding updates & CLA update --- .github/PULL_REQUEST_TEMPLATE | 2 + CODE_OF_CONDUCT.md | 20 +- CONTRIBUTING.md | 32 +-- LICENSE.md | 2 +- README.md | 20 +- TROUBLESHOOTING.md | 27 ++- USAGE.md | 206 +++++++++--------- USE_CASES.md | 6 +- bin/com/sendgrid/helpers/README.md | 2 +- build.gradle | 4 +- docker/Dockerfile | 4 +- docker/README.md | 10 +- docker/USAGE.md | 9 +- examples/helpers/mail/Example.java | 8 +- examples/mail/mail.java | 2 +- proposals/mail-helper-refactor.md | 12 +- src/main/java/com/sendgrid/SendGrid.java | 32 +-- src/main/java/com/sendgrid/SendGridAPI.java | 10 +- src/main/java/com/sendgrid/helpers/README.md | 2 +- .../java/com/sendgrid/helpers/mail/Mail.java | 2 +- 20 files changed, 204 insertions(+), 208 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index bd65d2ff..4aa9c567 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -1,6 +1,7 @@ -# Fixes # +# Fixes ### Checklist - [ ] I acknowledge that all my contributions will be made under the project's license @@ -20,7 +20,7 @@ Closes #2 - [ ] I have added in line documentation to the code I modified ### Short description of what this PR does: -- -- +- +- -If you have questions, please send an email to [Sendgrid](mailto:dx@sendgrid.com), or file a Github Issue in this repository. \ No newline at end of file +If you have questions, please send an email to [SendGrid](mailto:dx@sendgrid.com), or file a GitHub Issue in this repository. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index d2ca9db9..f0883c7d 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,42 +1,42 @@ - + # Twilio SendGrid Community Code of Conduct - - The Twilio SendGrid open source community is made up of members from around the globe with a diverse set of skills, personalities, and experiences. It is through these differences that our community experiences successes and continued growth. When you're working with members of the community, we encourage you to follow these guidelines, which help steer our interactions and strive to maintain a positive, successful and growing community. - + + The Twilio SendGrid open source community is made up of members from around the globe with a diverse set of skills, personalities, and experiences. It is through these differences that our community experiences successes and continued growth. When you're working with members of the community, we encourage you to follow these guidelines, which help steer our interactions and strive to maintain a positive, successful and growing community. + ### Be Open Members of the community are open to collaboration, whether it's on pull requests, code reviews, approvals, issues or otherwise. We're receptive to constructive comments and criticism, as the experiences and skill sets of all members contribute to the whole of our efforts. We're accepting of all who wish to take part in our activities, fostering an environment where anyone can participate, and everyone can make a difference. - + ### Be Considerate Members of the community are considerate of their peers, which include other contributors and users of Twilio SendGrid. We're thoughtful when addressing the efforts of others, keeping in mind that often the labor was completed with the intent of the good of the community. We're attentive in our communications, whether in person or online, and we're tactful when approaching differing views. - + ### Be Respectful Members of the community are respectful. We're respectful of others, their positions, their skills, their commitments and their efforts. We're respectful of the volunteer efforts that permeate the Twilio SendGrid community. We're respectful of the processes outlined in the community, and we work within them. When we disagree, we are courteous in raising our issues. Overall, we're good to each other. We contribute to this community not because we have to, but because we want to. If we remember that, these guidelines will come naturally. - - ## Additional Guidance - + + ## Additional Guidance + ### Disclose Potential Conflicts of Interest Community discussions often involve interested parties. We expect participants to be aware when they are conflicted due to employment or other projects they are involved in and disclose those interests to other project members. When in doubt, over-disclose. Perceived conflicts of interest are important to address so that the community’s decisions are credible even when unpopular, difficult or favorable to the interests of one group over another. - + ### Interpretation - This Code is not exhaustive or complete. It is not a rulebook; it serves to distill our common understanding of a collaborative, shared environment and goals. We expect it to be followed in spirit as much as in the letter. When in doubt, try to abide by [Twilio SendGrid’s cultural values](https://sendgrid.com/blog/employee-engagement-the-4h-way) defined by our “4H’s”: Happy, Hungry, Humble and Honest. - + This Code is not exhaustive or complete. It is not a rulebook; it serves to distill our common understanding of a collaborative, shared environment and goals. We expect it to be followed in spirit as much as in the letter. When in doubt, try to abide by [Twilio SendGrid’s cultural values](https://sendgrid.com/blog/employee-engagement-the-4h-way) defined by our “4H’s”: Happy, Hungry, Humble and Honest. + ### Enforcement Most members of the Twilio SendGrid community always comply with this Code, not because of the existence of this Code, but because they have long experience participating in open source communities where the conduct described above is normal and expected. However, failure to observe this Code may be grounds for suspension, reporting the user for abuse or changing permissions for outside contributors. - + ## If you have concerns about someone’s conduct **Initiate Direct Contact** - It is always appropriate to email a community member (if contact information is available), mention that you think their behavior was out of line, and (if necessary) point them to this Code. - + **Discuss Publicly** - Discussing publicly is always acceptable. Note, though, that approaching the person directly may be better, as it tends to make them less defensive, and it respects the time of other community members, so you probably want to try direct contact first. - + **Contact the Moderators** - You can reach the Twilio SendGrid moderators by emailing dx@sendgrid.com. - + ## Submission to Twilio SendGrid Repositories - Finally, just a reminder, changes to the Twilio SendGrid repositories will only be accepted upon completion of the [Twilio SendGrid Contributor Agreement](https://cla.sendgrid.com). - + Finally, just a reminder, changes to the Twilio SendGrid repositories will only be accepted upon completion of the [Twilio SendGrid Contributor Agreement](https://cla.sendgrid.com). + ## Attribution - + Twilio SendGrid thanks the following, on which it draws for content and inspiration: - - * [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/) - * [Open Source Initiative General Code of Conduct](https://opensource.org/codeofconduct) - * [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html) + + * [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/) + * [Open Source Initiative General Code of Conduct](https://opensource.org/codeofconduct) + * [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 531dcb88..998199f2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,7 +41,7 @@ A software bug is a demonstrable issue in the code base. In order for us to diag Before you decide to create a new issue, please try the following: -1. Check the Github issues tab if the identified issue has already been reported, if so, please add a +1 to the existing post. +1. Check the GitHub issues tab if the identified issue has already been reported, if so, please add a +1 to the existing post. 2. Update to the latest version of this code and check if issue has already been fixed 3. Copy and fill in the Bug Report Template we have provided below @@ -166,10 +166,10 @@ Please run your code through: ```bash # Clone your fork of the repo into the current directory git clone https://github.com/sendgrid/sendgrid-java - + # Navigate to the newly cloned directory cd sendgrid-java - + # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/sendgrid/sendgrid-java ``` diff --git a/README.md b/README.md index 3b941063..806ec008 100644 --- a/README.md +++ b/README.md @@ -232,9 +232,10 @@ Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java sendgrid-java is guided and supported by the Twilio Developer Experience Team. -Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. +Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. # License + [The MIT License (MIT)](LICENSE.md) From 6a5d0496ff30b313450d97ac5888d74530d35384 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Fri, 31 Jan 2020 11:13:28 -0800 Subject: [PATCH 237/439] chore: prep the repo for automated release (#599) * chore: prep repo for automated releasing Co-authored-by: Elmer Thomas --- .gitignore | 4 +- .maven.xml | 24 + .travis.yml | 57 +- CHANGELOG.md | 3 +- LICENSE.md | 2 +- Makefile | 17 + build.gradle | 173 -- examples/temp.txt | 1917 ++++++++++++++++++++++ examples/temp2.txt | 1917 ++++++++++++++++++++++ gradle.properties.example | 6 - gradle/wrapper/gradle-wrapper.jar | Bin 51348 -> 0 bytes gradle/wrapper/gradle-wrapper.properties | 6 - gradlew | 164 -- gradlew.bat | 90 - pom.xml | 53 +- scripts/upload.sh | 8 - 16 files changed, 3957 insertions(+), 484 deletions(-) create mode 100644 .maven.xml create mode 100644 Makefile delete mode 100644 build.gradle create mode 100644 examples/temp.txt create mode 100644 examples/temp2.txt delete mode 100644 gradle.properties.example delete mode 100644 gradle/wrapper/gradle-wrapper.jar delete mode 100644 gradle/wrapper/gradle-wrapper.properties delete mode 100755 gradlew delete mode 100644 gradlew.bat delete mode 100755 scripts/upload.sh diff --git a/.gitignore b/.gitignore index 551957d8..fa35c4dd 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ examples/Example.java .classpath .project .env -.vscode \ No newline at end of file +.vscode +sendgrid-java.jar +dependency-reduced-pom.xml diff --git a/.maven.xml b/.maven.xml new file mode 100644 index 00000000..bef1ab68 --- /dev/null +++ b/.maven.xml @@ -0,0 +1,24 @@ + + + + + ossrh + ${env.SONATYPE_USERNAME} + ${env.SONATYPE_PASSWORD} + + + + + + ossrh + + true + + + ${env.GPG_EXECUTABLE} + ${env.GPG_PASSPHRASE} + + + + diff --git a/.travis.yml b/.travis.yml index 944f6df3..167344c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,34 +1,31 @@ language: java matrix: include: - - jdk: openjdk8 - - jdk: oraclejdk8 + - name: 'OpenJDK 7' + jdk: openjdk7 + - name: 'OpenJDK 8' + jdk: openjdk8 + - name: 'Oracle JDK 7' + jdk: oraclejdk7 + - name: 'Oracle JDK 8' + jdk: oraclejdk8 + - name: 'OpenJDK 11' + jdk: openjdk11 + allow_failures: + - name: 'Oracle JDK 8' # See https://travis-ci.community/t/expected-feature-release-number-in-range-of-9-to-12-but-got-8-installing-oraclejdk8/1345/14 + - name: 'OpenJDK 7' + - name: 'Oracle JDK 7' + - name: 'OpenJDK 11' before_script: -- "./scripts/startPrism.sh &" -- sleep 20 -before_install: - - cat /etc/hosts # optionally check the content *before* - - sudo hostname "$(hostname | cut -c1-63)" - - sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts > /tmp/hosts - - sudo mv /tmp/hosts /etc/hosts - - cat /etc/hosts # optionally check the content *after* -after_script: - - lsof -i :4010 -S # adds some debugging statements - - "./gradlew build" - - "./scripts/upload.sh" -env: - global: - - S3_POLICY: ewogICJleHBpcmF0aW9uIjogIjIxMDAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCIgfSwKICAgIHsiYnVja2V0IjogInNlbmRncmlkLW9wZW4tc291cmNlIiB9LAogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgInNlbmRncmlkLWphdmEvIl0sCiAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMjA0OCwgMjY4NDM1NDU2XSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi96aXAiXQogIF0KfQo= - - secure: Iki1btwhG1nlyjnEMu90Oh/hoatFpPiiKkqpj7siLnlLp2xbBQ2003jRsn30I3Vujes2ugvzdlHqBJ9lDwRvfGrKXcLlRvYuDQ24N2YKquEiKHUxs+iMOzTQj6Sf64KL5O0aSZd1l5rjWgsQ0qqjHW9u3l5bUjqxzrhAI2Js37U= - - secure: Khi6a4z1lfZmDEDV738MOiWznRcTv5ILZUM+igEw2txX7PGX+B5909WridpAijTGiurJ6eda7jvsUgci8DTPQCXB18LD6N870hnPcSQkuI6zDAhKTx+w/ZsfPLWh28sP2CVzbqGdxaitZDKxRWaVmKnBZpyi8XI9UKjmyK2sjwE= - - secure: wKXAjjBgCLM4h++nP1xDQQtYU10JbwwynY0XB920SoQjI2Uu82cMPtkEXFWTpzyIS2hE5B3qvu75VHNdLqDUtek3e3lBg5k3SpYgGin20dg3SDEJrvA4vlvcApdQ132pMEWdDOVwzbXhm9+JTjALYbc3fX+VAQX1u5daPyeDGC4= -notifications: - hipchat: - rooms: - secure: kJyc36IRkovqK3JuMXJuBBkDFkDfZ9iAE8ZziszzL9zNsfY2fAQWDk4bMrFO0yYW9OwRXl0gT97HVYWBZFDhjtstUJxit0lpUB+TNIDw2lqCkOIPxGKgcBB9mDS795QyLJzletObP/guPxbzSNOGLa6+k4GbTtTMXRhjzN6lF0o= - template: - - '%{repository} - Build %{build_number} on branch %{branch} by %{author}: %{message} - View on GitHub' - format: html - notify: true + - "./scripts/startPrism.sh &" + - sleep 20 +install: + - mvn --settings .maven.xml install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V +deploy: + - provider: script + script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease + edge: true + on: + tags: true + jdk: openjdk8 + branch: master diff --git a/CHANGELOG.md b/CHANGELOG.md index ddf44787..1294aa28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ # Change Log All notable changes to this project will be documented in this file. -## [4.4.1] - 2019-05-20 +[2019-05-20] Version 4.4.1 +--------------------------- ### Fix - 4.4.0 release not deployed properly to Maven diff --git a/LICENSE.md b/LICENSE.md index e5441aa6..d55059a3 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013-2019 Twilio SendGrid, Inc. +Copyright (c) 2013-2020 Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..bc1a62ee --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +.PHONY: install test test-integration clean + +VERSION := $(shell mvn help:evaluate -Dexpression=project.version | grep -e '^[^\[]') +install: + @java -version || (echo "Java is not installed, please install Java >= 7"; exit 1); + mvn clean install -DskipTests=true -Dgpg.skip -B + cp target/sendgrid-java-$(VERSION).jar sendgrid-java.jar + +test: + mvn test + +test-integration: + ./scripts/startPrism.sh & + sleep 5 + +clean: + mvn clean diff --git a/build.gradle b/build.gradle deleted file mode 100644 index b414002c..00000000 --- a/build.gradle +++ /dev/null @@ -1,173 +0,0 @@ -/** - * Commands: - * - gradle build - * - gradle test - * - gradle assemble - * - gradle uploadArchives - * - * To execute the 'uploadArchives' task, the following properties must be specified - * in an external 'gradle.properties' file: - * - sonatypeUsername - * - sonatypePassword - */ - -apply plugin: 'java' -apply plugin: 'fatjar' -apply plugin: 'maven' -apply plugin: 'signing' - -group = 'com.sendgrid' -version = '4.4.1' -ext.packaging = 'jar' - -allprojects { - apply plugin: 'java' - sourceCompatibility = 1.7 - targetCompatibility = 1.7 -} - -if (!hasProperty("sonatypeUsername")) { - ext.sonatypeUsername = null - ext.sonatypePassword = null -} - -task wrapper(type: Wrapper) { - gradleVersion = '1.8' -} - -buildscript { - dependencies { - classpath 'eu.appsatori:gradle-fatjar-plugin:0.1.2' // adds fatJar task - } - repositories { - mavenCentral() - } -} - -dependencies { - implementation 'com.sendgrid:java-http-client:4.1.0' - implementation 'com.fasterxml.jackson.core:jackson-core:2.9.9' - implementation 'com.fasterxml.jackson.core:jackson-annotations:2.9.9' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9' - testImplementation group: 'junit', name: 'junit', version: '4.12' -} - -repositories { - mavenCentral() -} - -allprojects { - gradle.projectsEvaluated { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -// adds 'with-dependencies' to the fatJar name -fatJar { - classifier 'jar' - baseName "sendgrid" - manifest { - attributes("Implementation-Title": "Twilio SendGrid", "Implementation-Version": version) - } -} - -// copy fatJar to base project directory so they will be in git (and on github for download) -build << { - copy { - println "Copying ${fatJar.archiveName} to $projectDir/repo/com/sendgrid" - from("$buildDir/libs/${fatJar.archiveName}") - into("$projectDir/repo/com/sendgrid") - } - tasks.renameSendGridVersionJarToSendGridJar.execute() -} - -task renameSendGridVersionJarToSendGridJar { - doLast { - file("$projectDir/repo/com/sendgrid/${fatJar.archiveName}").renameTo(file("$projectDir/repo/com/sendgrid/sendgrid-java-latest.jar")) - copy { - from("$buildDir/libs/${fatJar.archiveName}") - into("$projectDir/repo/com/sendgrid") - } - file("$projectDir/repo/com/sendgrid/${fatJar.archiveName}").renameTo(file("$projectDir/repo/com/sendgrid/sendgrid-java-${version}.jar")) - } -} - -task startPrism(type: Exec) { - workingDir 'scripts' - commandLine './startPrism.sh' -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from 'build/docs/javadoc' -} - -task sourcesJar(type: Jar) { - from sourceSets.main.allSource - classifier = 'sources' -} - -signing { - required { gradle.taskGraph.hasTask("uploadArchives") } - sign configurations.archives -} - -uploadArchives { - repositories { - mavenDeployer { - beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } - repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { - authentication(userName: sonatypeUsername, password: sonatypePassword) - } - - pom.project { - name 'sendgrid-java' - packaging 'jar' - description 'Twilio SendGrid Java helper library' - url 'https://github.com/sendgrid/sendgrid-java' - - scm { - url 'scm:git@github.com:sendgrid/sendgrid-java.git' - connection 'scm:git@github.com:sendgrid/sendgrid-java.git' - developerConnection 'scm:git@github.com:sendgrid/sendgrid-java.git' - } - - licenses { - license { - name 'MIT License' - url 'http://opensource.org/licenses/MIT' - distribution 'repo' - } - } - - developers { - developer { - id 'thinkingserious' - name 'Elmer Thomas' - } - developer { - id 'scottmotte' - name 'Scott Motte' - } - developer { - id 'elbou8' - name 'Yamil Asusta' - } - developer { - id 'eddiezane' - name 'Eddie Zaneski' - } - } - } - } - } -} - -artifacts { - archives fatJar - archives jar - archives javadocJar - archives sourcesJar -} diff --git a/examples/temp.txt b/examples/temp.txt new file mode 100644 index 00000000..83556ad8 --- /dev/null +++ b/examples/temp.txt @@ -0,0 +1,1917 @@ +META-INF/ +META-INF/MANIFEST.MF +LICENSE.md +com/ +com/sendgrid/ +com/sendgrid/SendGridAPI.class +com/sendgrid/SendGrid$1.class +com/sendgrid/APICallback.class +com/sendgrid/SendGrid$2.class +com/sendgrid/SendGrid.class +com/sendgrid/SpamCheckSetting.class +com/sendgrid/Attachments$Builder.class +com/sendgrid/OpenTrackingSetting.class +com/sendgrid/Setting.class +com/sendgrid/GoogleAnalyticsSetting.class +com/sendgrid/ASM.class +com/sendgrid/FooterSetting.class +com/sendgrid/Personalization.class +com/sendgrid/Email.class +com/sendgrid/MailSettings.class +com/sendgrid/BccSettings.class +com/sendgrid/Content.class +com/sendgrid/TrackingSettings.class +com/sendgrid/ClickTrackingSetting.class +com/sendgrid/Attachments.class +com/sendgrid/ContentVerifier.class +com/sendgrid/SubscriptionTrackingSetting.class +com/sendgrid/Mail.class +com/sendgrid/RateLimitException.class +META-INF/maven/ +META-INF/maven/com.sendgrid/ +META-INF/maven/com.sendgrid/sendgrid-java/ +META-INF/maven/com.sendgrid/sendgrid-java/pom.xml +META-INF/maven/com.sendgrid/sendgrid-java/pom.properties +com/sendgrid/Client$1.class +com/sendgrid/Client.class +com/sendgrid/HttpDeleteWithBody.class +com/sendgrid/Method.class +com/sendgrid/Request.class +com/sendgrid/Response.class +com/sendgrid/SendGridResponseHandler.class +org/ +org/apache/ +org/apache/http/ +org/apache/http/message/ +org/apache/http/message/BasicHeaderElementIterator.class +org/apache/http/message/LineParser.class +org/apache/http/message/BasicHttpEntityEnclosingRequest.class +org/apache/http/message/HeaderValueFormatter.class +org/apache/http/message/BasicLineFormatter.class +org/apache/http/message/BasicLineParser.class +org/apache/http/message/HeaderGroup.class +org/apache/http/message/BasicNameValuePair.class +org/apache/http/message/BufferedHeader.class +org/apache/http/message/BasicListHeaderIterator.class +org/apache/http/message/BasicHeader.class +org/apache/http/message/LineFormatter.class +org/apache/http/message/BasicHttpResponse.class +org/apache/http/message/BasicTokenIterator.class +org/apache/http/message/BasicRequestLine.class +org/apache/http/message/ParserCursor.class +org/apache/http/message/BasicHeaderValueParser.class +org/apache/http/message/BasicHeaderValueFormatter.class +org/apache/http/message/BasicHttpRequest.class +org/apache/http/message/HeaderValueParser.class +org/apache/http/message/AbstractHttpMessage.class +org/apache/http/message/TokenParser.class +org/apache/http/message/BasicHeaderIterator.class +org/apache/http/message/BasicHeaderElement.class +org/apache/http/message/BasicStatusLine.class +org/apache/http/concurrent/ +org/apache/http/concurrent/BasicFuture.class +org/apache/http/concurrent/Cancellable.class +org/apache/http/concurrent/FutureCallback.class +org/apache/http/HeaderElement.class +org/apache/http/TruncatedChunkException.class +org/apache/http/ExceptionLogger$1.class +org/apache/http/version.properties +org/apache/http/HeaderElementIterator.class +org/apache/http/ProtocolVersion.class +org/apache/http/ExceptionLogger.class +org/apache/http/HttpRequestFactory.class +org/apache/http/HttpConnection.class +org/apache/http/HttpRequestInterceptor.class +org/apache/http/ContentTooLongException.class +org/apache/http/UnsupportedHttpVersionException.class +org/apache/http/HttpResponseInterceptor.class +org/apache/http/HttpInetConnection.class +org/apache/http/HttpEntity.class +org/apache/http/HttpException.class +org/apache/http/annotation/ +org/apache/http/annotation/Obsolete.class +org/apache/http/annotation/Experimental.class +org/apache/http/annotation/NotThreadSafe.class +org/apache/http/annotation/Immutable.class +org/apache/http/annotation/ThreadSafe.class +org/apache/http/annotation/GuardedBy.class +org/apache/http/Consts.class +org/apache/http/HttpConnectionMetrics.class +org/apache/http/HttpMessage.class +org/apache/http/MethodNotSupportedException.class +org/apache/http/ParseException.class +org/apache/http/params/ +org/apache/http/params/CoreProtocolPNames.class +org/apache/http/params/SyncBasicHttpParams.class +org/apache/http/params/DefaultedHttpParams.class +org/apache/http/params/HttpParams.class +org/apache/http/params/AbstractHttpParams.class +org/apache/http/params/HttpAbstractParamBean.class +org/apache/http/params/HttpConnectionParams.class +org/apache/http/params/BasicHttpParams.class +org/apache/http/params/HttpConnectionParamBean.class +org/apache/http/params/CoreConnectionPNames.class +org/apache/http/params/HttpParamConfig.class +org/apache/http/params/HttpProtocolParamBean.class +org/apache/http/params/HttpProtocolParams.class +org/apache/http/params/HttpParamsNames.class +org/apache/http/ReasonPhraseCatalog.class +org/apache/http/MalformedChunkCodingException.class +org/apache/http/FormattedHeader.class +org/apache/http/HttpResponse.class +org/apache/http/HeaderIterator.class +org/apache/http/HttpHeaders.class +org/apache/http/HttpClientConnection.class +org/apache/http/HttpHost.class +org/apache/http/protocol/ +org/apache/http/protocol/ResponseDate.class +org/apache/http/protocol/ChainBuilder.class +org/apache/http/protocol/HttpDateGenerator.class +org/apache/http/protocol/HttpRequestHandlerMapper.class +org/apache/http/protocol/HTTP.class +org/apache/http/protocol/SyncBasicHttpContext.class +org/apache/http/protocol/HttpService$HttpRequestHandlerResolverAdapter.class +org/apache/http/protocol/ImmutableHttpProcessor.class +org/apache/http/protocol/BasicHttpContext.class +org/apache/http/protocol/HttpProcessorBuilder.class +org/apache/http/protocol/RequestTargetHost.class +org/apache/http/protocol/ResponseConnControl.class +org/apache/http/protocol/HttpRequestInterceptorList.class +org/apache/http/protocol/HttpRequestExecutor.class +org/apache/http/protocol/RequestUserAgent.class +org/apache/http/protocol/HttpRequestHandlerResolver.class +org/apache/http/protocol/BasicHttpProcessor.class +org/apache/http/protocol/ResponseServer.class +org/apache/http/protocol/ResponseContent.class +org/apache/http/protocol/RequestDate.class +org/apache/http/protocol/HttpService.class +org/apache/http/protocol/HttpContext.class +org/apache/http/protocol/RequestConnControl.class +org/apache/http/protocol/UriHttpRequestHandlerMapper.class +org/apache/http/protocol/UriPatternMatcher.class +org/apache/http/protocol/HttpCoreContext.class +org/apache/http/protocol/HttpProcessor.class +org/apache/http/protocol/RequestExpectContinue.class +org/apache/http/protocol/HttpExpectationVerifier.class +org/apache/http/protocol/HttpRequestHandlerRegistry.class +org/apache/http/protocol/HttpResponseInterceptorList.class +org/apache/http/protocol/HttpRequestHandler.class +org/apache/http/protocol/ExecutionContext.class +org/apache/http/protocol/RequestContent.class +org/apache/http/protocol/DefaultedHttpContext.class +org/apache/http/HttpStatus.class +org/apache/http/TokenIterator.class +org/apache/http/ssl/ +org/apache/http/ssl/SSLContextBuilder$TrustManagerDelegate.class +org/apache/http/ssl/TrustStrategy.class +org/apache/http/ssl/PrivateKeyStrategy.class +org/apache/http/ssl/SSLContextBuilder$KeyManagerDelegate.class +org/apache/http/ssl/SSLContexts.class +org/apache/http/ssl/SSLContextBuilder.class +org/apache/http/ssl/SSLInitializationException.class +org/apache/http/ssl/PrivateKeyDetails.class +org/apache/http/ConnectionReuseStrategy.class +org/apache/http/pool/ +org/apache/http/pool/AbstractConnPool$4.class +org/apache/http/pool/AbstractConnPool$2.class +org/apache/http/pool/PoolEntry.class +org/apache/http/pool/ConnFactory.class +org/apache/http/pool/RouteSpecificPool.class +org/apache/http/pool/AbstractConnPool$3.class +org/apache/http/pool/PoolEntryCallback.class +org/apache/http/pool/AbstractConnPool.class +org/apache/http/pool/ConnPoolControl.class +org/apache/http/pool/PoolStats.class +org/apache/http/pool/AbstractConnPool$1.class +org/apache/http/pool/ConnPool.class +org/apache/http/pool/PoolEntryFuture.class +org/apache/http/config/ +org/apache/http/config/MessageConstraints$Builder.class +org/apache/http/config/ConnectionConfig.class +org/apache/http/config/SocketConfig.class +org/apache/http/config/Registry.class +org/apache/http/config/ConnectionConfig$Builder.class +org/apache/http/config/RegistryBuilder.class +org/apache/http/config/SocketConfig$Builder.class +org/apache/http/config/MessageConstraints.class +org/apache/http/config/Lookup.class +org/apache/http/HttpResponseFactory.class +org/apache/http/HttpRequest.class +org/apache/http/RequestLine.class +org/apache/http/HttpServerConnection.class +org/apache/http/NameValuePair.class +org/apache/http/util/ +org/apache/http/util/LangUtils.class +org/apache/http/util/NetUtils.class +org/apache/http/util/EntityUtils.class +org/apache/http/util/EncodingUtils.class +org/apache/http/util/TextUtils.class +org/apache/http/util/CharsetUtils.class +org/apache/http/util/CharArrayBuffer.class +org/apache/http/util/ByteArrayBuffer.class +org/apache/http/util/Asserts.class +org/apache/http/util/ExceptionUtils.class +org/apache/http/util/Args.class +org/apache/http/util/VersionInfo.class +org/apache/http/HttpVersion.class +org/apache/http/HttpConnectionFactory.class +org/apache/http/impl/ +org/apache/http/impl/DefaultHttpRequestFactory.class +org/apache/http/impl/SocketHttpClientConnection.class +org/apache/http/impl/bootstrap/ +org/apache/http/impl/bootstrap/SSLServerSetupHandler.class +org/apache/http/impl/bootstrap/HttpServer$Status.class +org/apache/http/impl/bootstrap/ThreadFactoryImpl.class +org/apache/http/impl/bootstrap/Worker.class +org/apache/http/impl/bootstrap/RequestListener.class +org/apache/http/impl/bootstrap/ServerBootstrap.class +org/apache/http/impl/bootstrap/HttpServer.class +org/apache/http/impl/SocketHttpServerConnection.class +org/apache/http/impl/BHttpConnectionBase.class +org/apache/http/impl/DefaultConnectionReuseStrategy.class +org/apache/http/impl/DefaultHttpServerConnection.class +org/apache/http/impl/AbstractHttpClientConnection.class +org/apache/http/impl/EnglishReasonPhraseCatalog.class +org/apache/http/impl/DefaultBHttpServerConnection.class +org/apache/http/impl/DefaultHttpClientConnection.class +org/apache/http/impl/pool/ +org/apache/http/impl/pool/BasicConnPool.class +org/apache/http/impl/pool/BasicConnFactory.class +org/apache/http/impl/pool/BasicPoolEntry.class +org/apache/http/impl/DefaultBHttpClientConnectionFactory.class +org/apache/http/impl/DefaultBHttpClientConnection.class +org/apache/http/impl/AbstractHttpServerConnection.class +org/apache/http/impl/io/ +org/apache/http/impl/io/HttpResponseWriter.class +org/apache/http/impl/io/HttpTransportMetricsImpl.class +org/apache/http/impl/io/AbstractSessionInputBuffer.class +org/apache/http/impl/io/DefaultHttpRequestWriter.class +org/apache/http/impl/io/SessionInputBufferImpl.class +org/apache/http/impl/io/ContentLengthOutputStream.class +org/apache/http/impl/io/SocketInputBuffer.class +org/apache/http/impl/io/DefaultHttpResponseWriterFactory.class +org/apache/http/impl/io/DefaultHttpRequestWriterFactory.class +org/apache/http/impl/io/IdentityOutputStream.class +org/apache/http/impl/io/IdentityInputStream.class +org/apache/http/impl/io/SocketOutputBuffer.class +org/apache/http/impl/io/ChunkedOutputStream.class +org/apache/http/impl/io/DefaultHttpResponseParserFactory.class +org/apache/http/impl/io/ContentLengthInputStream.class +org/apache/http/impl/io/HttpRequestWriter.class +org/apache/http/impl/io/DefaultHttpResponseWriter.class +org/apache/http/impl/io/DefaultHttpRequestParserFactory.class +org/apache/http/impl/io/AbstractMessageParser.class +org/apache/http/impl/io/EmptyInputStream.class +org/apache/http/impl/io/DefaultHttpRequestParser.class +org/apache/http/impl/io/SessionOutputBufferImpl.class +org/apache/http/impl/io/HttpRequestParser.class +org/apache/http/impl/io/AbstractSessionOutputBuffer.class +org/apache/http/impl/io/DefaultHttpResponseParser.class +org/apache/http/impl/io/ChunkedInputStream.class +org/apache/http/impl/io/AbstractMessageWriter.class +org/apache/http/impl/io/HttpResponseParser.class +org/apache/http/impl/entity/ +org/apache/http/impl/entity/DisallowIdentityContentLengthStrategy.class +org/apache/http/impl/entity/LaxContentLengthStrategy.class +org/apache/http/impl/entity/StrictContentLengthStrategy.class +org/apache/http/impl/entity/EntityDeserializer.class +org/apache/http/impl/entity/EntitySerializer.class +org/apache/http/impl/DefaultHttpResponseFactory.class +org/apache/http/impl/DefaultBHttpServerConnectionFactory.class +org/apache/http/impl/HttpConnectionMetricsImpl.class +org/apache/http/impl/ConnSupport.class +org/apache/http/impl/NoConnectionReuseStrategy.class +org/apache/http/ConnectionClosedException.class +org/apache/http/StatusLine.class +org/apache/http/io/ +org/apache/http/io/HttpMessageWriterFactory.class +org/apache/http/io/BufferInfo.class +org/apache/http/io/HttpMessageParserFactory.class +org/apache/http/io/HttpTransportMetrics.class +org/apache/http/io/SessionOutputBuffer.class +org/apache/http/io/HttpMessageParser.class +org/apache/http/io/EofSensor.class +org/apache/http/io/HttpMessageWriter.class +org/apache/http/io/SessionInputBuffer.class +org/apache/http/NoHttpResponseException.class +org/apache/http/HttpEntityEnclosingRequest.class +org/apache/http/entity/ +org/apache/http/entity/ContentLengthStrategy.class +org/apache/http/entity/FileEntity.class +org/apache/http/entity/InputStreamEntity.class +org/apache/http/entity/SerializableEntity.class +org/apache/http/entity/StringEntity.class +org/apache/http/entity/HttpEntityWrapper.class +org/apache/http/entity/ContentProducer.class +org/apache/http/entity/BufferedHttpEntity.class +org/apache/http/entity/ByteArrayEntity.class +org/apache/http/entity/EntityTemplate.class +org/apache/http/entity/BasicHttpEntity.class +org/apache/http/entity/ContentType.class +org/apache/http/entity/AbstractHttpEntity.class +org/apache/http/ProtocolException.class +org/apache/http/MessageConstraintException.class +org/apache/http/ExceptionLogger$2.class +org/apache/http/Header.class +META-INF/DEPENDENCIES +META-INF/NOTICE +META-INF/LICENSE +META-INF/maven/org.apache.httpcomponents/ +META-INF/maven/org.apache.httpcomponents/httpcore/ +META-INF/maven/org.apache.httpcomponents/httpcore/pom.xml +META-INF/maven/org.apache.httpcomponents/httpcore/pom.properties +org/apache/http/auth/ +org/apache/http/auth/KerberosCredentials.class +org/apache/http/auth/AuthSchemeRegistry.class +org/apache/http/auth/ChallengeState.class +org/apache/http/auth/NTUserPrincipal.class +org/apache/http/auth/InvalidCredentialsException.class +org/apache/http/auth/AuthSchemeRegistry$1.class +org/apache/http/auth/NTCredentials.class +org/apache/http/auth/AuthScheme.class +org/apache/http/auth/AuthenticationException.class +org/apache/http/auth/params/ +org/apache/http/auth/params/AuthParams.class +org/apache/http/auth/params/AuthParamBean.class +org/apache/http/auth/params/AuthPNames.class +org/apache/http/auth/BasicUserPrincipal.class +org/apache/http/auth/AuthSchemeProvider.class +org/apache/http/auth/ContextAwareAuthScheme.class +org/apache/http/auth/AuthProtocolState.class +org/apache/http/auth/AuthScope.class +org/apache/http/auth/AuthSchemeFactory.class +org/apache/http/auth/AUTH.class +org/apache/http/auth/Credentials.class +org/apache/http/auth/UsernamePasswordCredentials.class +org/apache/http/auth/AuthOption.class +org/apache/http/auth/MalformedChallengeException.class +org/apache/http/auth/AuthState.class +org/apache/http/cookie/ +org/apache/http/cookie/CookieSpecRegistry.class +org/apache/http/cookie/CookieSpec.class +org/apache/http/cookie/CookieRestrictionViolationException.class +org/apache/http/cookie/CookieIdentityComparator.class +org/apache/http/cookie/SM.class +org/apache/http/cookie/CookieOrigin.class +org/apache/http/cookie/CookieAttributeHandler.class +org/apache/http/cookie/SetCookie2.class +org/apache/http/cookie/params/ +org/apache/http/cookie/params/CookieSpecParamBean.class +org/apache/http/cookie/params/CookieSpecPNames.class +org/apache/http/cookie/MalformedCookieException.class +org/apache/http/cookie/ClientCookie.class +org/apache/http/cookie/CommonCookieAttributeHandler.class +org/apache/http/cookie/CookieSpecRegistry$1.class +org/apache/http/cookie/CookiePathComparator.class +org/apache/http/cookie/SetCookie.class +org/apache/http/cookie/Cookie.class +org/apache/http/cookie/CookieSpecProvider.class +org/apache/http/cookie/CookiePriorityComparator.class +org/apache/http/cookie/CookieSpecFactory.class +org/apache/http/client/ +org/apache/http/client/RedirectStrategy.class +org/apache/http/client/ConnectionBackoffStrategy.class +org/apache/http/client/version.properties +org/apache/http/client/AuthenticationStrategy.class +org/apache/http/client/HttpClient.class +org/apache/http/client/methods/ +org/apache/http/client/methods/HttpOptions.class +org/apache/http/client/methods/AbortableHttpRequest.class +org/apache/http/client/methods/HttpRequestBase.class +org/apache/http/client/methods/AbstractExecutionAwareRequest$2.class +org/apache/http/client/methods/RequestBuilder.class +org/apache/http/client/methods/HttpGet.class +org/apache/http/client/methods/HttpPatch.class +org/apache/http/client/methods/HttpDelete.class +org/apache/http/client/methods/HttpUriRequest.class +org/apache/http/client/methods/CloseableHttpResponse.class +org/apache/http/client/methods/HttpRequestWrapper$1.class +org/apache/http/client/methods/RequestBuilder$InternalEntityEclosingRequest.class +org/apache/http/client/methods/HttpRequestWrapper$HttpEntityEnclosingRequestWrapper.class +org/apache/http/client/methods/RequestBuilder$InternalRequest.class +org/apache/http/client/methods/HttpRequestWrapper.class +org/apache/http/client/methods/HttpHead.class +org/apache/http/client/methods/HttpExecutionAware.class +org/apache/http/client/methods/AbstractExecutionAwareRequest.class +org/apache/http/client/methods/Configurable.class +org/apache/http/client/methods/AbstractExecutionAwareRequest$1.class +org/apache/http/client/methods/HttpPost.class +org/apache/http/client/methods/HttpEntityEnclosingRequestBase.class +org/apache/http/client/methods/HttpTrace.class +org/apache/http/client/methods/HttpPut.class +org/apache/http/client/CredentialsProvider.class +org/apache/http/client/UserTokenHandler.class +org/apache/http/client/CookieStore.class +org/apache/http/client/HttpResponseException.class +org/apache/http/client/ClientProtocolException.class +org/apache/http/client/AuthenticationHandler.class +org/apache/http/client/params/ +org/apache/http/client/params/HttpClientParams.class +org/apache/http/client/params/ClientPNames.class +org/apache/http/client/params/ClientParamBean.class +org/apache/http/client/params/CookiePolicy.class +org/apache/http/client/params/AuthPolicy.class +org/apache/http/client/params/HttpClientParamConfig.class +org/apache/http/client/params/AllClientPNames.class +org/apache/http/client/CircularRedirectException.class +org/apache/http/client/utils/ +org/apache/http/client/utils/Punycode.class +org/apache/http/client/utils/Idn.class +org/apache/http/client/utils/HttpClientUtils.class +org/apache/http/client/utils/URIBuilder.class +org/apache/http/client/utils/URIUtils.class +org/apache/http/client/utils/DateUtils$DateFormatHolder.class +org/apache/http/client/utils/URLEncodedUtils.class +org/apache/http/client/utils/JdkIdn.class +org/apache/http/client/utils/CloneUtils.class +org/apache/http/client/utils/DateUtils.class +org/apache/http/client/utils/Rfc3492Idn.class +org/apache/http/client/protocol/ +org/apache/http/client/protocol/RequestAcceptEncoding.class +org/apache/http/client/protocol/ResponseProcessCookies.class +org/apache/http/client/protocol/RequestDefaultHeaders.class +org/apache/http/client/protocol/ResponseContentEncoding$2.class +org/apache/http/client/protocol/ClientContext.class +org/apache/http/client/protocol/ResponseAuthCache.class +org/apache/http/client/protocol/RequestAuthenticationBase$1.class +org/apache/http/client/protocol/RequestTargetAuthentication.class +org/apache/http/client/protocol/RequestProxyAuthentication.class +org/apache/http/client/protocol/RequestClientConnControl.class +org/apache/http/client/protocol/ResponseAuthCache$1.class +org/apache/http/client/protocol/RequestAddCookies.class +org/apache/http/client/protocol/RequestAuthCache.class +org/apache/http/client/protocol/ClientContextConfigurer.class +org/apache/http/client/protocol/ResponseContentEncoding$1.class +org/apache/http/client/protocol/RequestExpectContinue.class +org/apache/http/client/protocol/ResponseContentEncoding.class +org/apache/http/client/protocol/RequestAuthenticationBase.class +org/apache/http/client/protocol/HttpClientContext.class +org/apache/http/client/BackoffManager.class +org/apache/http/client/config/ +org/apache/http/client/config/RequestConfig$Builder.class +org/apache/http/client/config/RequestConfig.class +org/apache/http/client/config/CookieSpecs.class +org/apache/http/client/config/AuthSchemes.class +org/apache/http/client/AuthCache.class +org/apache/http/client/ResponseHandler.class +org/apache/http/client/RedirectException.class +org/apache/http/client/RedirectHandler.class +org/apache/http/client/NonRepeatableRequestException.class +org/apache/http/client/entity/ +org/apache/http/client/entity/DeflateInputStream.class +org/apache/http/client/entity/InputStreamFactory.class +org/apache/http/client/entity/UrlEncodedFormEntity.class +org/apache/http/client/entity/DeflateInputStream$DeflateStream.class +org/apache/http/client/entity/GzipCompressingEntity.class +org/apache/http/client/entity/EntityBuilder.class +org/apache/http/client/entity/LazyDecompressingInputStream.class +org/apache/http/client/entity/DecompressingEntity.class +org/apache/http/client/entity/GzipDecompressingEntity$1.class +org/apache/http/client/entity/DeflateDecompressingEntity$1.class +org/apache/http/client/entity/GzipDecompressingEntity.class +org/apache/http/client/entity/DeflateDecompressingEntity.class +org/apache/http/client/HttpRequestRetryHandler.class +org/apache/http/client/RequestDirector.class +org/apache/http/client/ServiceUnavailableRetryStrategy.class +org/apache/http/conn/ +org/apache/http/conn/OperatedClientConnection.class +org/apache/http/conn/ManagedClientConnection.class +org/apache/http/conn/ConnectionRequest.class +org/apache/http/conn/EofSensorInputStream.class +org/apache/http/conn/ClientConnectionOperator.class +org/apache/http/conn/HttpClientConnectionOperator.class +org/apache/http/conn/BasicManagedEntity.class +org/apache/http/conn/ConnectionKeepAliveStrategy.class +org/apache/http/conn/ManagedHttpClientConnection.class +org/apache/http/conn/BasicEofSensorWatcher.class +org/apache/http/conn/HttpClientConnectionManager.class +org/apache/http/conn/HttpRoutedConnection.class +org/apache/http/conn/EofSensorWatcher.class +org/apache/http/conn/routing/ +org/apache/http/conn/routing/BasicRouteDirector.class +org/apache/http/conn/routing/RouteInfo$LayerType.class +org/apache/http/conn/routing/RouteInfo.class +org/apache/http/conn/routing/RouteTracker.class +org/apache/http/conn/routing/HttpRouteDirector.class +org/apache/http/conn/routing/HttpRoutePlanner.class +org/apache/http/conn/routing/RouteInfo$TunnelType.class +org/apache/http/conn/routing/HttpRoute.class +org/apache/http/conn/SchemePortResolver.class +org/apache/http/conn/ClientConnectionManager.class +org/apache/http/conn/params/ +org/apache/http/conn/params/ConnManagerParamBean.class +org/apache/http/conn/params/ConnRouteParamBean.class +org/apache/http/conn/params/ConnManagerParams$1.class +org/apache/http/conn/params/ConnManagerPNames.class +org/apache/http/conn/params/ConnConnectionParamBean.class +org/apache/http/conn/params/ConnManagerParams.class +org/apache/http/conn/params/ConnPerRouteBean.class +org/apache/http/conn/params/ConnConnectionPNames.class +org/apache/http/conn/params/ConnPerRoute.class +org/apache/http/conn/params/ConnRoutePNames.class +org/apache/http/conn/params/ConnRouteParams.class +org/apache/http/conn/socket/ +org/apache/http/conn/socket/PlainConnectionSocketFactory.class +org/apache/http/conn/socket/ConnectionSocketFactory.class +org/apache/http/conn/socket/LayeredConnectionSocketFactory.class +org/apache/http/conn/ClientConnectionRequest.class +org/apache/http/conn/ssl/ +org/apache/http/conn/ssl/TrustSelfSignedStrategy.class +org/apache/http/conn/ssl/SSLContextBuilder$TrustManagerDelegate.class +org/apache/http/conn/ssl/DefaultHostnameVerifier$1.class +org/apache/http/conn/ssl/DefaultHostnameVerifier$TYPE.class +org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.class +org/apache/http/conn/ssl/TrustStrategy.class +org/apache/http/conn/ssl/PrivateKeyStrategy.class +org/apache/http/conn/ssl/SSLContextBuilder$KeyManagerDelegate.class +org/apache/http/conn/ssl/X509HostnameVerifier.class +org/apache/http/conn/ssl/AbstractVerifier.class +org/apache/http/conn/ssl/SSLSocketFactory.class +org/apache/http/conn/ssl/SSLConnectionSocketFactory.class +org/apache/http/conn/ssl/SSLContexts.class +org/apache/http/conn/ssl/AllowAllHostnameVerifier.class +org/apache/http/conn/ssl/StrictHostnameVerifier.class +org/apache/http/conn/ssl/SSLContextBuilder.class +org/apache/http/conn/ssl/DefaultHostnameVerifier.class +org/apache/http/conn/ssl/SSLInitializationException.class +org/apache/http/conn/ssl/PrivateKeyDetails.class +org/apache/http/conn/ssl/NoopHostnameVerifier.class +org/apache/http/conn/ConnectionPoolTimeoutException.class +org/apache/http/conn/ConnectionReleaseTrigger.class +org/apache/http/conn/ClientConnectionManagerFactory.class +org/apache/http/conn/scheme/ +org/apache/http/conn/scheme/SchemeSocketFactoryAdaptor.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactory.class +org/apache/http/conn/scheme/PlainSocketFactory.class +org/apache/http/conn/scheme/LayeredSocketFactoryAdaptor.class +org/apache/http/conn/scheme/Scheme.class +org/apache/http/conn/scheme/HostNameResolver.class +org/apache/http/conn/scheme/SchemeRegistry.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor2.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor.class +org/apache/http/conn/scheme/SocketFactory.class +org/apache/http/conn/scheme/SchemeSocketFactory.class +org/apache/http/conn/scheme/SocketFactoryAdaptor.class +org/apache/http/conn/scheme/LayeredSchemeSocketFactory.class +org/apache/http/conn/scheme/LayeredSocketFactory.class +org/apache/http/conn/ConnectTimeoutException.class +org/apache/http/conn/util/ +org/apache/http/conn/util/DomainType.class +org/apache/http/conn/util/InetAddressUtils.class +org/apache/http/conn/util/PublicSuffixList.class +org/apache/http/conn/util/PublicSuffixMatcher.class +org/apache/http/conn/util/PublicSuffixListParser.class +org/apache/http/conn/util/PublicSuffixMatcherLoader.class +org/apache/http/conn/HttpInetSocketAddress.class +org/apache/http/conn/HttpConnectionFactory.class +org/apache/http/conn/HttpHostConnectException.class +org/apache/http/conn/DnsResolver.class +org/apache/http/conn/MultihomePlainSocketFactory.class +org/apache/http/conn/UnsupportedSchemeException.class +org/apache/http/impl/auth/ +org/apache/http/impl/auth/NTLMEngineImpl$CipherGen.class +org/apache/http/impl/auth/NTLMScheme$State.class +org/apache/http/impl/auth/GGSSchemeBase$1.class +org/apache/http/impl/auth/NTLMEngineException.class +org/apache/http/impl/auth/KerberosSchemeFactory.class +org/apache/http/impl/auth/RFC2617Scheme.class +org/apache/http/impl/auth/NTLMScheme.class +org/apache/http/impl/auth/KerberosScheme.class +org/apache/http/impl/auth/HttpEntityDigester.class +org/apache/http/impl/auth/SPNegoScheme.class +org/apache/http/impl/auth/BasicSchemeFactory.class +org/apache/http/impl/auth/NegotiateScheme.class +org/apache/http/impl/auth/NTLMSchemeFactory.class +org/apache/http/impl/auth/NTLMEngineImpl$NTLMMessage.class +org/apache/http/impl/auth/GGSSchemeBase.class +org/apache/http/impl/auth/HttpAuthenticator$1.class +org/apache/http/impl/auth/NTLMEngine.class +org/apache/http/impl/auth/DigestScheme.class +org/apache/http/impl/auth/NTLMEngineImpl.class +org/apache/http/impl/auth/AuthSchemeBase.class +org/apache/http/impl/auth/NTLMEngineImpl$Type3Message.class +org/apache/http/impl/auth/NegotiateSchemeFactory.class +org/apache/http/impl/auth/SpnegoTokenGenerator.class +org/apache/http/impl/auth/NTLMEngineImpl$HMACMD5.class +org/apache/http/impl/auth/HttpAuthenticator.class +org/apache/http/impl/auth/GGSSchemeBase$State.class +org/apache/http/impl/auth/NTLMEngineImpl$MD4.class +org/apache/http/impl/auth/NTLMEngineImpl$Type2Message.class +org/apache/http/impl/auth/DigestSchemeFactory.class +org/apache/http/impl/auth/SPNegoSchemeFactory.class +org/apache/http/impl/auth/NTLMEngineImpl$Type1Message.class +org/apache/http/impl/auth/BasicScheme.class +org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.class +org/apache/http/impl/cookie/ +org/apache/http/impl/cookie/BestMatchSpec.class +org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider$CompatibilityLevel.class +org/apache/http/impl/cookie/BasicClientCookie2.class +org/apache/http/impl/cookie/BasicSecureHandler.class +org/apache/http/impl/cookie/RFC2109Spec.class +org/apache/http/impl/cookie/RFC2965Spec.class +org/apache/http/impl/cookie/PublicSuffixFilter.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$2.class +org/apache/http/impl/cookie/BasicDomainHandler.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider.class +org/apache/http/impl/cookie/RFC2109VersionHandler.class +org/apache/http/impl/cookie/RFC2109DomainHandler.class +org/apache/http/impl/cookie/BasicMaxAgeHandler.class +org/apache/http/impl/cookie/NetscapeDraftSpec.class +org/apache/http/impl/cookie/LaxExpiresHandler.class +org/apache/http/impl/cookie/BasicExpiresHandler.class +org/apache/http/impl/cookie/BrowserCompatSpec.class +org/apache/http/impl/cookie/RFC2965SpecFactory.class +org/apache/http/impl/cookie/DefaultCookieSpec.class +org/apache/http/impl/cookie/BrowserCompatSpec$1.class +org/apache/http/impl/cookie/BrowserCompatVersionAttributeHandler.class +org/apache/http/impl/cookie/IgnoreSpec.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider.class +org/apache/http/impl/cookie/BestMatchSpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$CompatibilityLevel.class +org/apache/http/impl/cookie/RFC6265StrictSpec.class +org/apache/http/impl/cookie/RFC2965PortAttributeHandler.class +org/apache/http/impl/cookie/IgnoreSpecProvider.class +org/apache/http/impl/cookie/BasicClientCookie.class +org/apache/http/impl/cookie/NetscapeDraftHeaderParser.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider$1.class +org/apache/http/impl/cookie/BasicPathHandler.class +org/apache/http/impl/cookie/LaxMaxAgeHandler.class +org/apache/http/impl/cookie/RFC6265CookieSpecBase.class +org/apache/http/impl/cookie/RFC2965SpecProvider.class +org/apache/http/impl/cookie/NetscapeDomainHandler.class +org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.class +org/apache/http/impl/cookie/PublicSuffixDomainFilter.class +org/apache/http/impl/cookie/IgnoreSpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$1.class +org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.class +org/apache/http/impl/cookie/AbstractCookieAttributeHandler.class +org/apache/http/impl/cookie/BrowserCompatSpecFactory.class +org/apache/http/impl/cookie/RFC2109SpecProvider.class +org/apache/http/impl/cookie/BrowserCompatSpecFactory$SecurityLevel.class +org/apache/http/impl/cookie/NetscapeDraftSpecFactory.class +org/apache/http/impl/cookie/CookieSpecBase.class +org/apache/http/impl/cookie/RFC6265LaxSpec.class +org/apache/http/impl/cookie/DateParseException.class +org/apache/http/impl/cookie/RFC2109SpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpec.class +org/apache/http/impl/cookie/PublicSuffixListParser.class +org/apache/http/impl/cookie/AbstractCookieSpec.class +org/apache/http/impl/cookie/BasicCommentHandler.class +org/apache/http/impl/cookie/DateUtils.class +org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.class +org/apache/http/impl/cookie/NetscapeDraftSpecProvider.class +org/apache/http/impl/client/ +org/apache/http/impl/client/TargetAuthenticationStrategy.class +org/apache/http/impl/client/LaxRedirectStrategy.class +org/apache/http/impl/client/NoopUserTokenHandler.class +org/apache/http/impl/client/RoutedRequest.class +org/apache/http/impl/client/AuthenticationStrategyImpl.class +org/apache/http/impl/client/MinimalHttpClient$1.class +org/apache/http/impl/client/CloseableHttpResponseProxy.class +org/apache/http/impl/client/DefaultProxyAuthenticationHandler.class +org/apache/http/impl/client/DefaultRedirectStrategy.class +org/apache/http/impl/client/FutureRequestExecutionService.class +org/apache/http/impl/client/FutureRequestExecutionMetrics$DurationCounter.class +org/apache/http/impl/client/HttpClientBuilder.class +org/apache/http/impl/client/AutoRetryHttpClient.class +org/apache/http/impl/client/BasicCredentialsProvider.class +org/apache/http/impl/client/AbstractResponseHandler.class +org/apache/http/impl/client/IdleConnectionEvictor$DefaultThreadFactory.class +org/apache/http/impl/client/RequestWrapper.class +org/apache/http/impl/client/HttpRequestFutureTask.class +org/apache/http/impl/client/ProxyClient.class +org/apache/http/impl/client/ContentEncodingHttpClient.class +org/apache/http/impl/client/RedirectLocations.class +org/apache/http/impl/client/DefaultHttpRequestRetryHandler.class +org/apache/http/impl/client/HttpRequestTaskCallable.class +org/apache/http/impl/client/StandardHttpRequestRetryHandler.class +org/apache/http/impl/client/AIMDBackoffManager.class +org/apache/http/impl/client/AbstractAuthenticationHandler.class +org/apache/http/impl/client/DecompressingHttpClient.class +org/apache/http/impl/client/SystemClock.class +org/apache/http/impl/client/DefaultRedirectStrategyAdaptor.class +org/apache/http/impl/client/EntityEnclosingRequestWrapper$EntityWrapper.class +org/apache/http/impl/client/AbstractHttpClient.class +org/apache/http/impl/client/Clock.class +org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.class +org/apache/http/impl/client/InternalHttpClient$1.class +org/apache/http/impl/client/SystemDefaultHttpClient.class +org/apache/http/impl/client/AuthenticationStrategyAdaptor.class +org/apache/http/impl/client/IdleConnectionEvictor.class +org/apache/http/impl/client/SystemDefaultCredentialsProvider.class +org/apache/http/impl/client/FutureRequestExecutionMetrics.class +org/apache/http/impl/client/InternalHttpClient.class +org/apache/http/impl/client/HttpClientBuilder$2.class +org/apache/http/impl/client/NullBackoffStrategy.class +org/apache/http/impl/client/DefaultBackoffStrategy.class +org/apache/http/impl/client/HttpAuthenticator.class +org/apache/http/impl/client/BasicCookieStore.class +org/apache/http/impl/client/EntityEnclosingRequestWrapper.class +org/apache/http/impl/client/CookieSpecRegistries.class +org/apache/http/impl/client/DefaultClientConnectionReuseStrategy.class +org/apache/http/impl/client/DefaultServiceUnavailableRetryStrategy.class +org/apache/http/impl/client/DefaultRedirectHandler.class +org/apache/http/impl/client/HttpClients.class +org/apache/http/impl/client/CloseableHttpClient.class +org/apache/http/impl/client/TunnelRefusedException.class +org/apache/http/impl/client/MinimalHttpClient.class +org/apache/http/impl/client/BasicAuthCache.class +org/apache/http/impl/client/BasicResponseHandler.class +org/apache/http/impl/client/DefaultUserTokenHandler.class +org/apache/http/impl/client/HttpClientBuilder$1.class +org/apache/http/impl/client/ClientParamsStack.class +org/apache/http/impl/client/DefaultRequestDirector.class +org/apache/http/impl/client/DefaultTargetAuthenticationHandler.class +org/apache/http/impl/client/IdleConnectionEvictor$1.class +org/apache/http/impl/client/DefaultHttpClient.class +org/apache/http/impl/client/ProxyAuthenticationStrategy.class +org/apache/http/impl/execchain/ +org/apache/http/impl/execchain/ServiceUnavailableRetryExec.class +org/apache/http/impl/execchain/RequestEntityProxy.class +org/apache/http/impl/execchain/ProtocolExec.class +org/apache/http/impl/execchain/MinimalClientExec.class +org/apache/http/impl/execchain/MainClientExec.class +org/apache/http/impl/execchain/RedirectExec.class +org/apache/http/impl/execchain/ClientExecChain.class +org/apache/http/impl/execchain/ConnectionHolder.class +org/apache/http/impl/execchain/HttpResponseProxy.class +org/apache/http/impl/execchain/RetryExec.class +org/apache/http/impl/execchain/TunnelRefusedException.class +org/apache/http/impl/execchain/RequestAbortedException.class +org/apache/http/impl/execchain/ResponseEntityProxy.class +org/apache/http/impl/execchain/BackoffStrategyExec.class +org/apache/http/impl/conn/ +org/apache/http/impl/conn/HttpPoolEntry.class +org/apache/http/impl/conn/DefaultClientConnection.class +org/apache/http/impl/conn/CPool.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager.class +org/apache/http/impl/conn/Wire.class +org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.class +org/apache/http/impl/conn/IdleConnectionHandler.class +org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.class +org/apache/http/impl/conn/SystemDefaultRoutePlanner$1.class +org/apache/http/impl/conn/CPoolProxy.class +org/apache/http/impl/conn/DefaultHttpRoutePlanner.class +org/apache/http/impl/conn/PoolingClientConnectionManager.class +org/apache/http/impl/conn/DefaultManagedHttpClientConnection.class +org/apache/http/impl/conn/LoggingSessionInputBuffer.class +org/apache/http/impl/conn/ConnectionShutdownException.class +org/apache/http/impl/conn/LoggingOutputStream.class +org/apache/http/impl/conn/ManagedClientConnectionImpl.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$ConfigData.class +org/apache/http/impl/conn/DefaultResponseParser.class +org/apache/http/impl/conn/LoggingInputStream.class +org/apache/http/impl/conn/AbstractClientConnAdapter.class +org/apache/http/impl/conn/SystemDefaultRoutePlanner.class +org/apache/http/impl/conn/tsccm/ +org/apache/http/impl/conn/tsccm/ConnPoolByRoute.class +org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1.class +org/apache/http/impl/conn/tsccm/RouteSpecificPool.class +org/apache/http/impl/conn/tsccm/ConnPoolByRoute$1.class +org/apache/http/impl/conn/tsccm/PoolEntryRequest.class +org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.class +org/apache/http/impl/conn/tsccm/WaitingThread.class +org/apache/http/impl/conn/tsccm/WaitingThreadAborter.class +org/apache/http/impl/conn/tsccm/RouteSpecificPool$1.class +org/apache/http/impl/conn/tsccm/AbstractConnPool.class +org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.class +org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.class +org/apache/http/impl/conn/tsccm/BasicPoolEntry.class +org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$InternalConnectionFactory.class +org/apache/http/impl/conn/DefaultHttpResponseParserFactory.class +org/apache/http/impl/conn/AbstractPoolEntry.class +org/apache/http/impl/conn/ProxySelectorRoutePlanner$1.class +org/apache/http/impl/conn/AbstractPooledConnAdapter.class +org/apache/http/impl/conn/SingleClientConnManager$PoolEntry.class +org/apache/http/impl/conn/HttpConnPool$InternalConnFactory.class +org/apache/http/impl/conn/SchemeRegistryFactory.class +org/apache/http/impl/conn/DefaultClientConnectionOperator.class +org/apache/http/impl/conn/LoggingManagedHttpClientConnection.class +org/apache/http/impl/conn/LoggingSessionOutputBuffer.class +org/apache/http/impl/conn/BasicHttpClientConnectionManager$1.class +org/apache/http/impl/conn/DefaultProxyRoutePlanner.class +org/apache/http/impl/conn/BasicClientConnectionManager$1.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$1.class +org/apache/http/impl/conn/BasicHttpClientConnectionManager.class +org/apache/http/impl/conn/PoolingClientConnectionManager$1.class +org/apache/http/impl/conn/IdleConnectionHandler$TimeValues.class +org/apache/http/impl/conn/CPoolEntry.class +org/apache/http/impl/conn/DefaultSchemePortResolver.class +org/apache/http/impl/conn/SingleClientConnManager.class +org/apache/http/impl/conn/DefaultRoutePlanner.class +org/apache/http/impl/conn/InMemoryDnsResolver.class +org/apache/http/impl/conn/DefaultHttpResponseParser.class +org/apache/http/impl/conn/HttpConnPool.class +org/apache/http/impl/conn/BasicClientConnectionManager.class +org/apache/http/impl/conn/SingleClientConnManager$1.class +org/apache/http/impl/conn/ProxySelectorRoutePlanner.class +org/apache/http/impl/conn/SystemDefaultDnsResolver.class +mozilla/ +mozilla/public-suffix-list.txt +META-INF/maven/org.apache.httpcomponents/httpclient/ +META-INF/maven/org.apache.httpcomponents/httpclient/pom.xml +META-INF/maven/org.apache.httpcomponents/httpclient/pom.properties +META-INF/NOTICE.txt +META-INF/LICENSE.txt +org/apache/commons/ +org/apache/commons/logging/ +org/apache/commons/logging/impl/ +org/apache/commons/logging/impl/AvalonLogger.class +org/apache/commons/logging/impl/SimpleLog.class +org/apache/commons/logging/impl/Log4JLogger.class +org/apache/commons/logging/impl/WeakHashtable.class +org/apache/commons/logging/impl/WeakHashtable$1.class +org/apache/commons/logging/impl/Jdk14Logger.class +org/apache/commons/logging/impl/ServletContextCleaner.class +org/apache/commons/logging/impl/WeakHashtable$WeakKey.class +org/apache/commons/logging/impl/NoOpLog.class +org/apache/commons/logging/impl/LogKitLogger.class +org/apache/commons/logging/impl/LogFactoryImpl$3.class +org/apache/commons/logging/impl/LogFactoryImpl$1.class +org/apache/commons/logging/impl/WeakHashtable$Referenced.class +org/apache/commons/logging/impl/SimpleLog$1.class +org/apache/commons/logging/impl/Jdk13LumberjackLogger.class +org/apache/commons/logging/impl/LogFactoryImpl.class +org/apache/commons/logging/impl/LogFactoryImpl$2.class +org/apache/commons/logging/impl/WeakHashtable$Entry.class +org/apache/commons/logging/LogSource.class +org/apache/commons/logging/LogFactory$4.class +org/apache/commons/logging/LogFactory$3.class +org/apache/commons/logging/LogFactory$6.class +org/apache/commons/logging/LogConfigurationException.class +org/apache/commons/logging/LogFactory.class +org/apache/commons/logging/LogFactory$5.class +org/apache/commons/logging/LogFactory$1.class +org/apache/commons/logging/LogFactory$2.class +org/apache/commons/logging/Log.class +META-INF/maven/commons-logging/ +META-INF/maven/commons-logging/commons-logging/ +META-INF/maven/commons-logging/commons-logging/pom.xml +META-INF/maven/commons-logging/commons-logging/pom.properties +org/apache/commons/codec/ +org/apache/commons/codec/binary/ +org/apache/commons/codec/binary/Base32.class +org/apache/commons/codec/binary/Base32InputStream.class +org/apache/commons/codec/binary/Base32OutputStream.class +org/apache/commons/codec/binary/Base64.class +org/apache/commons/codec/binary/Base64InputStream.class +org/apache/commons/codec/binary/Base64OutputStream.class +org/apache/commons/codec/binary/BaseNCodec$Context.class +org/apache/commons/codec/binary/BaseNCodec.class +org/apache/commons/codec/binary/BaseNCodecInputStream.class +org/apache/commons/codec/binary/BaseNCodecOutputStream.class +org/apache/commons/codec/binary/BinaryCodec.class +org/apache/commons/codec/binary/Hex.class +org/apache/commons/codec/binary/StringUtils.class +org/apache/commons/codec/BinaryDecoder.class +org/apache/commons/codec/BinaryEncoder.class +org/apache/commons/codec/CharEncoding.class +org/apache/commons/codec/Charsets.class +org/apache/commons/codec/Decoder.class +org/apache/commons/codec/DecoderException.class +org/apache/commons/codec/digest/ +org/apache/commons/codec/digest/B64.class +org/apache/commons/codec/digest/Crypt.class +org/apache/commons/codec/digest/DigestUtils.class +org/apache/commons/codec/digest/Md5Crypt.class +org/apache/commons/codec/digest/MessageDigestAlgorithms.class +org/apache/commons/codec/digest/Sha2Crypt.class +org/apache/commons/codec/digest/UnixCrypt.class +org/apache/commons/codec/Encoder.class +org/apache/commons/codec/EncoderException.class +org/apache/commons/codec/language/ +org/apache/commons/codec/language/AbstractCaverphone.class +org/apache/commons/codec/language/bm/ +org/apache/commons/codec/language/bm/ash_approx_any.txt +org/apache/commons/codec/language/bm/ash_approx_common.txt +org/apache/commons/codec/language/bm/ash_approx_cyrillic.txt +org/apache/commons/codec/language/bm/ash_approx_english.txt +org/apache/commons/codec/language/bm/ash_approx_french.txt +org/apache/commons/codec/language/bm/ash_approx_german.txt +org/apache/commons/codec/language/bm/ash_approx_hebrew.txt +org/apache/commons/codec/language/bm/ash_approx_hungarian.txt +org/apache/commons/codec/language/bm/ash_approx_polish.txt +org/apache/commons/codec/language/bm/ash_approx_romanian.txt +org/apache/commons/codec/language/bm/ash_approx_russian.txt +org/apache/commons/codec/language/bm/ash_approx_spanish.txt +org/apache/commons/codec/language/bm/ash_exact_any.txt +org/apache/commons/codec/language/bm/ash_exact_approx_common.txt +org/apache/commons/codec/language/bm/ash_exact_common.txt +org/apache/commons/codec/language/bm/ash_exact_cyrillic.txt +org/apache/commons/codec/language/bm/ash_exact_english.txt +org/apache/commons/codec/language/bm/ash_exact_french.txt +org/apache/commons/codec/language/bm/ash_exact_german.txt +org/apache/commons/codec/language/bm/ash_exact_hebrew.txt +org/apache/commons/codec/language/bm/ash_exact_hungarian.txt +org/apache/commons/codec/language/bm/ash_exact_polish.txt +org/apache/commons/codec/language/bm/ash_exact_romanian.txt +org/apache/commons/codec/language/bm/ash_exact_russian.txt +org/apache/commons/codec/language/bm/ash_exact_spanish.txt +org/apache/commons/codec/language/bm/ash_hebrew_common.txt +org/apache/commons/codec/language/bm/ash_languages.txt +org/apache/commons/codec/language/bm/ash_rules_any.txt +org/apache/commons/codec/language/bm/ash_rules_cyrillic.txt +org/apache/commons/codec/language/bm/ash_rules_english.txt +org/apache/commons/codec/language/bm/ash_rules_french.txt +org/apache/commons/codec/language/bm/ash_rules_german.txt +org/apache/commons/codec/language/bm/ash_rules_hebrew.txt +org/apache/commons/codec/language/bm/ash_rules_hungarian.txt +org/apache/commons/codec/language/bm/ash_rules_polish.txt +org/apache/commons/codec/language/bm/ash_rules_romanian.txt +org/apache/commons/codec/language/bm/ash_rules_russian.txt +org/apache/commons/codec/language/bm/ash_rules_spanish.txt +org/apache/commons/codec/language/bm/BeiderMorseEncoder.class +org/apache/commons/codec/language/bm/gen_approx_any.txt +org/apache/commons/codec/language/bm/gen_approx_arabic.txt +org/apache/commons/codec/language/bm/gen_approx_common.txt +org/apache/commons/codec/language/bm/gen_approx_cyrillic.txt +org/apache/commons/codec/language/bm/gen_approx_czech.txt +org/apache/commons/codec/language/bm/gen_approx_dutch.txt +org/apache/commons/codec/language/bm/gen_approx_english.txt +org/apache/commons/codec/language/bm/gen_approx_french.txt +org/apache/commons/codec/language/bm/gen_approx_german.txt +org/apache/commons/codec/language/bm/gen_approx_greek.txt +org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt +org/apache/commons/codec/language/bm/gen_approx_hebrew.txt +org/apache/commons/codec/language/bm/gen_approx_hungarian.txt +org/apache/commons/codec/language/bm/gen_approx_italian.txt +org/apache/commons/codec/language/bm/gen_approx_polish.txt +org/apache/commons/codec/language/bm/gen_approx_portuguese.txt +org/apache/commons/codec/language/bm/gen_approx_romanian.txt +org/apache/commons/codec/language/bm/gen_approx_russian.txt +org/apache/commons/codec/language/bm/gen_approx_spanish.txt +org/apache/commons/codec/language/bm/gen_approx_turkish.txt +org/apache/commons/codec/language/bm/gen_exact_any.txt +org/apache/commons/codec/language/bm/gen_exact_approx_common.txt +org/apache/commons/codec/language/bm/gen_exact_arabic.txt +org/apache/commons/codec/language/bm/gen_exact_common.txt +org/apache/commons/codec/language/bm/gen_exact_cyrillic.txt +org/apache/commons/codec/language/bm/gen_exact_czech.txt +org/apache/commons/codec/language/bm/gen_exact_dutch.txt +org/apache/commons/codec/language/bm/gen_exact_english.txt +org/apache/commons/codec/language/bm/gen_exact_french.txt +org/apache/commons/codec/language/bm/gen_exact_german.txt +org/apache/commons/codec/language/bm/gen_exact_greek.txt +org/apache/commons/codec/language/bm/gen_exact_greeklatin.txt +org/apache/commons/codec/language/bm/gen_exact_hebrew.txt +org/apache/commons/codec/language/bm/gen_exact_hungarian.txt +org/apache/commons/codec/language/bm/gen_exact_italian.txt +org/apache/commons/codec/language/bm/gen_exact_polish.txt +org/apache/commons/codec/language/bm/gen_exact_portuguese.txt +org/apache/commons/codec/language/bm/gen_exact_romanian.txt +org/apache/commons/codec/language/bm/gen_exact_russian.txt +org/apache/commons/codec/language/bm/gen_exact_spanish.txt +org/apache/commons/codec/language/bm/gen_exact_turkish.txt +org/apache/commons/codec/language/bm/gen_hebrew_common.txt +org/apache/commons/codec/language/bm/gen_languages.txt +org/apache/commons/codec/language/bm/gen_rules_any.txt +org/apache/commons/codec/language/bm/gen_rules_arabic.txt +org/apache/commons/codec/language/bm/gen_rules_cyrillic.txt +org/apache/commons/codec/language/bm/gen_rules_czech.txt +org/apache/commons/codec/language/bm/gen_rules_dutch.txt +org/apache/commons/codec/language/bm/gen_rules_english.txt +org/apache/commons/codec/language/bm/gen_rules_french.txt +org/apache/commons/codec/language/bm/gen_rules_german.txt +org/apache/commons/codec/language/bm/gen_rules_greek.txt +org/apache/commons/codec/language/bm/gen_rules_greeklatin.txt +org/apache/commons/codec/language/bm/gen_rules_hebrew.txt +org/apache/commons/codec/language/bm/gen_rules_hungarian.txt +org/apache/commons/codec/language/bm/gen_rules_italian.txt +org/apache/commons/codec/language/bm/gen_rules_polish.txt +org/apache/commons/codec/language/bm/gen_rules_portuguese.txt +org/apache/commons/codec/language/bm/gen_rules_romanian.txt +org/apache/commons/codec/language/bm/gen_rules_russian.txt +org/apache/commons/codec/language/bm/gen_rules_spanish.txt +org/apache/commons/codec/language/bm/gen_rules_turkish.txt +org/apache/commons/codec/language/bm/Lang$1.class +org/apache/commons/codec/language/bm/Lang$LangRule.class +org/apache/commons/codec/language/bm/Lang.class +org/apache/commons/codec/language/bm/lang.txt +org/apache/commons/codec/language/bm/Languages$1.class +org/apache/commons/codec/language/bm/Languages$2.class +org/apache/commons/codec/language/bm/Languages$LanguageSet.class +org/apache/commons/codec/language/bm/Languages$SomeLanguages.class +org/apache/commons/codec/language/bm/Languages.class +org/apache/commons/codec/language/bm/NameType.class +org/apache/commons/codec/language/bm/PhoneticEngine$1.class +org/apache/commons/codec/language/bm/PhoneticEngine$PhonemeBuilder.class +org/apache/commons/codec/language/bm/PhoneticEngine$RulesApplication.class +org/apache/commons/codec/language/bm/PhoneticEngine.class +org/apache/commons/codec/language/bm/ResourceConstants.class +org/apache/commons/codec/language/bm/Rule$1.class +org/apache/commons/codec/language/bm/Rule$10.class +org/apache/commons/codec/language/bm/Rule$2.class +org/apache/commons/codec/language/bm/Rule$3.class +org/apache/commons/codec/language/bm/Rule$4.class +org/apache/commons/codec/language/bm/Rule$5.class +org/apache/commons/codec/language/bm/Rule$6.class +org/apache/commons/codec/language/bm/Rule$7.class +org/apache/commons/codec/language/bm/Rule$8.class +org/apache/commons/codec/language/bm/Rule$9.class +org/apache/commons/codec/language/bm/Rule$Phoneme$1.class +org/apache/commons/codec/language/bm/Rule$Phoneme.class +org/apache/commons/codec/language/bm/Rule$PhonemeExpr.class +org/apache/commons/codec/language/bm/Rule$PhonemeList.class +org/apache/commons/codec/language/bm/Rule$RPattern.class +org/apache/commons/codec/language/bm/Rule.class +org/apache/commons/codec/language/bm/RuleType.class +org/apache/commons/codec/language/bm/sep_approx_any.txt +org/apache/commons/codec/language/bm/sep_approx_common.txt +org/apache/commons/codec/language/bm/sep_approx_french.txt +org/apache/commons/codec/language/bm/sep_approx_hebrew.txt +org/apache/commons/codec/language/bm/sep_approx_italian.txt +org/apache/commons/codec/language/bm/sep_approx_portuguese.txt +org/apache/commons/codec/language/bm/sep_approx_spanish.txt +org/apache/commons/codec/language/bm/sep_exact_any.txt +org/apache/commons/codec/language/bm/sep_exact_approx_common.txt +org/apache/commons/codec/language/bm/sep_exact_common.txt +org/apache/commons/codec/language/bm/sep_exact_french.txt +org/apache/commons/codec/language/bm/sep_exact_hebrew.txt +org/apache/commons/codec/language/bm/sep_exact_italian.txt +org/apache/commons/codec/language/bm/sep_exact_portuguese.txt +org/apache/commons/codec/language/bm/sep_exact_spanish.txt +org/apache/commons/codec/language/bm/sep_hebrew_common.txt +org/apache/commons/codec/language/bm/sep_languages.txt +org/apache/commons/codec/language/bm/sep_rules_any.txt +org/apache/commons/codec/language/bm/sep_rules_french.txt +org/apache/commons/codec/language/bm/sep_rules_hebrew.txt +org/apache/commons/codec/language/bm/sep_rules_italian.txt +org/apache/commons/codec/language/bm/sep_rules_portuguese.txt +org/apache/commons/codec/language/bm/sep_rules_spanish.txt +org/apache/commons/codec/language/Caverphone.class +org/apache/commons/codec/language/Caverphone1.class +org/apache/commons/codec/language/Caverphone2.class +org/apache/commons/codec/language/ColognePhonetic$CologneBuffer.class +org/apache/commons/codec/language/ColognePhonetic$CologneInputBuffer.class +org/apache/commons/codec/language/ColognePhonetic$CologneOutputBuffer.class +org/apache/commons/codec/language/ColognePhonetic.class +org/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult.class +org/apache/commons/codec/language/DoubleMetaphone.class +org/apache/commons/codec/language/MatchRatingApproachEncoder.class +org/apache/commons/codec/language/Metaphone.class +org/apache/commons/codec/language/Nysiis.class +org/apache/commons/codec/language/RefinedSoundex.class +org/apache/commons/codec/language/Soundex.class +org/apache/commons/codec/language/SoundexUtils.class +org/apache/commons/codec/net/ +org/apache/commons/codec/net/BCodec.class +org/apache/commons/codec/net/QCodec.class +org/apache/commons/codec/net/QuotedPrintableCodec.class +org/apache/commons/codec/net/RFC1522Codec.class +org/apache/commons/codec/net/URLCodec.class +org/apache/commons/codec/net/Utils.class +org/apache/commons/codec/StringDecoder.class +org/apache/commons/codec/StringEncoder.class +org/apache/commons/codec/StringEncoderComparator.class +META-INF/maven/commons-codec/ +META-INF/maven/commons-codec/commons-codec/ +META-INF/maven/commons-codec/commons-codec/pom.xml +META-INF/maven/commons-codec/commons-codec/pom.properties +META-INF/maven/com.fasterxml.jackson.core/ +META-INF/maven/com.fasterxml.jackson.core/jackson-core/ +META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml +META-INF/services/ +META-INF/services/com.fasterxml.jackson.core.JsonFactory +com/fasterxml/ +com/fasterxml/jackson/ +com/fasterxml/jackson/core/ +com/fasterxml/jackson/core/Base64Variant.class +com/fasterxml/jackson/core/Base64Variants.class +com/fasterxml/jackson/core/FormatFeature.class +com/fasterxml/jackson/core/FormatSchema.class +com/fasterxml/jackson/core/JsonEncoding.class +com/fasterxml/jackson/core/JsonFactory$Feature.class +com/fasterxml/jackson/core/JsonFactory.class +com/fasterxml/jackson/core/JsonGenerationException.class +com/fasterxml/jackson/core/JsonGenerator$1.class +com/fasterxml/jackson/core/JsonGenerator$Feature.class +com/fasterxml/jackson/core/JsonGenerator.class +com/fasterxml/jackson/core/JsonLocation.class +com/fasterxml/jackson/core/JsonParseException.class +com/fasterxml/jackson/core/JsonParser$Feature.class +com/fasterxml/jackson/core/JsonParser$NumberType.class +com/fasterxml/jackson/core/JsonParser.class +com/fasterxml/jackson/core/JsonPointer.class +com/fasterxml/jackson/core/JsonProcessingException.class +com/fasterxml/jackson/core/JsonStreamContext.class +com/fasterxml/jackson/core/JsonToken.class +com/fasterxml/jackson/core/JsonTokenId.class +com/fasterxml/jackson/core/JsonpCharacterEscapes.class +com/fasterxml/jackson/core/ObjectCodec.class +com/fasterxml/jackson/core/PrettyPrinter.class +com/fasterxml/jackson/core/SerializableString.class +com/fasterxml/jackson/core/TreeCodec.class +com/fasterxml/jackson/core/TreeNode.class +com/fasterxml/jackson/core/Version.class +com/fasterxml/jackson/core/Versioned.class +com/fasterxml/jackson/core/async/ +com/fasterxml/jackson/core/async/ByteArrayFeeder.class +com/fasterxml/jackson/core/async/ByteBufferFeeder.class +com/fasterxml/jackson/core/async/NonBlockingInputFeeder.class +com/fasterxml/jackson/core/base/ +com/fasterxml/jackson/core/base/GeneratorBase.class +com/fasterxml/jackson/core/base/ParserBase.class +com/fasterxml/jackson/core/base/ParserMinimalBase.class +com/fasterxml/jackson/core/filter/ +com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.class +com/fasterxml/jackson/core/filter/FilteringParserDelegate.class +com/fasterxml/jackson/core/filter/JsonPointerBasedFilter.class +com/fasterxml/jackson/core/filter/TokenFilter.class +com/fasterxml/jackson/core/filter/TokenFilterContext.class +com/fasterxml/jackson/core/format/ +com/fasterxml/jackson/core/format/DataFormatDetector.class +com/fasterxml/jackson/core/format/DataFormatMatcher.class +com/fasterxml/jackson/core/format/InputAccessor$Std.class +com/fasterxml/jackson/core/format/InputAccessor.class +com/fasterxml/jackson/core/format/MatchStrength.class +com/fasterxml/jackson/core/io/ +com/fasterxml/jackson/core/io/CharTypes.class +com/fasterxml/jackson/core/io/CharacterEscapes.class +com/fasterxml/jackson/core/io/DataOutputAsStream.class +com/fasterxml/jackson/core/io/IOContext.class +com/fasterxml/jackson/core/io/InputDecorator.class +com/fasterxml/jackson/core/io/JsonEOFException.class +com/fasterxml/jackson/core/io/JsonStringEncoder.class +com/fasterxml/jackson/core/io/MergedStream.class +com/fasterxml/jackson/core/io/NumberInput.class +com/fasterxml/jackson/core/io/NumberOutput.class +com/fasterxml/jackson/core/io/OutputDecorator.class +com/fasterxml/jackson/core/io/SegmentedStringWriter.class +com/fasterxml/jackson/core/io/SerializedString.class +com/fasterxml/jackson/core/io/UTF32Reader.class +com/fasterxml/jackson/core/io/UTF8Writer.class +com/fasterxml/jackson/core/json/ +com/fasterxml/jackson/core/json/ByteSourceJsonBootstrapper.class +com/fasterxml/jackson/core/json/DupDetector.class +com/fasterxml/jackson/core/json/JsonGeneratorImpl.class +com/fasterxml/jackson/core/json/JsonReadContext.class +com/fasterxml/jackson/core/json/JsonWriteContext.class +com/fasterxml/jackson/core/json/PackageVersion.class +com/fasterxml/jackson/core/json/ReaderBasedJsonParser.class +com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.class +com/fasterxml/jackson/core/json/UTF8JsonGenerator.class +com/fasterxml/jackson/core/json/UTF8StreamJsonParser.class +com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.class +com/fasterxml/jackson/core/json/async/ +com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.class +com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.class +com/fasterxml/jackson/core/sym/ +com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer$TableInfo.class +com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$Bucket.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$TableInfo.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer.class +com/fasterxml/jackson/core/sym/Name.class +com/fasterxml/jackson/core/sym/Name1.class +com/fasterxml/jackson/core/sym/Name2.class +com/fasterxml/jackson/core/sym/Name3.class +com/fasterxml/jackson/core/sym/NameN.class +com/fasterxml/jackson/core/type/ +com/fasterxml/jackson/core/type/ResolvedType.class +com/fasterxml/jackson/core/type/TypeReference.class +com/fasterxml/jackson/core/type/WritableTypeId$Inclusion.class +com/fasterxml/jackson/core/type/WritableTypeId.class +com/fasterxml/jackson/core/util/ +com/fasterxml/jackson/core/util/BufferRecycler.class +com/fasterxml/jackson/core/util/BufferRecyclers.class +com/fasterxml/jackson/core/util/ByteArrayBuilder.class +com/fasterxml/jackson/core/util/DefaultIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$FixedSpaceIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$Indenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$NopIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter.class +com/fasterxml/jackson/core/util/Instantiatable.class +com/fasterxml/jackson/core/util/InternCache.class +com/fasterxml/jackson/core/util/JsonGeneratorDelegate.class +com/fasterxml/jackson/core/util/JsonParserDelegate.class +com/fasterxml/jackson/core/util/JsonParserSequence.class +com/fasterxml/jackson/core/util/MinimalPrettyPrinter.class +com/fasterxml/jackson/core/util/RequestPayload.class +com/fasterxml/jackson/core/util/Separators.class +com/fasterxml/jackson/core/util/TextBuffer.class +com/fasterxml/jackson/core/util/ThreadLocalBufferManager$ThreadLocalBufferManagerHolder.class +com/fasterxml/jackson/core/util/ThreadLocalBufferManager.class +com/fasterxml/jackson/core/util/VersionUtil.class +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/ +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml +com/fasterxml/jackson/annotation/ +com/fasterxml/jackson/annotation/JacksonAnnotation.class +com/fasterxml/jackson/annotation/JacksonAnnotationValue.class +com/fasterxml/jackson/annotation/JacksonAnnotationsInside.class +com/fasterxml/jackson/annotation/JacksonInject$Value.class +com/fasterxml/jackson/annotation/JacksonInject.class +com/fasterxml/jackson/annotation/JsonAlias.class +com/fasterxml/jackson/annotation/JsonAnyGetter.class +com/fasterxml/jackson/annotation/JsonAnySetter.class +com/fasterxml/jackson/annotation/JsonAutoDetect$1.class +com/fasterxml/jackson/annotation/JsonAutoDetect$Value.class +com/fasterxml/jackson/annotation/JsonAutoDetect$Visibility.class +com/fasterxml/jackson/annotation/JsonAutoDetect.class +com/fasterxml/jackson/annotation/JsonBackReference.class +com/fasterxml/jackson/annotation/JsonClassDescription.class +com/fasterxml/jackson/annotation/JsonCreator$Mode.class +com/fasterxml/jackson/annotation/JsonCreator.class +com/fasterxml/jackson/annotation/JsonEnumDefaultValue.class +com/fasterxml/jackson/annotation/JsonFilter.class +com/fasterxml/jackson/annotation/JsonFormat$Feature.class +com/fasterxml/jackson/annotation/JsonFormat$Features.class +com/fasterxml/jackson/annotation/JsonFormat$Shape.class +com/fasterxml/jackson/annotation/JsonFormat$Value.class +com/fasterxml/jackson/annotation/JsonFormat.class +com/fasterxml/jackson/annotation/JsonGetter.class +com/fasterxml/jackson/annotation/JsonIdentityInfo.class +com/fasterxml/jackson/annotation/JsonIdentityReference.class +com/fasterxml/jackson/annotation/JsonIgnore.class +com/fasterxml/jackson/annotation/JsonIgnoreProperties$Value.class +com/fasterxml/jackson/annotation/JsonIgnoreProperties.class +com/fasterxml/jackson/annotation/JsonIgnoreType.class +com/fasterxml/jackson/annotation/JsonInclude$Include.class +com/fasterxml/jackson/annotation/JsonInclude$Value.class +com/fasterxml/jackson/annotation/JsonInclude.class +com/fasterxml/jackson/annotation/JsonManagedReference.class +com/fasterxml/jackson/annotation/JsonMerge.class +com/fasterxml/jackson/annotation/JsonProperty$Access.class +com/fasterxml/jackson/annotation/JsonProperty.class +com/fasterxml/jackson/annotation/JsonPropertyDescription.class +com/fasterxml/jackson/annotation/JsonPropertyOrder.class +com/fasterxml/jackson/annotation/JsonRawValue.class +com/fasterxml/jackson/annotation/JsonRootName.class +com/fasterxml/jackson/annotation/JsonSetter$Value.class +com/fasterxml/jackson/annotation/JsonSetter.class +com/fasterxml/jackson/annotation/JsonSubTypes$Type.class +com/fasterxml/jackson/annotation/JsonSubTypes.class +com/fasterxml/jackson/annotation/JsonTypeId.class +com/fasterxml/jackson/annotation/JsonTypeInfo$As.class +com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class +com/fasterxml/jackson/annotation/JsonTypeInfo$None.class +com/fasterxml/jackson/annotation/JsonTypeInfo.class +com/fasterxml/jackson/annotation/JsonTypeName.class +com/fasterxml/jackson/annotation/JsonUnwrapped.class +com/fasterxml/jackson/annotation/JsonValue.class +com/fasterxml/jackson/annotation/JsonView.class +com/fasterxml/jackson/annotation/Nulls.class +com/fasterxml/jackson/annotation/ObjectIdGenerator$IdKey.class +com/fasterxml/jackson/annotation/ObjectIdGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$Base.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$IntSequenceGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$None.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$PropertyGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$StringIdGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$UUIDGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators.class +com/fasterxml/jackson/annotation/ObjectIdResolver.class +com/fasterxml/jackson/annotation/OptBoolean.class +com/fasterxml/jackson/annotation/PropertyAccessor.class +com/fasterxml/jackson/annotation/SimpleObjectIdResolver.class +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/ +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml +META-INF/services/com.fasterxml.jackson.core.ObjectCodec +com/fasterxml/jackson/databind/ +com/fasterxml/jackson/databind/AbstractTypeResolver.class +com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty$Type.class +com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty.class +com/fasterxml/jackson/databind/AnnotationIntrospector.class +com/fasterxml/jackson/databind/BeanDescription.class +com/fasterxml/jackson/databind/BeanProperty$Bogus.class +com/fasterxml/jackson/databind/BeanProperty$Std.class +com/fasterxml/jackson/databind/BeanProperty.class +com/fasterxml/jackson/databind/DatabindContext.class +com/fasterxml/jackson/databind/DeserializationConfig.class +com/fasterxml/jackson/databind/DeserializationContext.class +com/fasterxml/jackson/databind/DeserializationFeature.class +com/fasterxml/jackson/databind/InjectableValues$Std.class +com/fasterxml/jackson/databind/InjectableValues.class +com/fasterxml/jackson/databind/JavaType.class +com/fasterxml/jackson/databind/JsonDeserializer$None.class +com/fasterxml/jackson/databind/JsonDeserializer.class +com/fasterxml/jackson/databind/JsonMappingException$Reference.class +com/fasterxml/jackson/databind/JsonMappingException.class +com/fasterxml/jackson/databind/JsonNode$1.class +com/fasterxml/jackson/databind/JsonNode.class +com/fasterxml/jackson/databind/JsonSerializable$Base.class +com/fasterxml/jackson/databind/JsonSerializable.class +com/fasterxml/jackson/databind/JsonSerializer$None.class +com/fasterxml/jackson/databind/JsonSerializer.class +com/fasterxml/jackson/databind/KeyDeserializer$None.class +com/fasterxml/jackson/databind/KeyDeserializer.class +com/fasterxml/jackson/databind/MapperFeature.class +com/fasterxml/jackson/databind/MappingIterator.class +com/fasterxml/jackson/databind/MappingJsonFactory.class +com/fasterxml/jackson/databind/Module$SetupContext.class +com/fasterxml/jackson/databind/Module.class +com/fasterxml/jackson/databind/ObjectMapper$1.class +com/fasterxml/jackson/databind/ObjectMapper$2.class +com/fasterxml/jackson/databind/ObjectMapper$3.class +com/fasterxml/jackson/databind/ObjectMapper$DefaultTypeResolverBuilder.class +com/fasterxml/jackson/databind/ObjectMapper$DefaultTyping.class +com/fasterxml/jackson/databind/ObjectMapper.class +com/fasterxml/jackson/databind/ObjectReader.class +com/fasterxml/jackson/databind/ObjectWriter$GeneratorSettings.class +com/fasterxml/jackson/databind/ObjectWriter$Prefetch.class +com/fasterxml/jackson/databind/ObjectWriter.class +com/fasterxml/jackson/databind/PropertyMetadata$MergeInfo.class +com/fasterxml/jackson/databind/PropertyMetadata.class +com/fasterxml/jackson/databind/PropertyName.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$KebabCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseWithUnderscoresStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$PascalCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$PropertyNamingStrategyBase.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$SnakeCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$UpperCamelCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy.class +com/fasterxml/jackson/databind/RuntimeJsonMappingException.class +com/fasterxml/jackson/databind/SequenceWriter.class +com/fasterxml/jackson/databind/SerializationConfig.class +com/fasterxml/jackson/databind/SerializationFeature.class +com/fasterxml/jackson/databind/SerializerProvider.class +com/fasterxml/jackson/databind/annotation/ +com/fasterxml/jackson/databind/annotation/JacksonStdImpl.class +com/fasterxml/jackson/databind/annotation/JsonAppend$Attr.class +com/fasterxml/jackson/databind/annotation/JsonAppend$Prop.class +com/fasterxml/jackson/databind/annotation/JsonAppend.class +com/fasterxml/jackson/databind/annotation/JsonDeserialize.class +com/fasterxml/jackson/databind/annotation/JsonNaming.class +com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder$Value.class +com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder.class +com/fasterxml/jackson/databind/annotation/JsonSerialize$Inclusion.class +com/fasterxml/jackson/databind/annotation/JsonSerialize$Typing.class +com/fasterxml/jackson/databind/annotation/JsonSerialize.class +com/fasterxml/jackson/databind/annotation/JsonTypeIdResolver.class +com/fasterxml/jackson/databind/annotation/JsonTypeResolver.class +com/fasterxml/jackson/databind/annotation/JsonValueInstantiator.class +com/fasterxml/jackson/databind/annotation/NoClass.class +com/fasterxml/jackson/databind/cfg/ +com/fasterxml/jackson/databind/cfg/BaseSettings.class +com/fasterxml/jackson/databind/cfg/ConfigFeature.class +com/fasterxml/jackson/databind/cfg/ConfigOverride$Empty.class +com/fasterxml/jackson/databind/cfg/ConfigOverride.class +com/fasterxml/jackson/databind/cfg/ConfigOverrides.class +com/fasterxml/jackson/databind/cfg/ContextAttributes$Impl.class +com/fasterxml/jackson/databind/cfg/ContextAttributes.class +com/fasterxml/jackson/databind/cfg/DeserializerFactoryConfig.class +com/fasterxml/jackson/databind/cfg/HandlerInstantiator.class +com/fasterxml/jackson/databind/cfg/MapperConfig.class +com/fasterxml/jackson/databind/cfg/MapperConfigBase.class +com/fasterxml/jackson/databind/cfg/MutableConfigOverride.class +com/fasterxml/jackson/databind/cfg/PackageVersion.class +com/fasterxml/jackson/databind/cfg/SerializerFactoryConfig.class +com/fasterxml/jackson/databind/deser/ +com/fasterxml/jackson/databind/deser/AbstractDeserializer.class +com/fasterxml/jackson/databind/deser/BasicDeserializerFactory$1.class +com/fasterxml/jackson/databind/deser/BasicDeserializerFactory.class +com/fasterxml/jackson/databind/deser/BeanDeserializer$1.class +com/fasterxml/jackson/databind/deser/BeanDeserializer$BeanReferring.class +com/fasterxml/jackson/databind/deser/BeanDeserializer.class +com/fasterxml/jackson/databind/deser/BeanDeserializerBase.class +com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.class +com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.class +com/fasterxml/jackson/databind/deser/BeanDeserializerModifier.class +com/fasterxml/jackson/databind/deser/BuilderBasedDeserializer.class +com/fasterxml/jackson/databind/deser/ContextualDeserializer.class +com/fasterxml/jackson/databind/deser/ContextualKeyDeserializer.class +com/fasterxml/jackson/databind/deser/CreatorProperty.class +com/fasterxml/jackson/databind/deser/DataFormatReaders$AccessorForReader.class +com/fasterxml/jackson/databind/deser/DataFormatReaders$Match.class +com/fasterxml/jackson/databind/deser/DataFormatReaders.class +com/fasterxml/jackson/databind/deser/DefaultDeserializationContext$Impl.class +com/fasterxml/jackson/databind/deser/DefaultDeserializationContext.class +com/fasterxml/jackson/databind/deser/DeserializationProblemHandler.class +com/fasterxml/jackson/databind/deser/DeserializerCache.class +com/fasterxml/jackson/databind/deser/DeserializerFactory.class +com/fasterxml/jackson/databind/deser/Deserializers$Base.class +com/fasterxml/jackson/databind/deser/Deserializers.class +com/fasterxml/jackson/databind/deser/KeyDeserializers.class +com/fasterxml/jackson/databind/deser/NullValueProvider.class +com/fasterxml/jackson/databind/deser/ResolvableDeserializer.class +com/fasterxml/jackson/databind/deser/SettableAnyProperty$AnySetterReferring.class +com/fasterxml/jackson/databind/deser/SettableAnyProperty.class +com/fasterxml/jackson/databind/deser/SettableBeanProperty$Delegating.class +com/fasterxml/jackson/databind/deser/SettableBeanProperty.class +com/fasterxml/jackson/databind/deser/UnresolvedForwardReference.class +com/fasterxml/jackson/databind/deser/UnresolvedId.class +com/fasterxml/jackson/databind/deser/ValueInstantiator$Base.class +com/fasterxml/jackson/databind/deser/ValueInstantiator$Gettable.class +com/fasterxml/jackson/databind/deser/ValueInstantiator.class +com/fasterxml/jackson/databind/deser/ValueInstantiators$Base.class +com/fasterxml/jackson/databind/deser/ValueInstantiators.class +com/fasterxml/jackson/databind/deser/impl/ +com/fasterxml/jackson/databind/deser/impl/BeanAsArrayBuilderDeserializer.class +com/fasterxml/jackson/databind/deser/impl/BeanAsArrayDeserializer.class +com/fasterxml/jackson/databind/deser/impl/BeanPropertyMap.class +com/fasterxml/jackson/databind/deser/impl/CreatorCandidate$Param.class +com/fasterxml/jackson/databind/deser/impl/CreatorCandidate.class +com/fasterxml/jackson/databind/deser/impl/CreatorCollector$StdTypeConstructor.class +com/fasterxml/jackson/databind/deser/impl/CreatorCollector.class +com/fasterxml/jackson/databind/deser/impl/ErrorThrowingDeserializer.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$Builder.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$ExtTypedProperty.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler.class +com/fasterxml/jackson/databind/deser/impl/FailingDeserializer.class +com/fasterxml/jackson/databind/deser/impl/FieldProperty.class +com/fasterxml/jackson/databind/deser/impl/InnerClassProperty.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$1.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$JavaUtilCollectionsConverter.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers.class +com/fasterxml/jackson/databind/deser/impl/ManagedReferenceProperty.class +com/fasterxml/jackson/databind/deser/impl/MergingSettableBeanProperty.class +com/fasterxml/jackson/databind/deser/impl/MethodProperty.class +com/fasterxml/jackson/databind/deser/impl/NullsAsEmptyProvider.class +com/fasterxml/jackson/databind/deser/impl/NullsConstantProvider.class +com/fasterxml/jackson/databind/deser/impl/NullsFailProvider.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReader.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty$PropertyReferring.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator$CaseInsensitiveMap.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedObjectIdGenerator.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Any.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Map.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Regular.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue.class +com/fasterxml/jackson/databind/deser/impl/PropertyValueBuffer.class +com/fasterxml/jackson/databind/deser/impl/ReadableObjectId$Referring.class +com/fasterxml/jackson/databind/deser/impl/ReadableObjectId.class +com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.class +com/fasterxml/jackson/databind/deser/impl/TypeWrappedDeserializer.class +com/fasterxml/jackson/databind/deser/impl/UnwrappedPropertyHandler.class +com/fasterxml/jackson/databind/deser/impl/ValueInjector.class +com/fasterxml/jackson/databind/deser/std/ +com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.class +com/fasterxml/jackson/databind/deser/std/AtomicBooleanDeserializer.class +com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.class +com/fasterxml/jackson/databind/deser/std/BaseNodeDeserializer.class +com/fasterxml/jackson/databind/deser/std/ByteBufferDeserializer.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferring.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferringAccumulator.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer.class +com/fasterxml/jackson/databind/deser/std/ContainerDeserializerBase.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$CalendarDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateBasedDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$SqlDateDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$TimestampDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers.class +com/fasterxml/jackson/databind/deser/std/DelegatingDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumMapDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumSetDeserializer.class +com/fasterxml/jackson/databind/deser/std/FactoryBasedEnumDeserializer.class +com/fasterxml/jackson/databind/deser/std/FromStringDeserializer$Std.class +com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.class +com/fasterxml/jackson/databind/deser/std/JdkDeserializers.class +com/fasterxml/jackson/databind/deser/std/JsonLocationInstantiator.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ObjectDeserializer.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferring.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferringAccumulator.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer.class +com/fasterxml/jackson/databind/deser/std/MapEntryDeserializer.class +com/fasterxml/jackson/databind/deser/std/NullifyingDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$1.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigDecimalDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigIntegerDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BooleanDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ByteDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$CharacterDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$DoubleDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$FloatDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$IntegerDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$LongDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$NumberDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$PrimitiveOrWrapperDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ShortDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers.class +com/fasterxml/jackson/databind/deser/std/ObjectArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$BooleanDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ByteDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$CharDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$DoubleDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$FloatDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$IntDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$LongDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ShortDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers.class +com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.class +com/fasterxml/jackson/databind/deser/std/StackTraceElementDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdDelegatingDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$DelegatingKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$EnumKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringCtorKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringFactoryKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializers.class +com/fasterxml/jackson/databind/deser/std/StdNodeBasedDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdScalarDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdValueInstantiator.class +com/fasterxml/jackson/databind/deser/std/StringArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/StringCollectionDeserializer.class +com/fasterxml/jackson/databind/deser/std/StringDeserializer.class +com/fasterxml/jackson/databind/deser/std/ThrowableDeserializer.class +com/fasterxml/jackson/databind/deser/std/TokenBufferDeserializer.class +com/fasterxml/jackson/databind/deser/std/UUIDDeserializer.class +com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer$Vanilla.class +com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.class +com/fasterxml/jackson/databind/exc/ +com/fasterxml/jackson/databind/exc/IgnoredPropertyException.class +com/fasterxml/jackson/databind/exc/InvalidDefinitionException.class +com/fasterxml/jackson/databind/exc/InvalidFormatException.class +com/fasterxml/jackson/databind/exc/InvalidNullException.class +com/fasterxml/jackson/databind/exc/InvalidTypeIdException.class +com/fasterxml/jackson/databind/exc/MismatchedInputException.class +com/fasterxml/jackson/databind/exc/PropertyBindingException.class +com/fasterxml/jackson/databind/exc/UnrecognizedPropertyException.class +com/fasterxml/jackson/databind/ext/ +com/fasterxml/jackson/databind/ext/CoreXMLDeserializers$Std.class +com/fasterxml/jackson/databind/ext/CoreXMLDeserializers.class +com/fasterxml/jackson/databind/ext/CoreXMLSerializers$XMLGregorianCalendarSerializer.class +com/fasterxml/jackson/databind/ext/CoreXMLSerializers.class +com/fasterxml/jackson/databind/ext/DOMDeserializer$DocumentDeserializer.class +com/fasterxml/jackson/databind/ext/DOMDeserializer$NodeDeserializer.class +com/fasterxml/jackson/databind/ext/DOMDeserializer.class +com/fasterxml/jackson/databind/ext/DOMSerializer.class +com/fasterxml/jackson/databind/ext/Java7Support.class +com/fasterxml/jackson/databind/ext/Java7SupportImpl.class +com/fasterxml/jackson/databind/ext/NioPathDeserializer.class +com/fasterxml/jackson/databind/ext/NioPathSerializer.class +com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.class +com/fasterxml/jackson/databind/introspect/ +com/fasterxml/jackson/databind/introspect/Annotated.class +com/fasterxml/jackson/databind/introspect/AnnotatedClass$Creators.class +com/fasterxml/jackson/databind/introspect/AnnotatedClass.class +com/fasterxml/jackson/databind/introspect/AnnotatedClassResolver.class +com/fasterxml/jackson/databind/introspect/AnnotatedConstructor$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedConstructor.class +com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedField$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedField.class +com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector$FieldBuilder.class +com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedMember.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethod$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethod.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector$MethodBuilder.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodMap.class +com/fasterxml/jackson/databind/introspect/AnnotatedParameter.class +com/fasterxml/jackson/databind/introspect/AnnotatedWithParams.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$EmptyCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$NCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$NoAnnotations.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneAnnotation.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$TwoAnnotations.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.class +com/fasterxml/jackson/databind/introspect/AnnotationMap.class +com/fasterxml/jackson/databind/introspect/BasicBeanDescription.class +com/fasterxml/jackson/databind/introspect/BasicClassIntrospector.class +com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.class +com/fasterxml/jackson/databind/introspect/ClassIntrospector$MixInResolver.class +com/fasterxml/jackson/databind/introspect/ClassIntrospector.class +com/fasterxml/jackson/databind/introspect/CollectorBase.class +com/fasterxml/jackson/databind/introspect/ConcreteBeanPropertyBase.class +com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector$1.class +com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.class +com/fasterxml/jackson/databind/introspect/MemberKey.class +com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector$1.class +com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector.class +com/fasterxml/jackson/databind/introspect/ObjectIdInfo.class +com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$1.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$10.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$2.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$3.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$4.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$5.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$6.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$7.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$8.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$9.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$Linked.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$MemberIterator.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$WithMember.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.class +com/fasterxml/jackson/databind/introspect/SimpleMixInResolver.class +com/fasterxml/jackson/databind/introspect/TypeResolutionContext$Basic.class +com/fasterxml/jackson/databind/introspect/TypeResolutionContext.class +com/fasterxml/jackson/databind/introspect/VirtualAnnotatedMember.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker$1.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker$Std.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker.class +com/fasterxml/jackson/databind/introspect/WithMember.class +com/fasterxml/jackson/databind/jsonFormatVisitors/ +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatTypes.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitable.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWithSerializerProvider.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormat.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor.class +com/fasterxml/jackson/databind/jsonschema/ +com/fasterxml/jackson/databind/jsonschema/JsonSchema.class +com/fasterxml/jackson/databind/jsonschema/JsonSerializableSchema.class +com/fasterxml/jackson/databind/jsonschema/SchemaAware.class +com/fasterxml/jackson/databind/jsontype/ +com/fasterxml/jackson/databind/jsontype/NamedType.class +com/fasterxml/jackson/databind/jsontype/SubtypeResolver.class +com/fasterxml/jackson/databind/jsontype/TypeDeserializer$1.class +com/fasterxml/jackson/databind/jsontype/TypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/TypeIdResolver.class +com/fasterxml/jackson/databind/jsontype/TypeResolverBuilder.class +com/fasterxml/jackson/databind/jsontype/TypeSerializer$1.class +com/fasterxml/jackson/databind/jsontype/TypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/ +com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExistingPropertyTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/ClassNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/MinimalClassNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/StdSubtypeResolver.class +com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder$1.class +com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder.class +com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.class +com/fasterxml/jackson/databind/jsontype/impl/TypeDeserializerBase.class +com/fasterxml/jackson/databind/jsontype/impl/TypeIdResolverBase.class +com/fasterxml/jackson/databind/jsontype/impl/TypeNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/TypeSerializerBase.class +com/fasterxml/jackson/databind/module/ +com/fasterxml/jackson/databind/module/SimpleAbstractTypeResolver.class +com/fasterxml/jackson/databind/module/SimpleDeserializers.class +com/fasterxml/jackson/databind/module/SimpleKeyDeserializers.class +com/fasterxml/jackson/databind/module/SimpleModule.class +com/fasterxml/jackson/databind/module/SimpleSerializers.class +com/fasterxml/jackson/databind/module/SimpleValueInstantiators.class +com/fasterxml/jackson/databind/node/ +com/fasterxml/jackson/databind/node/ArrayNode.class +com/fasterxml/jackson/databind/node/BaseJsonNode.class +com/fasterxml/jackson/databind/node/BigIntegerNode.class +com/fasterxml/jackson/databind/node/BinaryNode.class +com/fasterxml/jackson/databind/node/BooleanNode.class +com/fasterxml/jackson/databind/node/ContainerNode.class +com/fasterxml/jackson/databind/node/DecimalNode.class +com/fasterxml/jackson/databind/node/DoubleNode.class +com/fasterxml/jackson/databind/node/FloatNode.class +com/fasterxml/jackson/databind/node/IntNode.class +com/fasterxml/jackson/databind/node/JsonNodeCreator.class +com/fasterxml/jackson/databind/node/JsonNodeFactory.class +com/fasterxml/jackson/databind/node/JsonNodeType.class +com/fasterxml/jackson/databind/node/LongNode.class +com/fasterxml/jackson/databind/node/MissingNode.class +com/fasterxml/jackson/databind/node/NodeCursor$ArrayCursor.class +com/fasterxml/jackson/databind/node/NodeCursor$ObjectCursor.class +com/fasterxml/jackson/databind/node/NodeCursor$RootCursor.class +com/fasterxml/jackson/databind/node/NodeCursor.class +com/fasterxml/jackson/databind/node/NullNode.class +com/fasterxml/jackson/databind/node/NumericNode.class +com/fasterxml/jackson/databind/node/ObjectNode.class +com/fasterxml/jackson/databind/node/POJONode.class +com/fasterxml/jackson/databind/node/ShortNode.class +com/fasterxml/jackson/databind/node/TextNode.class +com/fasterxml/jackson/databind/node/TreeTraversingParser$1.class +com/fasterxml/jackson/databind/node/TreeTraversingParser.class +com/fasterxml/jackson/databind/node/ValueNode.class +com/fasterxml/jackson/databind/ser/ +com/fasterxml/jackson/databind/ser/AnyGetterWriter.class +com/fasterxml/jackson/databind/ser/BasicSerializerFactory$1.class +com/fasterxml/jackson/databind/ser/BasicSerializerFactory.class +com/fasterxml/jackson/databind/ser/BeanPropertyFilter.class +com/fasterxml/jackson/databind/ser/BeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/BeanSerializer.class +com/fasterxml/jackson/databind/ser/BeanSerializerBuilder.class +com/fasterxml/jackson/databind/ser/BeanSerializerFactory.class +com/fasterxml/jackson/databind/ser/BeanSerializerModifier.class +com/fasterxml/jackson/databind/ser/ContainerSerializer.class +com/fasterxml/jackson/databind/ser/ContextualSerializer.class +com/fasterxml/jackson/databind/ser/DefaultSerializerProvider$Impl.class +com/fasterxml/jackson/databind/ser/DefaultSerializerProvider.class +com/fasterxml/jackson/databind/ser/FilterProvider.class +com/fasterxml/jackson/databind/ser/PropertyBuilder$1.class +com/fasterxml/jackson/databind/ser/PropertyBuilder.class +com/fasterxml/jackson/databind/ser/PropertyFilter.class +com/fasterxml/jackson/databind/ser/PropertyWriter.class +com/fasterxml/jackson/databind/ser/ResolvableSerializer.class +com/fasterxml/jackson/databind/ser/SerializerCache.class +com/fasterxml/jackson/databind/ser/SerializerFactory.class +com/fasterxml/jackson/databind/ser/Serializers$Base.class +com/fasterxml/jackson/databind/ser/Serializers.class +com/fasterxml/jackson/databind/ser/VirtualBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/ +com/fasterxml/jackson/databind/ser/impl/AttributePropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.class +com/fasterxml/jackson/databind/ser/impl/FailingSerializer.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$MultiView.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$SingleView.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/IndexedListSerializer.class +com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.class +com/fasterxml/jackson/databind/ser/impl/IteratorSerializer.class +com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer$1.class +com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.class +com/fasterxml/jackson/databind/ser/impl/ObjectIdWriter.class +com/fasterxml/jackson/databind/ser/impl/PropertyBasedObjectIdGenerator.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Double.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Multi.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$SerializerAndMapResult.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$TypeAndSerializer.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap.class +com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap$Bucket.class +com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$1.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$FilterExceptFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$SerializeExceptFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleFilterProvider.class +com/fasterxml/jackson/databind/ser/impl/StringArraySerializer.class +com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.class +com/fasterxml/jackson/databind/ser/impl/TypeWrappedSerializer.class +com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter$1.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.class +com/fasterxml/jackson/databind/ser/impl/WritableObjectId.class +com/fasterxml/jackson/databind/ser/std/ +com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.class +com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.class +com/fasterxml/jackson/databind/ser/std/AtomicReferenceSerializer.class +com/fasterxml/jackson/databind/ser/std/BeanSerializerBase$1.class +com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.class +com/fasterxml/jackson/databind/ser/std/BooleanSerializer$AsNumber.class +com/fasterxml/jackson/databind/ser/std/BooleanSerializer.class +com/fasterxml/jackson/databind/ser/std/ByteArraySerializer.class +com/fasterxml/jackson/databind/ser/std/ByteBufferSerializer.class +com/fasterxml/jackson/databind/ser/std/CalendarSerializer.class +com/fasterxml/jackson/databind/ser/std/ClassSerializer.class +com/fasterxml/jackson/databind/ser/std/CollectionSerializer.class +com/fasterxml/jackson/databind/ser/std/DateSerializer.class +com/fasterxml/jackson/databind/ser/std/DateTimeSerializerBase.class +com/fasterxml/jackson/databind/ser/std/EnumSerializer.class +com/fasterxml/jackson/databind/ser/std/EnumSetSerializer.class +com/fasterxml/jackson/databind/ser/std/FileSerializer.class +com/fasterxml/jackson/databind/ser/std/InetAddressSerializer.class +com/fasterxml/jackson/databind/ser/std/InetSocketAddressSerializer.class +com/fasterxml/jackson/databind/ser/std/IterableSerializer.class +com/fasterxml/jackson/databind/ser/std/JsonValueSerializer$TypeSerializerRerouter.class +com/fasterxml/jackson/databind/ser/std/JsonValueSerializer.class +com/fasterxml/jackson/databind/ser/std/MapProperty.class +com/fasterxml/jackson/databind/ser/std/MapSerializer$1.class +com/fasterxml/jackson/databind/ser/std/MapSerializer.class +com/fasterxml/jackson/databind/ser/std/NonTypedScalarSerializerBase.class +com/fasterxml/jackson/databind/ser/std/NullSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializer$1.class +com/fasterxml/jackson/databind/ser/std/NumberSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$1.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$Base.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$DoubleSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$FloatSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntLikeSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntegerSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$LongSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$ShortSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers.class +com/fasterxml/jackson/databind/ser/std/ObjectArraySerializer.class +com/fasterxml/jackson/databind/ser/std/RawSerializer.class +com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer$1.class +com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer.class +com/fasterxml/jackson/databind/ser/std/SerializableSerializer.class +com/fasterxml/jackson/databind/ser/std/SqlDateSerializer.class +com/fasterxml/jackson/databind/ser/std/SqlTimeSerializer.class +com/fasterxml/jackson/databind/ser/std/StaticListSerializerBase.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$BooleanArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$CharArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$DoubleArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$FloatArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$IntArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$LongArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$ShortArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$TypedPrimitiveArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers.class +com/fasterxml/jackson/databind/ser/std/StdDelegatingSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicBooleanSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicIntegerSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicLongSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Default.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Dynamic.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$EnumKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$StringKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers.class +com/fasterxml/jackson/databind/ser/std/StdScalarSerializer.class +com/fasterxml/jackson/databind/ser/std/StdSerializer.class +com/fasterxml/jackson/databind/ser/std/StringSerializer.class +com/fasterxml/jackson/databind/ser/std/TimeZoneSerializer.class +com/fasterxml/jackson/databind/ser/std/ToStringSerializer.class +com/fasterxml/jackson/databind/ser/std/TokenBufferSerializer.class +com/fasterxml/jackson/databind/ser/std/UUIDSerializer.class +com/fasterxml/jackson/databind/type/ +com/fasterxml/jackson/databind/type/ArrayType.class +com/fasterxml/jackson/databind/type/ClassKey.class +com/fasterxml/jackson/databind/type/ClassStack.class +com/fasterxml/jackson/databind/type/CollectionLikeType.class +com/fasterxml/jackson/databind/type/CollectionType.class +com/fasterxml/jackson/databind/type/MapLikeType.class +com/fasterxml/jackson/databind/type/MapType.class +com/fasterxml/jackson/databind/type/PlaceholderForType.class +com/fasterxml/jackson/databind/type/ReferenceType.class +com/fasterxml/jackson/databind/type/ResolvedRecursiveType.class +com/fasterxml/jackson/databind/type/SimpleType.class +com/fasterxml/jackson/databind/type/TypeBase.class +com/fasterxml/jackson/databind/type/TypeBindings$AsKey.class +com/fasterxml/jackson/databind/type/TypeBindings$TypeParamStash.class +com/fasterxml/jackson/databind/type/TypeBindings.class +com/fasterxml/jackson/databind/type/TypeFactory.class +com/fasterxml/jackson/databind/type/TypeModifier.class +com/fasterxml/jackson/databind/type/TypeParser$MyTokenizer.class +com/fasterxml/jackson/databind/type/TypeParser.class +com/fasterxml/jackson/databind/util/ +com/fasterxml/jackson/databind/util/AccessPattern.class +com/fasterxml/jackson/databind/util/Annotations.class +com/fasterxml/jackson/databind/util/ArrayBuilders$1.class +com/fasterxml/jackson/databind/util/ArrayBuilders$BooleanBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$ByteBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$DoubleBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$FloatBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$IntBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$LongBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$ShortBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders.class +com/fasterxml/jackson/databind/util/ArrayIterator.class +com/fasterxml/jackson/databind/util/BeanUtil.class +com/fasterxml/jackson/databind/util/ByteBufferBackedInputStream.class +com/fasterxml/jackson/databind/util/ByteBufferBackedOutputStream.class +com/fasterxml/jackson/databind/util/ClassUtil$Ctor.class +com/fasterxml/jackson/databind/util/ClassUtil$EnumTypeLocator.class +com/fasterxml/jackson/databind/util/ClassUtil.class +com/fasterxml/jackson/databind/util/CompactStringObjectMap.class +com/fasterxml/jackson/databind/util/ConstantValueInstantiator.class +com/fasterxml/jackson/databind/util/Converter$None.class +com/fasterxml/jackson/databind/util/Converter.class +com/fasterxml/jackson/databind/util/EnumResolver.class +com/fasterxml/jackson/databind/util/EnumValues.class +com/fasterxml/jackson/databind/util/ISO8601DateFormat.class +com/fasterxml/jackson/databind/util/ISO8601Utils.class +com/fasterxml/jackson/databind/util/JSONPObject.class +com/fasterxml/jackson/databind/util/JSONWrappedObject.class +com/fasterxml/jackson/databind/util/LRUMap.class +com/fasterxml/jackson/databind/util/LinkedNode.class +com/fasterxml/jackson/databind/util/NameTransformer$1.class +com/fasterxml/jackson/databind/util/NameTransformer$2.class +com/fasterxml/jackson/databind/util/NameTransformer$3.class +com/fasterxml/jackson/databind/util/NameTransformer$Chained.class +com/fasterxml/jackson/databind/util/NameTransformer$NopTransformer.class +com/fasterxml/jackson/databind/util/NameTransformer.class +com/fasterxml/jackson/databind/util/Named.class +com/fasterxml/jackson/databind/util/ObjectBuffer.class +com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder$Node.class +com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder.class +com/fasterxml/jackson/databind/util/RawValue.class +com/fasterxml/jackson/databind/util/RootNameLookup.class +com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.class +com/fasterxml/jackson/databind/util/StdConverter.class +com/fasterxml/jackson/databind/util/StdDateFormat.class +com/fasterxml/jackson/databind/util/TokenBuffer$1.class +com/fasterxml/jackson/databind/util/TokenBuffer$Parser.class +com/fasterxml/jackson/databind/util/TokenBuffer$Segment.class +com/fasterxml/jackson/databind/util/TokenBuffer.class +com/fasterxml/jackson/databind/util/TokenBufferReadContext.class +com/fasterxml/jackson/databind/util/TypeKey.class +com/fasterxml/jackson/databind/util/ViewMatcher$Multi.class +com/fasterxml/jackson/databind/util/ViewMatcher$Single.class +com/fasterxml/jackson/databind/util/ViewMatcher.class diff --git a/examples/temp2.txt b/examples/temp2.txt new file mode 100644 index 00000000..83556ad8 --- /dev/null +++ b/examples/temp2.txt @@ -0,0 +1,1917 @@ +META-INF/ +META-INF/MANIFEST.MF +LICENSE.md +com/ +com/sendgrid/ +com/sendgrid/SendGridAPI.class +com/sendgrid/SendGrid$1.class +com/sendgrid/APICallback.class +com/sendgrid/SendGrid$2.class +com/sendgrid/SendGrid.class +com/sendgrid/SpamCheckSetting.class +com/sendgrid/Attachments$Builder.class +com/sendgrid/OpenTrackingSetting.class +com/sendgrid/Setting.class +com/sendgrid/GoogleAnalyticsSetting.class +com/sendgrid/ASM.class +com/sendgrid/FooterSetting.class +com/sendgrid/Personalization.class +com/sendgrid/Email.class +com/sendgrid/MailSettings.class +com/sendgrid/BccSettings.class +com/sendgrid/Content.class +com/sendgrid/TrackingSettings.class +com/sendgrid/ClickTrackingSetting.class +com/sendgrid/Attachments.class +com/sendgrid/ContentVerifier.class +com/sendgrid/SubscriptionTrackingSetting.class +com/sendgrid/Mail.class +com/sendgrid/RateLimitException.class +META-INF/maven/ +META-INF/maven/com.sendgrid/ +META-INF/maven/com.sendgrid/sendgrid-java/ +META-INF/maven/com.sendgrid/sendgrid-java/pom.xml +META-INF/maven/com.sendgrid/sendgrid-java/pom.properties +com/sendgrid/Client$1.class +com/sendgrid/Client.class +com/sendgrid/HttpDeleteWithBody.class +com/sendgrid/Method.class +com/sendgrid/Request.class +com/sendgrid/Response.class +com/sendgrid/SendGridResponseHandler.class +org/ +org/apache/ +org/apache/http/ +org/apache/http/message/ +org/apache/http/message/BasicHeaderElementIterator.class +org/apache/http/message/LineParser.class +org/apache/http/message/BasicHttpEntityEnclosingRequest.class +org/apache/http/message/HeaderValueFormatter.class +org/apache/http/message/BasicLineFormatter.class +org/apache/http/message/BasicLineParser.class +org/apache/http/message/HeaderGroup.class +org/apache/http/message/BasicNameValuePair.class +org/apache/http/message/BufferedHeader.class +org/apache/http/message/BasicListHeaderIterator.class +org/apache/http/message/BasicHeader.class +org/apache/http/message/LineFormatter.class +org/apache/http/message/BasicHttpResponse.class +org/apache/http/message/BasicTokenIterator.class +org/apache/http/message/BasicRequestLine.class +org/apache/http/message/ParserCursor.class +org/apache/http/message/BasicHeaderValueParser.class +org/apache/http/message/BasicHeaderValueFormatter.class +org/apache/http/message/BasicHttpRequest.class +org/apache/http/message/HeaderValueParser.class +org/apache/http/message/AbstractHttpMessage.class +org/apache/http/message/TokenParser.class +org/apache/http/message/BasicHeaderIterator.class +org/apache/http/message/BasicHeaderElement.class +org/apache/http/message/BasicStatusLine.class +org/apache/http/concurrent/ +org/apache/http/concurrent/BasicFuture.class +org/apache/http/concurrent/Cancellable.class +org/apache/http/concurrent/FutureCallback.class +org/apache/http/HeaderElement.class +org/apache/http/TruncatedChunkException.class +org/apache/http/ExceptionLogger$1.class +org/apache/http/version.properties +org/apache/http/HeaderElementIterator.class +org/apache/http/ProtocolVersion.class +org/apache/http/ExceptionLogger.class +org/apache/http/HttpRequestFactory.class +org/apache/http/HttpConnection.class +org/apache/http/HttpRequestInterceptor.class +org/apache/http/ContentTooLongException.class +org/apache/http/UnsupportedHttpVersionException.class +org/apache/http/HttpResponseInterceptor.class +org/apache/http/HttpInetConnection.class +org/apache/http/HttpEntity.class +org/apache/http/HttpException.class +org/apache/http/annotation/ +org/apache/http/annotation/Obsolete.class +org/apache/http/annotation/Experimental.class +org/apache/http/annotation/NotThreadSafe.class +org/apache/http/annotation/Immutable.class +org/apache/http/annotation/ThreadSafe.class +org/apache/http/annotation/GuardedBy.class +org/apache/http/Consts.class +org/apache/http/HttpConnectionMetrics.class +org/apache/http/HttpMessage.class +org/apache/http/MethodNotSupportedException.class +org/apache/http/ParseException.class +org/apache/http/params/ +org/apache/http/params/CoreProtocolPNames.class +org/apache/http/params/SyncBasicHttpParams.class +org/apache/http/params/DefaultedHttpParams.class +org/apache/http/params/HttpParams.class +org/apache/http/params/AbstractHttpParams.class +org/apache/http/params/HttpAbstractParamBean.class +org/apache/http/params/HttpConnectionParams.class +org/apache/http/params/BasicHttpParams.class +org/apache/http/params/HttpConnectionParamBean.class +org/apache/http/params/CoreConnectionPNames.class +org/apache/http/params/HttpParamConfig.class +org/apache/http/params/HttpProtocolParamBean.class +org/apache/http/params/HttpProtocolParams.class +org/apache/http/params/HttpParamsNames.class +org/apache/http/ReasonPhraseCatalog.class +org/apache/http/MalformedChunkCodingException.class +org/apache/http/FormattedHeader.class +org/apache/http/HttpResponse.class +org/apache/http/HeaderIterator.class +org/apache/http/HttpHeaders.class +org/apache/http/HttpClientConnection.class +org/apache/http/HttpHost.class +org/apache/http/protocol/ +org/apache/http/protocol/ResponseDate.class +org/apache/http/protocol/ChainBuilder.class +org/apache/http/protocol/HttpDateGenerator.class +org/apache/http/protocol/HttpRequestHandlerMapper.class +org/apache/http/protocol/HTTP.class +org/apache/http/protocol/SyncBasicHttpContext.class +org/apache/http/protocol/HttpService$HttpRequestHandlerResolverAdapter.class +org/apache/http/protocol/ImmutableHttpProcessor.class +org/apache/http/protocol/BasicHttpContext.class +org/apache/http/protocol/HttpProcessorBuilder.class +org/apache/http/protocol/RequestTargetHost.class +org/apache/http/protocol/ResponseConnControl.class +org/apache/http/protocol/HttpRequestInterceptorList.class +org/apache/http/protocol/HttpRequestExecutor.class +org/apache/http/protocol/RequestUserAgent.class +org/apache/http/protocol/HttpRequestHandlerResolver.class +org/apache/http/protocol/BasicHttpProcessor.class +org/apache/http/protocol/ResponseServer.class +org/apache/http/protocol/ResponseContent.class +org/apache/http/protocol/RequestDate.class +org/apache/http/protocol/HttpService.class +org/apache/http/protocol/HttpContext.class +org/apache/http/protocol/RequestConnControl.class +org/apache/http/protocol/UriHttpRequestHandlerMapper.class +org/apache/http/protocol/UriPatternMatcher.class +org/apache/http/protocol/HttpCoreContext.class +org/apache/http/protocol/HttpProcessor.class +org/apache/http/protocol/RequestExpectContinue.class +org/apache/http/protocol/HttpExpectationVerifier.class +org/apache/http/protocol/HttpRequestHandlerRegistry.class +org/apache/http/protocol/HttpResponseInterceptorList.class +org/apache/http/protocol/HttpRequestHandler.class +org/apache/http/protocol/ExecutionContext.class +org/apache/http/protocol/RequestContent.class +org/apache/http/protocol/DefaultedHttpContext.class +org/apache/http/HttpStatus.class +org/apache/http/TokenIterator.class +org/apache/http/ssl/ +org/apache/http/ssl/SSLContextBuilder$TrustManagerDelegate.class +org/apache/http/ssl/TrustStrategy.class +org/apache/http/ssl/PrivateKeyStrategy.class +org/apache/http/ssl/SSLContextBuilder$KeyManagerDelegate.class +org/apache/http/ssl/SSLContexts.class +org/apache/http/ssl/SSLContextBuilder.class +org/apache/http/ssl/SSLInitializationException.class +org/apache/http/ssl/PrivateKeyDetails.class +org/apache/http/ConnectionReuseStrategy.class +org/apache/http/pool/ +org/apache/http/pool/AbstractConnPool$4.class +org/apache/http/pool/AbstractConnPool$2.class +org/apache/http/pool/PoolEntry.class +org/apache/http/pool/ConnFactory.class +org/apache/http/pool/RouteSpecificPool.class +org/apache/http/pool/AbstractConnPool$3.class +org/apache/http/pool/PoolEntryCallback.class +org/apache/http/pool/AbstractConnPool.class +org/apache/http/pool/ConnPoolControl.class +org/apache/http/pool/PoolStats.class +org/apache/http/pool/AbstractConnPool$1.class +org/apache/http/pool/ConnPool.class +org/apache/http/pool/PoolEntryFuture.class +org/apache/http/config/ +org/apache/http/config/MessageConstraints$Builder.class +org/apache/http/config/ConnectionConfig.class +org/apache/http/config/SocketConfig.class +org/apache/http/config/Registry.class +org/apache/http/config/ConnectionConfig$Builder.class +org/apache/http/config/RegistryBuilder.class +org/apache/http/config/SocketConfig$Builder.class +org/apache/http/config/MessageConstraints.class +org/apache/http/config/Lookup.class +org/apache/http/HttpResponseFactory.class +org/apache/http/HttpRequest.class +org/apache/http/RequestLine.class +org/apache/http/HttpServerConnection.class +org/apache/http/NameValuePair.class +org/apache/http/util/ +org/apache/http/util/LangUtils.class +org/apache/http/util/NetUtils.class +org/apache/http/util/EntityUtils.class +org/apache/http/util/EncodingUtils.class +org/apache/http/util/TextUtils.class +org/apache/http/util/CharsetUtils.class +org/apache/http/util/CharArrayBuffer.class +org/apache/http/util/ByteArrayBuffer.class +org/apache/http/util/Asserts.class +org/apache/http/util/ExceptionUtils.class +org/apache/http/util/Args.class +org/apache/http/util/VersionInfo.class +org/apache/http/HttpVersion.class +org/apache/http/HttpConnectionFactory.class +org/apache/http/impl/ +org/apache/http/impl/DefaultHttpRequestFactory.class +org/apache/http/impl/SocketHttpClientConnection.class +org/apache/http/impl/bootstrap/ +org/apache/http/impl/bootstrap/SSLServerSetupHandler.class +org/apache/http/impl/bootstrap/HttpServer$Status.class +org/apache/http/impl/bootstrap/ThreadFactoryImpl.class +org/apache/http/impl/bootstrap/Worker.class +org/apache/http/impl/bootstrap/RequestListener.class +org/apache/http/impl/bootstrap/ServerBootstrap.class +org/apache/http/impl/bootstrap/HttpServer.class +org/apache/http/impl/SocketHttpServerConnection.class +org/apache/http/impl/BHttpConnectionBase.class +org/apache/http/impl/DefaultConnectionReuseStrategy.class +org/apache/http/impl/DefaultHttpServerConnection.class +org/apache/http/impl/AbstractHttpClientConnection.class +org/apache/http/impl/EnglishReasonPhraseCatalog.class +org/apache/http/impl/DefaultBHttpServerConnection.class +org/apache/http/impl/DefaultHttpClientConnection.class +org/apache/http/impl/pool/ +org/apache/http/impl/pool/BasicConnPool.class +org/apache/http/impl/pool/BasicConnFactory.class +org/apache/http/impl/pool/BasicPoolEntry.class +org/apache/http/impl/DefaultBHttpClientConnectionFactory.class +org/apache/http/impl/DefaultBHttpClientConnection.class +org/apache/http/impl/AbstractHttpServerConnection.class +org/apache/http/impl/io/ +org/apache/http/impl/io/HttpResponseWriter.class +org/apache/http/impl/io/HttpTransportMetricsImpl.class +org/apache/http/impl/io/AbstractSessionInputBuffer.class +org/apache/http/impl/io/DefaultHttpRequestWriter.class +org/apache/http/impl/io/SessionInputBufferImpl.class +org/apache/http/impl/io/ContentLengthOutputStream.class +org/apache/http/impl/io/SocketInputBuffer.class +org/apache/http/impl/io/DefaultHttpResponseWriterFactory.class +org/apache/http/impl/io/DefaultHttpRequestWriterFactory.class +org/apache/http/impl/io/IdentityOutputStream.class +org/apache/http/impl/io/IdentityInputStream.class +org/apache/http/impl/io/SocketOutputBuffer.class +org/apache/http/impl/io/ChunkedOutputStream.class +org/apache/http/impl/io/DefaultHttpResponseParserFactory.class +org/apache/http/impl/io/ContentLengthInputStream.class +org/apache/http/impl/io/HttpRequestWriter.class +org/apache/http/impl/io/DefaultHttpResponseWriter.class +org/apache/http/impl/io/DefaultHttpRequestParserFactory.class +org/apache/http/impl/io/AbstractMessageParser.class +org/apache/http/impl/io/EmptyInputStream.class +org/apache/http/impl/io/DefaultHttpRequestParser.class +org/apache/http/impl/io/SessionOutputBufferImpl.class +org/apache/http/impl/io/HttpRequestParser.class +org/apache/http/impl/io/AbstractSessionOutputBuffer.class +org/apache/http/impl/io/DefaultHttpResponseParser.class +org/apache/http/impl/io/ChunkedInputStream.class +org/apache/http/impl/io/AbstractMessageWriter.class +org/apache/http/impl/io/HttpResponseParser.class +org/apache/http/impl/entity/ +org/apache/http/impl/entity/DisallowIdentityContentLengthStrategy.class +org/apache/http/impl/entity/LaxContentLengthStrategy.class +org/apache/http/impl/entity/StrictContentLengthStrategy.class +org/apache/http/impl/entity/EntityDeserializer.class +org/apache/http/impl/entity/EntitySerializer.class +org/apache/http/impl/DefaultHttpResponseFactory.class +org/apache/http/impl/DefaultBHttpServerConnectionFactory.class +org/apache/http/impl/HttpConnectionMetricsImpl.class +org/apache/http/impl/ConnSupport.class +org/apache/http/impl/NoConnectionReuseStrategy.class +org/apache/http/ConnectionClosedException.class +org/apache/http/StatusLine.class +org/apache/http/io/ +org/apache/http/io/HttpMessageWriterFactory.class +org/apache/http/io/BufferInfo.class +org/apache/http/io/HttpMessageParserFactory.class +org/apache/http/io/HttpTransportMetrics.class +org/apache/http/io/SessionOutputBuffer.class +org/apache/http/io/HttpMessageParser.class +org/apache/http/io/EofSensor.class +org/apache/http/io/HttpMessageWriter.class +org/apache/http/io/SessionInputBuffer.class +org/apache/http/NoHttpResponseException.class +org/apache/http/HttpEntityEnclosingRequest.class +org/apache/http/entity/ +org/apache/http/entity/ContentLengthStrategy.class +org/apache/http/entity/FileEntity.class +org/apache/http/entity/InputStreamEntity.class +org/apache/http/entity/SerializableEntity.class +org/apache/http/entity/StringEntity.class +org/apache/http/entity/HttpEntityWrapper.class +org/apache/http/entity/ContentProducer.class +org/apache/http/entity/BufferedHttpEntity.class +org/apache/http/entity/ByteArrayEntity.class +org/apache/http/entity/EntityTemplate.class +org/apache/http/entity/BasicHttpEntity.class +org/apache/http/entity/ContentType.class +org/apache/http/entity/AbstractHttpEntity.class +org/apache/http/ProtocolException.class +org/apache/http/MessageConstraintException.class +org/apache/http/ExceptionLogger$2.class +org/apache/http/Header.class +META-INF/DEPENDENCIES +META-INF/NOTICE +META-INF/LICENSE +META-INF/maven/org.apache.httpcomponents/ +META-INF/maven/org.apache.httpcomponents/httpcore/ +META-INF/maven/org.apache.httpcomponents/httpcore/pom.xml +META-INF/maven/org.apache.httpcomponents/httpcore/pom.properties +org/apache/http/auth/ +org/apache/http/auth/KerberosCredentials.class +org/apache/http/auth/AuthSchemeRegistry.class +org/apache/http/auth/ChallengeState.class +org/apache/http/auth/NTUserPrincipal.class +org/apache/http/auth/InvalidCredentialsException.class +org/apache/http/auth/AuthSchemeRegistry$1.class +org/apache/http/auth/NTCredentials.class +org/apache/http/auth/AuthScheme.class +org/apache/http/auth/AuthenticationException.class +org/apache/http/auth/params/ +org/apache/http/auth/params/AuthParams.class +org/apache/http/auth/params/AuthParamBean.class +org/apache/http/auth/params/AuthPNames.class +org/apache/http/auth/BasicUserPrincipal.class +org/apache/http/auth/AuthSchemeProvider.class +org/apache/http/auth/ContextAwareAuthScheme.class +org/apache/http/auth/AuthProtocolState.class +org/apache/http/auth/AuthScope.class +org/apache/http/auth/AuthSchemeFactory.class +org/apache/http/auth/AUTH.class +org/apache/http/auth/Credentials.class +org/apache/http/auth/UsernamePasswordCredentials.class +org/apache/http/auth/AuthOption.class +org/apache/http/auth/MalformedChallengeException.class +org/apache/http/auth/AuthState.class +org/apache/http/cookie/ +org/apache/http/cookie/CookieSpecRegistry.class +org/apache/http/cookie/CookieSpec.class +org/apache/http/cookie/CookieRestrictionViolationException.class +org/apache/http/cookie/CookieIdentityComparator.class +org/apache/http/cookie/SM.class +org/apache/http/cookie/CookieOrigin.class +org/apache/http/cookie/CookieAttributeHandler.class +org/apache/http/cookie/SetCookie2.class +org/apache/http/cookie/params/ +org/apache/http/cookie/params/CookieSpecParamBean.class +org/apache/http/cookie/params/CookieSpecPNames.class +org/apache/http/cookie/MalformedCookieException.class +org/apache/http/cookie/ClientCookie.class +org/apache/http/cookie/CommonCookieAttributeHandler.class +org/apache/http/cookie/CookieSpecRegistry$1.class +org/apache/http/cookie/CookiePathComparator.class +org/apache/http/cookie/SetCookie.class +org/apache/http/cookie/Cookie.class +org/apache/http/cookie/CookieSpecProvider.class +org/apache/http/cookie/CookiePriorityComparator.class +org/apache/http/cookie/CookieSpecFactory.class +org/apache/http/client/ +org/apache/http/client/RedirectStrategy.class +org/apache/http/client/ConnectionBackoffStrategy.class +org/apache/http/client/version.properties +org/apache/http/client/AuthenticationStrategy.class +org/apache/http/client/HttpClient.class +org/apache/http/client/methods/ +org/apache/http/client/methods/HttpOptions.class +org/apache/http/client/methods/AbortableHttpRequest.class +org/apache/http/client/methods/HttpRequestBase.class +org/apache/http/client/methods/AbstractExecutionAwareRequest$2.class +org/apache/http/client/methods/RequestBuilder.class +org/apache/http/client/methods/HttpGet.class +org/apache/http/client/methods/HttpPatch.class +org/apache/http/client/methods/HttpDelete.class +org/apache/http/client/methods/HttpUriRequest.class +org/apache/http/client/methods/CloseableHttpResponse.class +org/apache/http/client/methods/HttpRequestWrapper$1.class +org/apache/http/client/methods/RequestBuilder$InternalEntityEclosingRequest.class +org/apache/http/client/methods/HttpRequestWrapper$HttpEntityEnclosingRequestWrapper.class +org/apache/http/client/methods/RequestBuilder$InternalRequest.class +org/apache/http/client/methods/HttpRequestWrapper.class +org/apache/http/client/methods/HttpHead.class +org/apache/http/client/methods/HttpExecutionAware.class +org/apache/http/client/methods/AbstractExecutionAwareRequest.class +org/apache/http/client/methods/Configurable.class +org/apache/http/client/methods/AbstractExecutionAwareRequest$1.class +org/apache/http/client/methods/HttpPost.class +org/apache/http/client/methods/HttpEntityEnclosingRequestBase.class +org/apache/http/client/methods/HttpTrace.class +org/apache/http/client/methods/HttpPut.class +org/apache/http/client/CredentialsProvider.class +org/apache/http/client/UserTokenHandler.class +org/apache/http/client/CookieStore.class +org/apache/http/client/HttpResponseException.class +org/apache/http/client/ClientProtocolException.class +org/apache/http/client/AuthenticationHandler.class +org/apache/http/client/params/ +org/apache/http/client/params/HttpClientParams.class +org/apache/http/client/params/ClientPNames.class +org/apache/http/client/params/ClientParamBean.class +org/apache/http/client/params/CookiePolicy.class +org/apache/http/client/params/AuthPolicy.class +org/apache/http/client/params/HttpClientParamConfig.class +org/apache/http/client/params/AllClientPNames.class +org/apache/http/client/CircularRedirectException.class +org/apache/http/client/utils/ +org/apache/http/client/utils/Punycode.class +org/apache/http/client/utils/Idn.class +org/apache/http/client/utils/HttpClientUtils.class +org/apache/http/client/utils/URIBuilder.class +org/apache/http/client/utils/URIUtils.class +org/apache/http/client/utils/DateUtils$DateFormatHolder.class +org/apache/http/client/utils/URLEncodedUtils.class +org/apache/http/client/utils/JdkIdn.class +org/apache/http/client/utils/CloneUtils.class +org/apache/http/client/utils/DateUtils.class +org/apache/http/client/utils/Rfc3492Idn.class +org/apache/http/client/protocol/ +org/apache/http/client/protocol/RequestAcceptEncoding.class +org/apache/http/client/protocol/ResponseProcessCookies.class +org/apache/http/client/protocol/RequestDefaultHeaders.class +org/apache/http/client/protocol/ResponseContentEncoding$2.class +org/apache/http/client/protocol/ClientContext.class +org/apache/http/client/protocol/ResponseAuthCache.class +org/apache/http/client/protocol/RequestAuthenticationBase$1.class +org/apache/http/client/protocol/RequestTargetAuthentication.class +org/apache/http/client/protocol/RequestProxyAuthentication.class +org/apache/http/client/protocol/RequestClientConnControl.class +org/apache/http/client/protocol/ResponseAuthCache$1.class +org/apache/http/client/protocol/RequestAddCookies.class +org/apache/http/client/protocol/RequestAuthCache.class +org/apache/http/client/protocol/ClientContextConfigurer.class +org/apache/http/client/protocol/ResponseContentEncoding$1.class +org/apache/http/client/protocol/RequestExpectContinue.class +org/apache/http/client/protocol/ResponseContentEncoding.class +org/apache/http/client/protocol/RequestAuthenticationBase.class +org/apache/http/client/protocol/HttpClientContext.class +org/apache/http/client/BackoffManager.class +org/apache/http/client/config/ +org/apache/http/client/config/RequestConfig$Builder.class +org/apache/http/client/config/RequestConfig.class +org/apache/http/client/config/CookieSpecs.class +org/apache/http/client/config/AuthSchemes.class +org/apache/http/client/AuthCache.class +org/apache/http/client/ResponseHandler.class +org/apache/http/client/RedirectException.class +org/apache/http/client/RedirectHandler.class +org/apache/http/client/NonRepeatableRequestException.class +org/apache/http/client/entity/ +org/apache/http/client/entity/DeflateInputStream.class +org/apache/http/client/entity/InputStreamFactory.class +org/apache/http/client/entity/UrlEncodedFormEntity.class +org/apache/http/client/entity/DeflateInputStream$DeflateStream.class +org/apache/http/client/entity/GzipCompressingEntity.class +org/apache/http/client/entity/EntityBuilder.class +org/apache/http/client/entity/LazyDecompressingInputStream.class +org/apache/http/client/entity/DecompressingEntity.class +org/apache/http/client/entity/GzipDecompressingEntity$1.class +org/apache/http/client/entity/DeflateDecompressingEntity$1.class +org/apache/http/client/entity/GzipDecompressingEntity.class +org/apache/http/client/entity/DeflateDecompressingEntity.class +org/apache/http/client/HttpRequestRetryHandler.class +org/apache/http/client/RequestDirector.class +org/apache/http/client/ServiceUnavailableRetryStrategy.class +org/apache/http/conn/ +org/apache/http/conn/OperatedClientConnection.class +org/apache/http/conn/ManagedClientConnection.class +org/apache/http/conn/ConnectionRequest.class +org/apache/http/conn/EofSensorInputStream.class +org/apache/http/conn/ClientConnectionOperator.class +org/apache/http/conn/HttpClientConnectionOperator.class +org/apache/http/conn/BasicManagedEntity.class +org/apache/http/conn/ConnectionKeepAliveStrategy.class +org/apache/http/conn/ManagedHttpClientConnection.class +org/apache/http/conn/BasicEofSensorWatcher.class +org/apache/http/conn/HttpClientConnectionManager.class +org/apache/http/conn/HttpRoutedConnection.class +org/apache/http/conn/EofSensorWatcher.class +org/apache/http/conn/routing/ +org/apache/http/conn/routing/BasicRouteDirector.class +org/apache/http/conn/routing/RouteInfo$LayerType.class +org/apache/http/conn/routing/RouteInfo.class +org/apache/http/conn/routing/RouteTracker.class +org/apache/http/conn/routing/HttpRouteDirector.class +org/apache/http/conn/routing/HttpRoutePlanner.class +org/apache/http/conn/routing/RouteInfo$TunnelType.class +org/apache/http/conn/routing/HttpRoute.class +org/apache/http/conn/SchemePortResolver.class +org/apache/http/conn/ClientConnectionManager.class +org/apache/http/conn/params/ +org/apache/http/conn/params/ConnManagerParamBean.class +org/apache/http/conn/params/ConnRouteParamBean.class +org/apache/http/conn/params/ConnManagerParams$1.class +org/apache/http/conn/params/ConnManagerPNames.class +org/apache/http/conn/params/ConnConnectionParamBean.class +org/apache/http/conn/params/ConnManagerParams.class +org/apache/http/conn/params/ConnPerRouteBean.class +org/apache/http/conn/params/ConnConnectionPNames.class +org/apache/http/conn/params/ConnPerRoute.class +org/apache/http/conn/params/ConnRoutePNames.class +org/apache/http/conn/params/ConnRouteParams.class +org/apache/http/conn/socket/ +org/apache/http/conn/socket/PlainConnectionSocketFactory.class +org/apache/http/conn/socket/ConnectionSocketFactory.class +org/apache/http/conn/socket/LayeredConnectionSocketFactory.class +org/apache/http/conn/ClientConnectionRequest.class +org/apache/http/conn/ssl/ +org/apache/http/conn/ssl/TrustSelfSignedStrategy.class +org/apache/http/conn/ssl/SSLContextBuilder$TrustManagerDelegate.class +org/apache/http/conn/ssl/DefaultHostnameVerifier$1.class +org/apache/http/conn/ssl/DefaultHostnameVerifier$TYPE.class +org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.class +org/apache/http/conn/ssl/TrustStrategy.class +org/apache/http/conn/ssl/PrivateKeyStrategy.class +org/apache/http/conn/ssl/SSLContextBuilder$KeyManagerDelegate.class +org/apache/http/conn/ssl/X509HostnameVerifier.class +org/apache/http/conn/ssl/AbstractVerifier.class +org/apache/http/conn/ssl/SSLSocketFactory.class +org/apache/http/conn/ssl/SSLConnectionSocketFactory.class +org/apache/http/conn/ssl/SSLContexts.class +org/apache/http/conn/ssl/AllowAllHostnameVerifier.class +org/apache/http/conn/ssl/StrictHostnameVerifier.class +org/apache/http/conn/ssl/SSLContextBuilder.class +org/apache/http/conn/ssl/DefaultHostnameVerifier.class +org/apache/http/conn/ssl/SSLInitializationException.class +org/apache/http/conn/ssl/PrivateKeyDetails.class +org/apache/http/conn/ssl/NoopHostnameVerifier.class +org/apache/http/conn/ConnectionPoolTimeoutException.class +org/apache/http/conn/ConnectionReleaseTrigger.class +org/apache/http/conn/ClientConnectionManagerFactory.class +org/apache/http/conn/scheme/ +org/apache/http/conn/scheme/SchemeSocketFactoryAdaptor.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactory.class +org/apache/http/conn/scheme/PlainSocketFactory.class +org/apache/http/conn/scheme/LayeredSocketFactoryAdaptor.class +org/apache/http/conn/scheme/Scheme.class +org/apache/http/conn/scheme/HostNameResolver.class +org/apache/http/conn/scheme/SchemeRegistry.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor2.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor.class +org/apache/http/conn/scheme/SocketFactory.class +org/apache/http/conn/scheme/SchemeSocketFactory.class +org/apache/http/conn/scheme/SocketFactoryAdaptor.class +org/apache/http/conn/scheme/LayeredSchemeSocketFactory.class +org/apache/http/conn/scheme/LayeredSocketFactory.class +org/apache/http/conn/ConnectTimeoutException.class +org/apache/http/conn/util/ +org/apache/http/conn/util/DomainType.class +org/apache/http/conn/util/InetAddressUtils.class +org/apache/http/conn/util/PublicSuffixList.class +org/apache/http/conn/util/PublicSuffixMatcher.class +org/apache/http/conn/util/PublicSuffixListParser.class +org/apache/http/conn/util/PublicSuffixMatcherLoader.class +org/apache/http/conn/HttpInetSocketAddress.class +org/apache/http/conn/HttpConnectionFactory.class +org/apache/http/conn/HttpHostConnectException.class +org/apache/http/conn/DnsResolver.class +org/apache/http/conn/MultihomePlainSocketFactory.class +org/apache/http/conn/UnsupportedSchemeException.class +org/apache/http/impl/auth/ +org/apache/http/impl/auth/NTLMEngineImpl$CipherGen.class +org/apache/http/impl/auth/NTLMScheme$State.class +org/apache/http/impl/auth/GGSSchemeBase$1.class +org/apache/http/impl/auth/NTLMEngineException.class +org/apache/http/impl/auth/KerberosSchemeFactory.class +org/apache/http/impl/auth/RFC2617Scheme.class +org/apache/http/impl/auth/NTLMScheme.class +org/apache/http/impl/auth/KerberosScheme.class +org/apache/http/impl/auth/HttpEntityDigester.class +org/apache/http/impl/auth/SPNegoScheme.class +org/apache/http/impl/auth/BasicSchemeFactory.class +org/apache/http/impl/auth/NegotiateScheme.class +org/apache/http/impl/auth/NTLMSchemeFactory.class +org/apache/http/impl/auth/NTLMEngineImpl$NTLMMessage.class +org/apache/http/impl/auth/GGSSchemeBase.class +org/apache/http/impl/auth/HttpAuthenticator$1.class +org/apache/http/impl/auth/NTLMEngine.class +org/apache/http/impl/auth/DigestScheme.class +org/apache/http/impl/auth/NTLMEngineImpl.class +org/apache/http/impl/auth/AuthSchemeBase.class +org/apache/http/impl/auth/NTLMEngineImpl$Type3Message.class +org/apache/http/impl/auth/NegotiateSchemeFactory.class +org/apache/http/impl/auth/SpnegoTokenGenerator.class +org/apache/http/impl/auth/NTLMEngineImpl$HMACMD5.class +org/apache/http/impl/auth/HttpAuthenticator.class +org/apache/http/impl/auth/GGSSchemeBase$State.class +org/apache/http/impl/auth/NTLMEngineImpl$MD4.class +org/apache/http/impl/auth/NTLMEngineImpl$Type2Message.class +org/apache/http/impl/auth/DigestSchemeFactory.class +org/apache/http/impl/auth/SPNegoSchemeFactory.class +org/apache/http/impl/auth/NTLMEngineImpl$Type1Message.class +org/apache/http/impl/auth/BasicScheme.class +org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.class +org/apache/http/impl/cookie/ +org/apache/http/impl/cookie/BestMatchSpec.class +org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider$CompatibilityLevel.class +org/apache/http/impl/cookie/BasicClientCookie2.class +org/apache/http/impl/cookie/BasicSecureHandler.class +org/apache/http/impl/cookie/RFC2109Spec.class +org/apache/http/impl/cookie/RFC2965Spec.class +org/apache/http/impl/cookie/PublicSuffixFilter.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$2.class +org/apache/http/impl/cookie/BasicDomainHandler.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider.class +org/apache/http/impl/cookie/RFC2109VersionHandler.class +org/apache/http/impl/cookie/RFC2109DomainHandler.class +org/apache/http/impl/cookie/BasicMaxAgeHandler.class +org/apache/http/impl/cookie/NetscapeDraftSpec.class +org/apache/http/impl/cookie/LaxExpiresHandler.class +org/apache/http/impl/cookie/BasicExpiresHandler.class +org/apache/http/impl/cookie/BrowserCompatSpec.class +org/apache/http/impl/cookie/RFC2965SpecFactory.class +org/apache/http/impl/cookie/DefaultCookieSpec.class +org/apache/http/impl/cookie/BrowserCompatSpec$1.class +org/apache/http/impl/cookie/BrowserCompatVersionAttributeHandler.class +org/apache/http/impl/cookie/IgnoreSpec.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider.class +org/apache/http/impl/cookie/BestMatchSpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$CompatibilityLevel.class +org/apache/http/impl/cookie/RFC6265StrictSpec.class +org/apache/http/impl/cookie/RFC2965PortAttributeHandler.class +org/apache/http/impl/cookie/IgnoreSpecProvider.class +org/apache/http/impl/cookie/BasicClientCookie.class +org/apache/http/impl/cookie/NetscapeDraftHeaderParser.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider$1.class +org/apache/http/impl/cookie/BasicPathHandler.class +org/apache/http/impl/cookie/LaxMaxAgeHandler.class +org/apache/http/impl/cookie/RFC6265CookieSpecBase.class +org/apache/http/impl/cookie/RFC2965SpecProvider.class +org/apache/http/impl/cookie/NetscapeDomainHandler.class +org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.class +org/apache/http/impl/cookie/PublicSuffixDomainFilter.class +org/apache/http/impl/cookie/IgnoreSpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$1.class +org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.class +org/apache/http/impl/cookie/AbstractCookieAttributeHandler.class +org/apache/http/impl/cookie/BrowserCompatSpecFactory.class +org/apache/http/impl/cookie/RFC2109SpecProvider.class +org/apache/http/impl/cookie/BrowserCompatSpecFactory$SecurityLevel.class +org/apache/http/impl/cookie/NetscapeDraftSpecFactory.class +org/apache/http/impl/cookie/CookieSpecBase.class +org/apache/http/impl/cookie/RFC6265LaxSpec.class +org/apache/http/impl/cookie/DateParseException.class +org/apache/http/impl/cookie/RFC2109SpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpec.class +org/apache/http/impl/cookie/PublicSuffixListParser.class +org/apache/http/impl/cookie/AbstractCookieSpec.class +org/apache/http/impl/cookie/BasicCommentHandler.class +org/apache/http/impl/cookie/DateUtils.class +org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.class +org/apache/http/impl/cookie/NetscapeDraftSpecProvider.class +org/apache/http/impl/client/ +org/apache/http/impl/client/TargetAuthenticationStrategy.class +org/apache/http/impl/client/LaxRedirectStrategy.class +org/apache/http/impl/client/NoopUserTokenHandler.class +org/apache/http/impl/client/RoutedRequest.class +org/apache/http/impl/client/AuthenticationStrategyImpl.class +org/apache/http/impl/client/MinimalHttpClient$1.class +org/apache/http/impl/client/CloseableHttpResponseProxy.class +org/apache/http/impl/client/DefaultProxyAuthenticationHandler.class +org/apache/http/impl/client/DefaultRedirectStrategy.class +org/apache/http/impl/client/FutureRequestExecutionService.class +org/apache/http/impl/client/FutureRequestExecutionMetrics$DurationCounter.class +org/apache/http/impl/client/HttpClientBuilder.class +org/apache/http/impl/client/AutoRetryHttpClient.class +org/apache/http/impl/client/BasicCredentialsProvider.class +org/apache/http/impl/client/AbstractResponseHandler.class +org/apache/http/impl/client/IdleConnectionEvictor$DefaultThreadFactory.class +org/apache/http/impl/client/RequestWrapper.class +org/apache/http/impl/client/HttpRequestFutureTask.class +org/apache/http/impl/client/ProxyClient.class +org/apache/http/impl/client/ContentEncodingHttpClient.class +org/apache/http/impl/client/RedirectLocations.class +org/apache/http/impl/client/DefaultHttpRequestRetryHandler.class +org/apache/http/impl/client/HttpRequestTaskCallable.class +org/apache/http/impl/client/StandardHttpRequestRetryHandler.class +org/apache/http/impl/client/AIMDBackoffManager.class +org/apache/http/impl/client/AbstractAuthenticationHandler.class +org/apache/http/impl/client/DecompressingHttpClient.class +org/apache/http/impl/client/SystemClock.class +org/apache/http/impl/client/DefaultRedirectStrategyAdaptor.class +org/apache/http/impl/client/EntityEnclosingRequestWrapper$EntityWrapper.class +org/apache/http/impl/client/AbstractHttpClient.class +org/apache/http/impl/client/Clock.class +org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.class +org/apache/http/impl/client/InternalHttpClient$1.class +org/apache/http/impl/client/SystemDefaultHttpClient.class +org/apache/http/impl/client/AuthenticationStrategyAdaptor.class +org/apache/http/impl/client/IdleConnectionEvictor.class +org/apache/http/impl/client/SystemDefaultCredentialsProvider.class +org/apache/http/impl/client/FutureRequestExecutionMetrics.class +org/apache/http/impl/client/InternalHttpClient.class +org/apache/http/impl/client/HttpClientBuilder$2.class +org/apache/http/impl/client/NullBackoffStrategy.class +org/apache/http/impl/client/DefaultBackoffStrategy.class +org/apache/http/impl/client/HttpAuthenticator.class +org/apache/http/impl/client/BasicCookieStore.class +org/apache/http/impl/client/EntityEnclosingRequestWrapper.class +org/apache/http/impl/client/CookieSpecRegistries.class +org/apache/http/impl/client/DefaultClientConnectionReuseStrategy.class +org/apache/http/impl/client/DefaultServiceUnavailableRetryStrategy.class +org/apache/http/impl/client/DefaultRedirectHandler.class +org/apache/http/impl/client/HttpClients.class +org/apache/http/impl/client/CloseableHttpClient.class +org/apache/http/impl/client/TunnelRefusedException.class +org/apache/http/impl/client/MinimalHttpClient.class +org/apache/http/impl/client/BasicAuthCache.class +org/apache/http/impl/client/BasicResponseHandler.class +org/apache/http/impl/client/DefaultUserTokenHandler.class +org/apache/http/impl/client/HttpClientBuilder$1.class +org/apache/http/impl/client/ClientParamsStack.class +org/apache/http/impl/client/DefaultRequestDirector.class +org/apache/http/impl/client/DefaultTargetAuthenticationHandler.class +org/apache/http/impl/client/IdleConnectionEvictor$1.class +org/apache/http/impl/client/DefaultHttpClient.class +org/apache/http/impl/client/ProxyAuthenticationStrategy.class +org/apache/http/impl/execchain/ +org/apache/http/impl/execchain/ServiceUnavailableRetryExec.class +org/apache/http/impl/execchain/RequestEntityProxy.class +org/apache/http/impl/execchain/ProtocolExec.class +org/apache/http/impl/execchain/MinimalClientExec.class +org/apache/http/impl/execchain/MainClientExec.class +org/apache/http/impl/execchain/RedirectExec.class +org/apache/http/impl/execchain/ClientExecChain.class +org/apache/http/impl/execchain/ConnectionHolder.class +org/apache/http/impl/execchain/HttpResponseProxy.class +org/apache/http/impl/execchain/RetryExec.class +org/apache/http/impl/execchain/TunnelRefusedException.class +org/apache/http/impl/execchain/RequestAbortedException.class +org/apache/http/impl/execchain/ResponseEntityProxy.class +org/apache/http/impl/execchain/BackoffStrategyExec.class +org/apache/http/impl/conn/ +org/apache/http/impl/conn/HttpPoolEntry.class +org/apache/http/impl/conn/DefaultClientConnection.class +org/apache/http/impl/conn/CPool.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager.class +org/apache/http/impl/conn/Wire.class +org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.class +org/apache/http/impl/conn/IdleConnectionHandler.class +org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.class +org/apache/http/impl/conn/SystemDefaultRoutePlanner$1.class +org/apache/http/impl/conn/CPoolProxy.class +org/apache/http/impl/conn/DefaultHttpRoutePlanner.class +org/apache/http/impl/conn/PoolingClientConnectionManager.class +org/apache/http/impl/conn/DefaultManagedHttpClientConnection.class +org/apache/http/impl/conn/LoggingSessionInputBuffer.class +org/apache/http/impl/conn/ConnectionShutdownException.class +org/apache/http/impl/conn/LoggingOutputStream.class +org/apache/http/impl/conn/ManagedClientConnectionImpl.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$ConfigData.class +org/apache/http/impl/conn/DefaultResponseParser.class +org/apache/http/impl/conn/LoggingInputStream.class +org/apache/http/impl/conn/AbstractClientConnAdapter.class +org/apache/http/impl/conn/SystemDefaultRoutePlanner.class +org/apache/http/impl/conn/tsccm/ +org/apache/http/impl/conn/tsccm/ConnPoolByRoute.class +org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1.class +org/apache/http/impl/conn/tsccm/RouteSpecificPool.class +org/apache/http/impl/conn/tsccm/ConnPoolByRoute$1.class +org/apache/http/impl/conn/tsccm/PoolEntryRequest.class +org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.class +org/apache/http/impl/conn/tsccm/WaitingThread.class +org/apache/http/impl/conn/tsccm/WaitingThreadAborter.class +org/apache/http/impl/conn/tsccm/RouteSpecificPool$1.class +org/apache/http/impl/conn/tsccm/AbstractConnPool.class +org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.class +org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.class +org/apache/http/impl/conn/tsccm/BasicPoolEntry.class +org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$InternalConnectionFactory.class +org/apache/http/impl/conn/DefaultHttpResponseParserFactory.class +org/apache/http/impl/conn/AbstractPoolEntry.class +org/apache/http/impl/conn/ProxySelectorRoutePlanner$1.class +org/apache/http/impl/conn/AbstractPooledConnAdapter.class +org/apache/http/impl/conn/SingleClientConnManager$PoolEntry.class +org/apache/http/impl/conn/HttpConnPool$InternalConnFactory.class +org/apache/http/impl/conn/SchemeRegistryFactory.class +org/apache/http/impl/conn/DefaultClientConnectionOperator.class +org/apache/http/impl/conn/LoggingManagedHttpClientConnection.class +org/apache/http/impl/conn/LoggingSessionOutputBuffer.class +org/apache/http/impl/conn/BasicHttpClientConnectionManager$1.class +org/apache/http/impl/conn/DefaultProxyRoutePlanner.class +org/apache/http/impl/conn/BasicClientConnectionManager$1.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$1.class +org/apache/http/impl/conn/BasicHttpClientConnectionManager.class +org/apache/http/impl/conn/PoolingClientConnectionManager$1.class +org/apache/http/impl/conn/IdleConnectionHandler$TimeValues.class +org/apache/http/impl/conn/CPoolEntry.class +org/apache/http/impl/conn/DefaultSchemePortResolver.class +org/apache/http/impl/conn/SingleClientConnManager.class +org/apache/http/impl/conn/DefaultRoutePlanner.class +org/apache/http/impl/conn/InMemoryDnsResolver.class +org/apache/http/impl/conn/DefaultHttpResponseParser.class +org/apache/http/impl/conn/HttpConnPool.class +org/apache/http/impl/conn/BasicClientConnectionManager.class +org/apache/http/impl/conn/SingleClientConnManager$1.class +org/apache/http/impl/conn/ProxySelectorRoutePlanner.class +org/apache/http/impl/conn/SystemDefaultDnsResolver.class +mozilla/ +mozilla/public-suffix-list.txt +META-INF/maven/org.apache.httpcomponents/httpclient/ +META-INF/maven/org.apache.httpcomponents/httpclient/pom.xml +META-INF/maven/org.apache.httpcomponents/httpclient/pom.properties +META-INF/NOTICE.txt +META-INF/LICENSE.txt +org/apache/commons/ +org/apache/commons/logging/ +org/apache/commons/logging/impl/ +org/apache/commons/logging/impl/AvalonLogger.class +org/apache/commons/logging/impl/SimpleLog.class +org/apache/commons/logging/impl/Log4JLogger.class +org/apache/commons/logging/impl/WeakHashtable.class +org/apache/commons/logging/impl/WeakHashtable$1.class +org/apache/commons/logging/impl/Jdk14Logger.class +org/apache/commons/logging/impl/ServletContextCleaner.class +org/apache/commons/logging/impl/WeakHashtable$WeakKey.class +org/apache/commons/logging/impl/NoOpLog.class +org/apache/commons/logging/impl/LogKitLogger.class +org/apache/commons/logging/impl/LogFactoryImpl$3.class +org/apache/commons/logging/impl/LogFactoryImpl$1.class +org/apache/commons/logging/impl/WeakHashtable$Referenced.class +org/apache/commons/logging/impl/SimpleLog$1.class +org/apache/commons/logging/impl/Jdk13LumberjackLogger.class +org/apache/commons/logging/impl/LogFactoryImpl.class +org/apache/commons/logging/impl/LogFactoryImpl$2.class +org/apache/commons/logging/impl/WeakHashtable$Entry.class +org/apache/commons/logging/LogSource.class +org/apache/commons/logging/LogFactory$4.class +org/apache/commons/logging/LogFactory$3.class +org/apache/commons/logging/LogFactory$6.class +org/apache/commons/logging/LogConfigurationException.class +org/apache/commons/logging/LogFactory.class +org/apache/commons/logging/LogFactory$5.class +org/apache/commons/logging/LogFactory$1.class +org/apache/commons/logging/LogFactory$2.class +org/apache/commons/logging/Log.class +META-INF/maven/commons-logging/ +META-INF/maven/commons-logging/commons-logging/ +META-INF/maven/commons-logging/commons-logging/pom.xml +META-INF/maven/commons-logging/commons-logging/pom.properties +org/apache/commons/codec/ +org/apache/commons/codec/binary/ +org/apache/commons/codec/binary/Base32.class +org/apache/commons/codec/binary/Base32InputStream.class +org/apache/commons/codec/binary/Base32OutputStream.class +org/apache/commons/codec/binary/Base64.class +org/apache/commons/codec/binary/Base64InputStream.class +org/apache/commons/codec/binary/Base64OutputStream.class +org/apache/commons/codec/binary/BaseNCodec$Context.class +org/apache/commons/codec/binary/BaseNCodec.class +org/apache/commons/codec/binary/BaseNCodecInputStream.class +org/apache/commons/codec/binary/BaseNCodecOutputStream.class +org/apache/commons/codec/binary/BinaryCodec.class +org/apache/commons/codec/binary/Hex.class +org/apache/commons/codec/binary/StringUtils.class +org/apache/commons/codec/BinaryDecoder.class +org/apache/commons/codec/BinaryEncoder.class +org/apache/commons/codec/CharEncoding.class +org/apache/commons/codec/Charsets.class +org/apache/commons/codec/Decoder.class +org/apache/commons/codec/DecoderException.class +org/apache/commons/codec/digest/ +org/apache/commons/codec/digest/B64.class +org/apache/commons/codec/digest/Crypt.class +org/apache/commons/codec/digest/DigestUtils.class +org/apache/commons/codec/digest/Md5Crypt.class +org/apache/commons/codec/digest/MessageDigestAlgorithms.class +org/apache/commons/codec/digest/Sha2Crypt.class +org/apache/commons/codec/digest/UnixCrypt.class +org/apache/commons/codec/Encoder.class +org/apache/commons/codec/EncoderException.class +org/apache/commons/codec/language/ +org/apache/commons/codec/language/AbstractCaverphone.class +org/apache/commons/codec/language/bm/ +org/apache/commons/codec/language/bm/ash_approx_any.txt +org/apache/commons/codec/language/bm/ash_approx_common.txt +org/apache/commons/codec/language/bm/ash_approx_cyrillic.txt +org/apache/commons/codec/language/bm/ash_approx_english.txt +org/apache/commons/codec/language/bm/ash_approx_french.txt +org/apache/commons/codec/language/bm/ash_approx_german.txt +org/apache/commons/codec/language/bm/ash_approx_hebrew.txt +org/apache/commons/codec/language/bm/ash_approx_hungarian.txt +org/apache/commons/codec/language/bm/ash_approx_polish.txt +org/apache/commons/codec/language/bm/ash_approx_romanian.txt +org/apache/commons/codec/language/bm/ash_approx_russian.txt +org/apache/commons/codec/language/bm/ash_approx_spanish.txt +org/apache/commons/codec/language/bm/ash_exact_any.txt +org/apache/commons/codec/language/bm/ash_exact_approx_common.txt +org/apache/commons/codec/language/bm/ash_exact_common.txt +org/apache/commons/codec/language/bm/ash_exact_cyrillic.txt +org/apache/commons/codec/language/bm/ash_exact_english.txt +org/apache/commons/codec/language/bm/ash_exact_french.txt +org/apache/commons/codec/language/bm/ash_exact_german.txt +org/apache/commons/codec/language/bm/ash_exact_hebrew.txt +org/apache/commons/codec/language/bm/ash_exact_hungarian.txt +org/apache/commons/codec/language/bm/ash_exact_polish.txt +org/apache/commons/codec/language/bm/ash_exact_romanian.txt +org/apache/commons/codec/language/bm/ash_exact_russian.txt +org/apache/commons/codec/language/bm/ash_exact_spanish.txt +org/apache/commons/codec/language/bm/ash_hebrew_common.txt +org/apache/commons/codec/language/bm/ash_languages.txt +org/apache/commons/codec/language/bm/ash_rules_any.txt +org/apache/commons/codec/language/bm/ash_rules_cyrillic.txt +org/apache/commons/codec/language/bm/ash_rules_english.txt +org/apache/commons/codec/language/bm/ash_rules_french.txt +org/apache/commons/codec/language/bm/ash_rules_german.txt +org/apache/commons/codec/language/bm/ash_rules_hebrew.txt +org/apache/commons/codec/language/bm/ash_rules_hungarian.txt +org/apache/commons/codec/language/bm/ash_rules_polish.txt +org/apache/commons/codec/language/bm/ash_rules_romanian.txt +org/apache/commons/codec/language/bm/ash_rules_russian.txt +org/apache/commons/codec/language/bm/ash_rules_spanish.txt +org/apache/commons/codec/language/bm/BeiderMorseEncoder.class +org/apache/commons/codec/language/bm/gen_approx_any.txt +org/apache/commons/codec/language/bm/gen_approx_arabic.txt +org/apache/commons/codec/language/bm/gen_approx_common.txt +org/apache/commons/codec/language/bm/gen_approx_cyrillic.txt +org/apache/commons/codec/language/bm/gen_approx_czech.txt +org/apache/commons/codec/language/bm/gen_approx_dutch.txt +org/apache/commons/codec/language/bm/gen_approx_english.txt +org/apache/commons/codec/language/bm/gen_approx_french.txt +org/apache/commons/codec/language/bm/gen_approx_german.txt +org/apache/commons/codec/language/bm/gen_approx_greek.txt +org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt +org/apache/commons/codec/language/bm/gen_approx_hebrew.txt +org/apache/commons/codec/language/bm/gen_approx_hungarian.txt +org/apache/commons/codec/language/bm/gen_approx_italian.txt +org/apache/commons/codec/language/bm/gen_approx_polish.txt +org/apache/commons/codec/language/bm/gen_approx_portuguese.txt +org/apache/commons/codec/language/bm/gen_approx_romanian.txt +org/apache/commons/codec/language/bm/gen_approx_russian.txt +org/apache/commons/codec/language/bm/gen_approx_spanish.txt +org/apache/commons/codec/language/bm/gen_approx_turkish.txt +org/apache/commons/codec/language/bm/gen_exact_any.txt +org/apache/commons/codec/language/bm/gen_exact_approx_common.txt +org/apache/commons/codec/language/bm/gen_exact_arabic.txt +org/apache/commons/codec/language/bm/gen_exact_common.txt +org/apache/commons/codec/language/bm/gen_exact_cyrillic.txt +org/apache/commons/codec/language/bm/gen_exact_czech.txt +org/apache/commons/codec/language/bm/gen_exact_dutch.txt +org/apache/commons/codec/language/bm/gen_exact_english.txt +org/apache/commons/codec/language/bm/gen_exact_french.txt +org/apache/commons/codec/language/bm/gen_exact_german.txt +org/apache/commons/codec/language/bm/gen_exact_greek.txt +org/apache/commons/codec/language/bm/gen_exact_greeklatin.txt +org/apache/commons/codec/language/bm/gen_exact_hebrew.txt +org/apache/commons/codec/language/bm/gen_exact_hungarian.txt +org/apache/commons/codec/language/bm/gen_exact_italian.txt +org/apache/commons/codec/language/bm/gen_exact_polish.txt +org/apache/commons/codec/language/bm/gen_exact_portuguese.txt +org/apache/commons/codec/language/bm/gen_exact_romanian.txt +org/apache/commons/codec/language/bm/gen_exact_russian.txt +org/apache/commons/codec/language/bm/gen_exact_spanish.txt +org/apache/commons/codec/language/bm/gen_exact_turkish.txt +org/apache/commons/codec/language/bm/gen_hebrew_common.txt +org/apache/commons/codec/language/bm/gen_languages.txt +org/apache/commons/codec/language/bm/gen_rules_any.txt +org/apache/commons/codec/language/bm/gen_rules_arabic.txt +org/apache/commons/codec/language/bm/gen_rules_cyrillic.txt +org/apache/commons/codec/language/bm/gen_rules_czech.txt +org/apache/commons/codec/language/bm/gen_rules_dutch.txt +org/apache/commons/codec/language/bm/gen_rules_english.txt +org/apache/commons/codec/language/bm/gen_rules_french.txt +org/apache/commons/codec/language/bm/gen_rules_german.txt +org/apache/commons/codec/language/bm/gen_rules_greek.txt +org/apache/commons/codec/language/bm/gen_rules_greeklatin.txt +org/apache/commons/codec/language/bm/gen_rules_hebrew.txt +org/apache/commons/codec/language/bm/gen_rules_hungarian.txt +org/apache/commons/codec/language/bm/gen_rules_italian.txt +org/apache/commons/codec/language/bm/gen_rules_polish.txt +org/apache/commons/codec/language/bm/gen_rules_portuguese.txt +org/apache/commons/codec/language/bm/gen_rules_romanian.txt +org/apache/commons/codec/language/bm/gen_rules_russian.txt +org/apache/commons/codec/language/bm/gen_rules_spanish.txt +org/apache/commons/codec/language/bm/gen_rules_turkish.txt +org/apache/commons/codec/language/bm/Lang$1.class +org/apache/commons/codec/language/bm/Lang$LangRule.class +org/apache/commons/codec/language/bm/Lang.class +org/apache/commons/codec/language/bm/lang.txt +org/apache/commons/codec/language/bm/Languages$1.class +org/apache/commons/codec/language/bm/Languages$2.class +org/apache/commons/codec/language/bm/Languages$LanguageSet.class +org/apache/commons/codec/language/bm/Languages$SomeLanguages.class +org/apache/commons/codec/language/bm/Languages.class +org/apache/commons/codec/language/bm/NameType.class +org/apache/commons/codec/language/bm/PhoneticEngine$1.class +org/apache/commons/codec/language/bm/PhoneticEngine$PhonemeBuilder.class +org/apache/commons/codec/language/bm/PhoneticEngine$RulesApplication.class +org/apache/commons/codec/language/bm/PhoneticEngine.class +org/apache/commons/codec/language/bm/ResourceConstants.class +org/apache/commons/codec/language/bm/Rule$1.class +org/apache/commons/codec/language/bm/Rule$10.class +org/apache/commons/codec/language/bm/Rule$2.class +org/apache/commons/codec/language/bm/Rule$3.class +org/apache/commons/codec/language/bm/Rule$4.class +org/apache/commons/codec/language/bm/Rule$5.class +org/apache/commons/codec/language/bm/Rule$6.class +org/apache/commons/codec/language/bm/Rule$7.class +org/apache/commons/codec/language/bm/Rule$8.class +org/apache/commons/codec/language/bm/Rule$9.class +org/apache/commons/codec/language/bm/Rule$Phoneme$1.class +org/apache/commons/codec/language/bm/Rule$Phoneme.class +org/apache/commons/codec/language/bm/Rule$PhonemeExpr.class +org/apache/commons/codec/language/bm/Rule$PhonemeList.class +org/apache/commons/codec/language/bm/Rule$RPattern.class +org/apache/commons/codec/language/bm/Rule.class +org/apache/commons/codec/language/bm/RuleType.class +org/apache/commons/codec/language/bm/sep_approx_any.txt +org/apache/commons/codec/language/bm/sep_approx_common.txt +org/apache/commons/codec/language/bm/sep_approx_french.txt +org/apache/commons/codec/language/bm/sep_approx_hebrew.txt +org/apache/commons/codec/language/bm/sep_approx_italian.txt +org/apache/commons/codec/language/bm/sep_approx_portuguese.txt +org/apache/commons/codec/language/bm/sep_approx_spanish.txt +org/apache/commons/codec/language/bm/sep_exact_any.txt +org/apache/commons/codec/language/bm/sep_exact_approx_common.txt +org/apache/commons/codec/language/bm/sep_exact_common.txt +org/apache/commons/codec/language/bm/sep_exact_french.txt +org/apache/commons/codec/language/bm/sep_exact_hebrew.txt +org/apache/commons/codec/language/bm/sep_exact_italian.txt +org/apache/commons/codec/language/bm/sep_exact_portuguese.txt +org/apache/commons/codec/language/bm/sep_exact_spanish.txt +org/apache/commons/codec/language/bm/sep_hebrew_common.txt +org/apache/commons/codec/language/bm/sep_languages.txt +org/apache/commons/codec/language/bm/sep_rules_any.txt +org/apache/commons/codec/language/bm/sep_rules_french.txt +org/apache/commons/codec/language/bm/sep_rules_hebrew.txt +org/apache/commons/codec/language/bm/sep_rules_italian.txt +org/apache/commons/codec/language/bm/sep_rules_portuguese.txt +org/apache/commons/codec/language/bm/sep_rules_spanish.txt +org/apache/commons/codec/language/Caverphone.class +org/apache/commons/codec/language/Caverphone1.class +org/apache/commons/codec/language/Caverphone2.class +org/apache/commons/codec/language/ColognePhonetic$CologneBuffer.class +org/apache/commons/codec/language/ColognePhonetic$CologneInputBuffer.class +org/apache/commons/codec/language/ColognePhonetic$CologneOutputBuffer.class +org/apache/commons/codec/language/ColognePhonetic.class +org/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult.class +org/apache/commons/codec/language/DoubleMetaphone.class +org/apache/commons/codec/language/MatchRatingApproachEncoder.class +org/apache/commons/codec/language/Metaphone.class +org/apache/commons/codec/language/Nysiis.class +org/apache/commons/codec/language/RefinedSoundex.class +org/apache/commons/codec/language/Soundex.class +org/apache/commons/codec/language/SoundexUtils.class +org/apache/commons/codec/net/ +org/apache/commons/codec/net/BCodec.class +org/apache/commons/codec/net/QCodec.class +org/apache/commons/codec/net/QuotedPrintableCodec.class +org/apache/commons/codec/net/RFC1522Codec.class +org/apache/commons/codec/net/URLCodec.class +org/apache/commons/codec/net/Utils.class +org/apache/commons/codec/StringDecoder.class +org/apache/commons/codec/StringEncoder.class +org/apache/commons/codec/StringEncoderComparator.class +META-INF/maven/commons-codec/ +META-INF/maven/commons-codec/commons-codec/ +META-INF/maven/commons-codec/commons-codec/pom.xml +META-INF/maven/commons-codec/commons-codec/pom.properties +META-INF/maven/com.fasterxml.jackson.core/ +META-INF/maven/com.fasterxml.jackson.core/jackson-core/ +META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml +META-INF/services/ +META-INF/services/com.fasterxml.jackson.core.JsonFactory +com/fasterxml/ +com/fasterxml/jackson/ +com/fasterxml/jackson/core/ +com/fasterxml/jackson/core/Base64Variant.class +com/fasterxml/jackson/core/Base64Variants.class +com/fasterxml/jackson/core/FormatFeature.class +com/fasterxml/jackson/core/FormatSchema.class +com/fasterxml/jackson/core/JsonEncoding.class +com/fasterxml/jackson/core/JsonFactory$Feature.class +com/fasterxml/jackson/core/JsonFactory.class +com/fasterxml/jackson/core/JsonGenerationException.class +com/fasterxml/jackson/core/JsonGenerator$1.class +com/fasterxml/jackson/core/JsonGenerator$Feature.class +com/fasterxml/jackson/core/JsonGenerator.class +com/fasterxml/jackson/core/JsonLocation.class +com/fasterxml/jackson/core/JsonParseException.class +com/fasterxml/jackson/core/JsonParser$Feature.class +com/fasterxml/jackson/core/JsonParser$NumberType.class +com/fasterxml/jackson/core/JsonParser.class +com/fasterxml/jackson/core/JsonPointer.class +com/fasterxml/jackson/core/JsonProcessingException.class +com/fasterxml/jackson/core/JsonStreamContext.class +com/fasterxml/jackson/core/JsonToken.class +com/fasterxml/jackson/core/JsonTokenId.class +com/fasterxml/jackson/core/JsonpCharacterEscapes.class +com/fasterxml/jackson/core/ObjectCodec.class +com/fasterxml/jackson/core/PrettyPrinter.class +com/fasterxml/jackson/core/SerializableString.class +com/fasterxml/jackson/core/TreeCodec.class +com/fasterxml/jackson/core/TreeNode.class +com/fasterxml/jackson/core/Version.class +com/fasterxml/jackson/core/Versioned.class +com/fasterxml/jackson/core/async/ +com/fasterxml/jackson/core/async/ByteArrayFeeder.class +com/fasterxml/jackson/core/async/ByteBufferFeeder.class +com/fasterxml/jackson/core/async/NonBlockingInputFeeder.class +com/fasterxml/jackson/core/base/ +com/fasterxml/jackson/core/base/GeneratorBase.class +com/fasterxml/jackson/core/base/ParserBase.class +com/fasterxml/jackson/core/base/ParserMinimalBase.class +com/fasterxml/jackson/core/filter/ +com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.class +com/fasterxml/jackson/core/filter/FilteringParserDelegate.class +com/fasterxml/jackson/core/filter/JsonPointerBasedFilter.class +com/fasterxml/jackson/core/filter/TokenFilter.class +com/fasterxml/jackson/core/filter/TokenFilterContext.class +com/fasterxml/jackson/core/format/ +com/fasterxml/jackson/core/format/DataFormatDetector.class +com/fasterxml/jackson/core/format/DataFormatMatcher.class +com/fasterxml/jackson/core/format/InputAccessor$Std.class +com/fasterxml/jackson/core/format/InputAccessor.class +com/fasterxml/jackson/core/format/MatchStrength.class +com/fasterxml/jackson/core/io/ +com/fasterxml/jackson/core/io/CharTypes.class +com/fasterxml/jackson/core/io/CharacterEscapes.class +com/fasterxml/jackson/core/io/DataOutputAsStream.class +com/fasterxml/jackson/core/io/IOContext.class +com/fasterxml/jackson/core/io/InputDecorator.class +com/fasterxml/jackson/core/io/JsonEOFException.class +com/fasterxml/jackson/core/io/JsonStringEncoder.class +com/fasterxml/jackson/core/io/MergedStream.class +com/fasterxml/jackson/core/io/NumberInput.class +com/fasterxml/jackson/core/io/NumberOutput.class +com/fasterxml/jackson/core/io/OutputDecorator.class +com/fasterxml/jackson/core/io/SegmentedStringWriter.class +com/fasterxml/jackson/core/io/SerializedString.class +com/fasterxml/jackson/core/io/UTF32Reader.class +com/fasterxml/jackson/core/io/UTF8Writer.class +com/fasterxml/jackson/core/json/ +com/fasterxml/jackson/core/json/ByteSourceJsonBootstrapper.class +com/fasterxml/jackson/core/json/DupDetector.class +com/fasterxml/jackson/core/json/JsonGeneratorImpl.class +com/fasterxml/jackson/core/json/JsonReadContext.class +com/fasterxml/jackson/core/json/JsonWriteContext.class +com/fasterxml/jackson/core/json/PackageVersion.class +com/fasterxml/jackson/core/json/ReaderBasedJsonParser.class +com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.class +com/fasterxml/jackson/core/json/UTF8JsonGenerator.class +com/fasterxml/jackson/core/json/UTF8StreamJsonParser.class +com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.class +com/fasterxml/jackson/core/json/async/ +com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.class +com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.class +com/fasterxml/jackson/core/sym/ +com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer$TableInfo.class +com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$Bucket.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$TableInfo.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer.class +com/fasterxml/jackson/core/sym/Name.class +com/fasterxml/jackson/core/sym/Name1.class +com/fasterxml/jackson/core/sym/Name2.class +com/fasterxml/jackson/core/sym/Name3.class +com/fasterxml/jackson/core/sym/NameN.class +com/fasterxml/jackson/core/type/ +com/fasterxml/jackson/core/type/ResolvedType.class +com/fasterxml/jackson/core/type/TypeReference.class +com/fasterxml/jackson/core/type/WritableTypeId$Inclusion.class +com/fasterxml/jackson/core/type/WritableTypeId.class +com/fasterxml/jackson/core/util/ +com/fasterxml/jackson/core/util/BufferRecycler.class +com/fasterxml/jackson/core/util/BufferRecyclers.class +com/fasterxml/jackson/core/util/ByteArrayBuilder.class +com/fasterxml/jackson/core/util/DefaultIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$FixedSpaceIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$Indenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$NopIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter.class +com/fasterxml/jackson/core/util/Instantiatable.class +com/fasterxml/jackson/core/util/InternCache.class +com/fasterxml/jackson/core/util/JsonGeneratorDelegate.class +com/fasterxml/jackson/core/util/JsonParserDelegate.class +com/fasterxml/jackson/core/util/JsonParserSequence.class +com/fasterxml/jackson/core/util/MinimalPrettyPrinter.class +com/fasterxml/jackson/core/util/RequestPayload.class +com/fasterxml/jackson/core/util/Separators.class +com/fasterxml/jackson/core/util/TextBuffer.class +com/fasterxml/jackson/core/util/ThreadLocalBufferManager$ThreadLocalBufferManagerHolder.class +com/fasterxml/jackson/core/util/ThreadLocalBufferManager.class +com/fasterxml/jackson/core/util/VersionUtil.class +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/ +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml +com/fasterxml/jackson/annotation/ +com/fasterxml/jackson/annotation/JacksonAnnotation.class +com/fasterxml/jackson/annotation/JacksonAnnotationValue.class +com/fasterxml/jackson/annotation/JacksonAnnotationsInside.class +com/fasterxml/jackson/annotation/JacksonInject$Value.class +com/fasterxml/jackson/annotation/JacksonInject.class +com/fasterxml/jackson/annotation/JsonAlias.class +com/fasterxml/jackson/annotation/JsonAnyGetter.class +com/fasterxml/jackson/annotation/JsonAnySetter.class +com/fasterxml/jackson/annotation/JsonAutoDetect$1.class +com/fasterxml/jackson/annotation/JsonAutoDetect$Value.class +com/fasterxml/jackson/annotation/JsonAutoDetect$Visibility.class +com/fasterxml/jackson/annotation/JsonAutoDetect.class +com/fasterxml/jackson/annotation/JsonBackReference.class +com/fasterxml/jackson/annotation/JsonClassDescription.class +com/fasterxml/jackson/annotation/JsonCreator$Mode.class +com/fasterxml/jackson/annotation/JsonCreator.class +com/fasterxml/jackson/annotation/JsonEnumDefaultValue.class +com/fasterxml/jackson/annotation/JsonFilter.class +com/fasterxml/jackson/annotation/JsonFormat$Feature.class +com/fasterxml/jackson/annotation/JsonFormat$Features.class +com/fasterxml/jackson/annotation/JsonFormat$Shape.class +com/fasterxml/jackson/annotation/JsonFormat$Value.class +com/fasterxml/jackson/annotation/JsonFormat.class +com/fasterxml/jackson/annotation/JsonGetter.class +com/fasterxml/jackson/annotation/JsonIdentityInfo.class +com/fasterxml/jackson/annotation/JsonIdentityReference.class +com/fasterxml/jackson/annotation/JsonIgnore.class +com/fasterxml/jackson/annotation/JsonIgnoreProperties$Value.class +com/fasterxml/jackson/annotation/JsonIgnoreProperties.class +com/fasterxml/jackson/annotation/JsonIgnoreType.class +com/fasterxml/jackson/annotation/JsonInclude$Include.class +com/fasterxml/jackson/annotation/JsonInclude$Value.class +com/fasterxml/jackson/annotation/JsonInclude.class +com/fasterxml/jackson/annotation/JsonManagedReference.class +com/fasterxml/jackson/annotation/JsonMerge.class +com/fasterxml/jackson/annotation/JsonProperty$Access.class +com/fasterxml/jackson/annotation/JsonProperty.class +com/fasterxml/jackson/annotation/JsonPropertyDescription.class +com/fasterxml/jackson/annotation/JsonPropertyOrder.class +com/fasterxml/jackson/annotation/JsonRawValue.class +com/fasterxml/jackson/annotation/JsonRootName.class +com/fasterxml/jackson/annotation/JsonSetter$Value.class +com/fasterxml/jackson/annotation/JsonSetter.class +com/fasterxml/jackson/annotation/JsonSubTypes$Type.class +com/fasterxml/jackson/annotation/JsonSubTypes.class +com/fasterxml/jackson/annotation/JsonTypeId.class +com/fasterxml/jackson/annotation/JsonTypeInfo$As.class +com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class +com/fasterxml/jackson/annotation/JsonTypeInfo$None.class +com/fasterxml/jackson/annotation/JsonTypeInfo.class +com/fasterxml/jackson/annotation/JsonTypeName.class +com/fasterxml/jackson/annotation/JsonUnwrapped.class +com/fasterxml/jackson/annotation/JsonValue.class +com/fasterxml/jackson/annotation/JsonView.class +com/fasterxml/jackson/annotation/Nulls.class +com/fasterxml/jackson/annotation/ObjectIdGenerator$IdKey.class +com/fasterxml/jackson/annotation/ObjectIdGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$Base.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$IntSequenceGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$None.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$PropertyGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$StringIdGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$UUIDGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators.class +com/fasterxml/jackson/annotation/ObjectIdResolver.class +com/fasterxml/jackson/annotation/OptBoolean.class +com/fasterxml/jackson/annotation/PropertyAccessor.class +com/fasterxml/jackson/annotation/SimpleObjectIdResolver.class +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/ +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml +META-INF/services/com.fasterxml.jackson.core.ObjectCodec +com/fasterxml/jackson/databind/ +com/fasterxml/jackson/databind/AbstractTypeResolver.class +com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty$Type.class +com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty.class +com/fasterxml/jackson/databind/AnnotationIntrospector.class +com/fasterxml/jackson/databind/BeanDescription.class +com/fasterxml/jackson/databind/BeanProperty$Bogus.class +com/fasterxml/jackson/databind/BeanProperty$Std.class +com/fasterxml/jackson/databind/BeanProperty.class +com/fasterxml/jackson/databind/DatabindContext.class +com/fasterxml/jackson/databind/DeserializationConfig.class +com/fasterxml/jackson/databind/DeserializationContext.class +com/fasterxml/jackson/databind/DeserializationFeature.class +com/fasterxml/jackson/databind/InjectableValues$Std.class +com/fasterxml/jackson/databind/InjectableValues.class +com/fasterxml/jackson/databind/JavaType.class +com/fasterxml/jackson/databind/JsonDeserializer$None.class +com/fasterxml/jackson/databind/JsonDeserializer.class +com/fasterxml/jackson/databind/JsonMappingException$Reference.class +com/fasterxml/jackson/databind/JsonMappingException.class +com/fasterxml/jackson/databind/JsonNode$1.class +com/fasterxml/jackson/databind/JsonNode.class +com/fasterxml/jackson/databind/JsonSerializable$Base.class +com/fasterxml/jackson/databind/JsonSerializable.class +com/fasterxml/jackson/databind/JsonSerializer$None.class +com/fasterxml/jackson/databind/JsonSerializer.class +com/fasterxml/jackson/databind/KeyDeserializer$None.class +com/fasterxml/jackson/databind/KeyDeserializer.class +com/fasterxml/jackson/databind/MapperFeature.class +com/fasterxml/jackson/databind/MappingIterator.class +com/fasterxml/jackson/databind/MappingJsonFactory.class +com/fasterxml/jackson/databind/Module$SetupContext.class +com/fasterxml/jackson/databind/Module.class +com/fasterxml/jackson/databind/ObjectMapper$1.class +com/fasterxml/jackson/databind/ObjectMapper$2.class +com/fasterxml/jackson/databind/ObjectMapper$3.class +com/fasterxml/jackson/databind/ObjectMapper$DefaultTypeResolverBuilder.class +com/fasterxml/jackson/databind/ObjectMapper$DefaultTyping.class +com/fasterxml/jackson/databind/ObjectMapper.class +com/fasterxml/jackson/databind/ObjectReader.class +com/fasterxml/jackson/databind/ObjectWriter$GeneratorSettings.class +com/fasterxml/jackson/databind/ObjectWriter$Prefetch.class +com/fasterxml/jackson/databind/ObjectWriter.class +com/fasterxml/jackson/databind/PropertyMetadata$MergeInfo.class +com/fasterxml/jackson/databind/PropertyMetadata.class +com/fasterxml/jackson/databind/PropertyName.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$KebabCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseWithUnderscoresStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$PascalCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$PropertyNamingStrategyBase.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$SnakeCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$UpperCamelCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy.class +com/fasterxml/jackson/databind/RuntimeJsonMappingException.class +com/fasterxml/jackson/databind/SequenceWriter.class +com/fasterxml/jackson/databind/SerializationConfig.class +com/fasterxml/jackson/databind/SerializationFeature.class +com/fasterxml/jackson/databind/SerializerProvider.class +com/fasterxml/jackson/databind/annotation/ +com/fasterxml/jackson/databind/annotation/JacksonStdImpl.class +com/fasterxml/jackson/databind/annotation/JsonAppend$Attr.class +com/fasterxml/jackson/databind/annotation/JsonAppend$Prop.class +com/fasterxml/jackson/databind/annotation/JsonAppend.class +com/fasterxml/jackson/databind/annotation/JsonDeserialize.class +com/fasterxml/jackson/databind/annotation/JsonNaming.class +com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder$Value.class +com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder.class +com/fasterxml/jackson/databind/annotation/JsonSerialize$Inclusion.class +com/fasterxml/jackson/databind/annotation/JsonSerialize$Typing.class +com/fasterxml/jackson/databind/annotation/JsonSerialize.class +com/fasterxml/jackson/databind/annotation/JsonTypeIdResolver.class +com/fasterxml/jackson/databind/annotation/JsonTypeResolver.class +com/fasterxml/jackson/databind/annotation/JsonValueInstantiator.class +com/fasterxml/jackson/databind/annotation/NoClass.class +com/fasterxml/jackson/databind/cfg/ +com/fasterxml/jackson/databind/cfg/BaseSettings.class +com/fasterxml/jackson/databind/cfg/ConfigFeature.class +com/fasterxml/jackson/databind/cfg/ConfigOverride$Empty.class +com/fasterxml/jackson/databind/cfg/ConfigOverride.class +com/fasterxml/jackson/databind/cfg/ConfigOverrides.class +com/fasterxml/jackson/databind/cfg/ContextAttributes$Impl.class +com/fasterxml/jackson/databind/cfg/ContextAttributes.class +com/fasterxml/jackson/databind/cfg/DeserializerFactoryConfig.class +com/fasterxml/jackson/databind/cfg/HandlerInstantiator.class +com/fasterxml/jackson/databind/cfg/MapperConfig.class +com/fasterxml/jackson/databind/cfg/MapperConfigBase.class +com/fasterxml/jackson/databind/cfg/MutableConfigOverride.class +com/fasterxml/jackson/databind/cfg/PackageVersion.class +com/fasterxml/jackson/databind/cfg/SerializerFactoryConfig.class +com/fasterxml/jackson/databind/deser/ +com/fasterxml/jackson/databind/deser/AbstractDeserializer.class +com/fasterxml/jackson/databind/deser/BasicDeserializerFactory$1.class +com/fasterxml/jackson/databind/deser/BasicDeserializerFactory.class +com/fasterxml/jackson/databind/deser/BeanDeserializer$1.class +com/fasterxml/jackson/databind/deser/BeanDeserializer$BeanReferring.class +com/fasterxml/jackson/databind/deser/BeanDeserializer.class +com/fasterxml/jackson/databind/deser/BeanDeserializerBase.class +com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.class +com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.class +com/fasterxml/jackson/databind/deser/BeanDeserializerModifier.class +com/fasterxml/jackson/databind/deser/BuilderBasedDeserializer.class +com/fasterxml/jackson/databind/deser/ContextualDeserializer.class +com/fasterxml/jackson/databind/deser/ContextualKeyDeserializer.class +com/fasterxml/jackson/databind/deser/CreatorProperty.class +com/fasterxml/jackson/databind/deser/DataFormatReaders$AccessorForReader.class +com/fasterxml/jackson/databind/deser/DataFormatReaders$Match.class +com/fasterxml/jackson/databind/deser/DataFormatReaders.class +com/fasterxml/jackson/databind/deser/DefaultDeserializationContext$Impl.class +com/fasterxml/jackson/databind/deser/DefaultDeserializationContext.class +com/fasterxml/jackson/databind/deser/DeserializationProblemHandler.class +com/fasterxml/jackson/databind/deser/DeserializerCache.class +com/fasterxml/jackson/databind/deser/DeserializerFactory.class +com/fasterxml/jackson/databind/deser/Deserializers$Base.class +com/fasterxml/jackson/databind/deser/Deserializers.class +com/fasterxml/jackson/databind/deser/KeyDeserializers.class +com/fasterxml/jackson/databind/deser/NullValueProvider.class +com/fasterxml/jackson/databind/deser/ResolvableDeserializer.class +com/fasterxml/jackson/databind/deser/SettableAnyProperty$AnySetterReferring.class +com/fasterxml/jackson/databind/deser/SettableAnyProperty.class +com/fasterxml/jackson/databind/deser/SettableBeanProperty$Delegating.class +com/fasterxml/jackson/databind/deser/SettableBeanProperty.class +com/fasterxml/jackson/databind/deser/UnresolvedForwardReference.class +com/fasterxml/jackson/databind/deser/UnresolvedId.class +com/fasterxml/jackson/databind/deser/ValueInstantiator$Base.class +com/fasterxml/jackson/databind/deser/ValueInstantiator$Gettable.class +com/fasterxml/jackson/databind/deser/ValueInstantiator.class +com/fasterxml/jackson/databind/deser/ValueInstantiators$Base.class +com/fasterxml/jackson/databind/deser/ValueInstantiators.class +com/fasterxml/jackson/databind/deser/impl/ +com/fasterxml/jackson/databind/deser/impl/BeanAsArrayBuilderDeserializer.class +com/fasterxml/jackson/databind/deser/impl/BeanAsArrayDeserializer.class +com/fasterxml/jackson/databind/deser/impl/BeanPropertyMap.class +com/fasterxml/jackson/databind/deser/impl/CreatorCandidate$Param.class +com/fasterxml/jackson/databind/deser/impl/CreatorCandidate.class +com/fasterxml/jackson/databind/deser/impl/CreatorCollector$StdTypeConstructor.class +com/fasterxml/jackson/databind/deser/impl/CreatorCollector.class +com/fasterxml/jackson/databind/deser/impl/ErrorThrowingDeserializer.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$Builder.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$ExtTypedProperty.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler.class +com/fasterxml/jackson/databind/deser/impl/FailingDeserializer.class +com/fasterxml/jackson/databind/deser/impl/FieldProperty.class +com/fasterxml/jackson/databind/deser/impl/InnerClassProperty.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$1.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$JavaUtilCollectionsConverter.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers.class +com/fasterxml/jackson/databind/deser/impl/ManagedReferenceProperty.class +com/fasterxml/jackson/databind/deser/impl/MergingSettableBeanProperty.class +com/fasterxml/jackson/databind/deser/impl/MethodProperty.class +com/fasterxml/jackson/databind/deser/impl/NullsAsEmptyProvider.class +com/fasterxml/jackson/databind/deser/impl/NullsConstantProvider.class +com/fasterxml/jackson/databind/deser/impl/NullsFailProvider.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReader.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty$PropertyReferring.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator$CaseInsensitiveMap.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedObjectIdGenerator.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Any.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Map.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Regular.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue.class +com/fasterxml/jackson/databind/deser/impl/PropertyValueBuffer.class +com/fasterxml/jackson/databind/deser/impl/ReadableObjectId$Referring.class +com/fasterxml/jackson/databind/deser/impl/ReadableObjectId.class +com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.class +com/fasterxml/jackson/databind/deser/impl/TypeWrappedDeserializer.class +com/fasterxml/jackson/databind/deser/impl/UnwrappedPropertyHandler.class +com/fasterxml/jackson/databind/deser/impl/ValueInjector.class +com/fasterxml/jackson/databind/deser/std/ +com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.class +com/fasterxml/jackson/databind/deser/std/AtomicBooleanDeserializer.class +com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.class +com/fasterxml/jackson/databind/deser/std/BaseNodeDeserializer.class +com/fasterxml/jackson/databind/deser/std/ByteBufferDeserializer.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferring.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferringAccumulator.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer.class +com/fasterxml/jackson/databind/deser/std/ContainerDeserializerBase.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$CalendarDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateBasedDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$SqlDateDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$TimestampDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers.class +com/fasterxml/jackson/databind/deser/std/DelegatingDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumMapDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumSetDeserializer.class +com/fasterxml/jackson/databind/deser/std/FactoryBasedEnumDeserializer.class +com/fasterxml/jackson/databind/deser/std/FromStringDeserializer$Std.class +com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.class +com/fasterxml/jackson/databind/deser/std/JdkDeserializers.class +com/fasterxml/jackson/databind/deser/std/JsonLocationInstantiator.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ObjectDeserializer.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferring.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferringAccumulator.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer.class +com/fasterxml/jackson/databind/deser/std/MapEntryDeserializer.class +com/fasterxml/jackson/databind/deser/std/NullifyingDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$1.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigDecimalDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigIntegerDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BooleanDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ByteDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$CharacterDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$DoubleDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$FloatDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$IntegerDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$LongDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$NumberDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$PrimitiveOrWrapperDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ShortDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers.class +com/fasterxml/jackson/databind/deser/std/ObjectArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$BooleanDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ByteDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$CharDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$DoubleDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$FloatDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$IntDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$LongDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ShortDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers.class +com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.class +com/fasterxml/jackson/databind/deser/std/StackTraceElementDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdDelegatingDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$DelegatingKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$EnumKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringCtorKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringFactoryKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializers.class +com/fasterxml/jackson/databind/deser/std/StdNodeBasedDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdScalarDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdValueInstantiator.class +com/fasterxml/jackson/databind/deser/std/StringArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/StringCollectionDeserializer.class +com/fasterxml/jackson/databind/deser/std/StringDeserializer.class +com/fasterxml/jackson/databind/deser/std/ThrowableDeserializer.class +com/fasterxml/jackson/databind/deser/std/TokenBufferDeserializer.class +com/fasterxml/jackson/databind/deser/std/UUIDDeserializer.class +com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer$Vanilla.class +com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.class +com/fasterxml/jackson/databind/exc/ +com/fasterxml/jackson/databind/exc/IgnoredPropertyException.class +com/fasterxml/jackson/databind/exc/InvalidDefinitionException.class +com/fasterxml/jackson/databind/exc/InvalidFormatException.class +com/fasterxml/jackson/databind/exc/InvalidNullException.class +com/fasterxml/jackson/databind/exc/InvalidTypeIdException.class +com/fasterxml/jackson/databind/exc/MismatchedInputException.class +com/fasterxml/jackson/databind/exc/PropertyBindingException.class +com/fasterxml/jackson/databind/exc/UnrecognizedPropertyException.class +com/fasterxml/jackson/databind/ext/ +com/fasterxml/jackson/databind/ext/CoreXMLDeserializers$Std.class +com/fasterxml/jackson/databind/ext/CoreXMLDeserializers.class +com/fasterxml/jackson/databind/ext/CoreXMLSerializers$XMLGregorianCalendarSerializer.class +com/fasterxml/jackson/databind/ext/CoreXMLSerializers.class +com/fasterxml/jackson/databind/ext/DOMDeserializer$DocumentDeserializer.class +com/fasterxml/jackson/databind/ext/DOMDeserializer$NodeDeserializer.class +com/fasterxml/jackson/databind/ext/DOMDeserializer.class +com/fasterxml/jackson/databind/ext/DOMSerializer.class +com/fasterxml/jackson/databind/ext/Java7Support.class +com/fasterxml/jackson/databind/ext/Java7SupportImpl.class +com/fasterxml/jackson/databind/ext/NioPathDeserializer.class +com/fasterxml/jackson/databind/ext/NioPathSerializer.class +com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.class +com/fasterxml/jackson/databind/introspect/ +com/fasterxml/jackson/databind/introspect/Annotated.class +com/fasterxml/jackson/databind/introspect/AnnotatedClass$Creators.class +com/fasterxml/jackson/databind/introspect/AnnotatedClass.class +com/fasterxml/jackson/databind/introspect/AnnotatedClassResolver.class +com/fasterxml/jackson/databind/introspect/AnnotatedConstructor$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedConstructor.class +com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedField$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedField.class +com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector$FieldBuilder.class +com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedMember.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethod$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethod.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector$MethodBuilder.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodMap.class +com/fasterxml/jackson/databind/introspect/AnnotatedParameter.class +com/fasterxml/jackson/databind/introspect/AnnotatedWithParams.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$EmptyCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$NCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$NoAnnotations.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneAnnotation.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$TwoAnnotations.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.class +com/fasterxml/jackson/databind/introspect/AnnotationMap.class +com/fasterxml/jackson/databind/introspect/BasicBeanDescription.class +com/fasterxml/jackson/databind/introspect/BasicClassIntrospector.class +com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.class +com/fasterxml/jackson/databind/introspect/ClassIntrospector$MixInResolver.class +com/fasterxml/jackson/databind/introspect/ClassIntrospector.class +com/fasterxml/jackson/databind/introspect/CollectorBase.class +com/fasterxml/jackson/databind/introspect/ConcreteBeanPropertyBase.class +com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector$1.class +com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.class +com/fasterxml/jackson/databind/introspect/MemberKey.class +com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector$1.class +com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector.class +com/fasterxml/jackson/databind/introspect/ObjectIdInfo.class +com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$1.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$10.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$2.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$3.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$4.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$5.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$6.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$7.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$8.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$9.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$Linked.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$MemberIterator.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$WithMember.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.class +com/fasterxml/jackson/databind/introspect/SimpleMixInResolver.class +com/fasterxml/jackson/databind/introspect/TypeResolutionContext$Basic.class +com/fasterxml/jackson/databind/introspect/TypeResolutionContext.class +com/fasterxml/jackson/databind/introspect/VirtualAnnotatedMember.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker$1.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker$Std.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker.class +com/fasterxml/jackson/databind/introspect/WithMember.class +com/fasterxml/jackson/databind/jsonFormatVisitors/ +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatTypes.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitable.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWithSerializerProvider.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormat.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor.class +com/fasterxml/jackson/databind/jsonschema/ +com/fasterxml/jackson/databind/jsonschema/JsonSchema.class +com/fasterxml/jackson/databind/jsonschema/JsonSerializableSchema.class +com/fasterxml/jackson/databind/jsonschema/SchemaAware.class +com/fasterxml/jackson/databind/jsontype/ +com/fasterxml/jackson/databind/jsontype/NamedType.class +com/fasterxml/jackson/databind/jsontype/SubtypeResolver.class +com/fasterxml/jackson/databind/jsontype/TypeDeserializer$1.class +com/fasterxml/jackson/databind/jsontype/TypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/TypeIdResolver.class +com/fasterxml/jackson/databind/jsontype/TypeResolverBuilder.class +com/fasterxml/jackson/databind/jsontype/TypeSerializer$1.class +com/fasterxml/jackson/databind/jsontype/TypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/ +com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExistingPropertyTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/ClassNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/MinimalClassNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/StdSubtypeResolver.class +com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder$1.class +com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder.class +com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.class +com/fasterxml/jackson/databind/jsontype/impl/TypeDeserializerBase.class +com/fasterxml/jackson/databind/jsontype/impl/TypeIdResolverBase.class +com/fasterxml/jackson/databind/jsontype/impl/TypeNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/TypeSerializerBase.class +com/fasterxml/jackson/databind/module/ +com/fasterxml/jackson/databind/module/SimpleAbstractTypeResolver.class +com/fasterxml/jackson/databind/module/SimpleDeserializers.class +com/fasterxml/jackson/databind/module/SimpleKeyDeserializers.class +com/fasterxml/jackson/databind/module/SimpleModule.class +com/fasterxml/jackson/databind/module/SimpleSerializers.class +com/fasterxml/jackson/databind/module/SimpleValueInstantiators.class +com/fasterxml/jackson/databind/node/ +com/fasterxml/jackson/databind/node/ArrayNode.class +com/fasterxml/jackson/databind/node/BaseJsonNode.class +com/fasterxml/jackson/databind/node/BigIntegerNode.class +com/fasterxml/jackson/databind/node/BinaryNode.class +com/fasterxml/jackson/databind/node/BooleanNode.class +com/fasterxml/jackson/databind/node/ContainerNode.class +com/fasterxml/jackson/databind/node/DecimalNode.class +com/fasterxml/jackson/databind/node/DoubleNode.class +com/fasterxml/jackson/databind/node/FloatNode.class +com/fasterxml/jackson/databind/node/IntNode.class +com/fasterxml/jackson/databind/node/JsonNodeCreator.class +com/fasterxml/jackson/databind/node/JsonNodeFactory.class +com/fasterxml/jackson/databind/node/JsonNodeType.class +com/fasterxml/jackson/databind/node/LongNode.class +com/fasterxml/jackson/databind/node/MissingNode.class +com/fasterxml/jackson/databind/node/NodeCursor$ArrayCursor.class +com/fasterxml/jackson/databind/node/NodeCursor$ObjectCursor.class +com/fasterxml/jackson/databind/node/NodeCursor$RootCursor.class +com/fasterxml/jackson/databind/node/NodeCursor.class +com/fasterxml/jackson/databind/node/NullNode.class +com/fasterxml/jackson/databind/node/NumericNode.class +com/fasterxml/jackson/databind/node/ObjectNode.class +com/fasterxml/jackson/databind/node/POJONode.class +com/fasterxml/jackson/databind/node/ShortNode.class +com/fasterxml/jackson/databind/node/TextNode.class +com/fasterxml/jackson/databind/node/TreeTraversingParser$1.class +com/fasterxml/jackson/databind/node/TreeTraversingParser.class +com/fasterxml/jackson/databind/node/ValueNode.class +com/fasterxml/jackson/databind/ser/ +com/fasterxml/jackson/databind/ser/AnyGetterWriter.class +com/fasterxml/jackson/databind/ser/BasicSerializerFactory$1.class +com/fasterxml/jackson/databind/ser/BasicSerializerFactory.class +com/fasterxml/jackson/databind/ser/BeanPropertyFilter.class +com/fasterxml/jackson/databind/ser/BeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/BeanSerializer.class +com/fasterxml/jackson/databind/ser/BeanSerializerBuilder.class +com/fasterxml/jackson/databind/ser/BeanSerializerFactory.class +com/fasterxml/jackson/databind/ser/BeanSerializerModifier.class +com/fasterxml/jackson/databind/ser/ContainerSerializer.class +com/fasterxml/jackson/databind/ser/ContextualSerializer.class +com/fasterxml/jackson/databind/ser/DefaultSerializerProvider$Impl.class +com/fasterxml/jackson/databind/ser/DefaultSerializerProvider.class +com/fasterxml/jackson/databind/ser/FilterProvider.class +com/fasterxml/jackson/databind/ser/PropertyBuilder$1.class +com/fasterxml/jackson/databind/ser/PropertyBuilder.class +com/fasterxml/jackson/databind/ser/PropertyFilter.class +com/fasterxml/jackson/databind/ser/PropertyWriter.class +com/fasterxml/jackson/databind/ser/ResolvableSerializer.class +com/fasterxml/jackson/databind/ser/SerializerCache.class +com/fasterxml/jackson/databind/ser/SerializerFactory.class +com/fasterxml/jackson/databind/ser/Serializers$Base.class +com/fasterxml/jackson/databind/ser/Serializers.class +com/fasterxml/jackson/databind/ser/VirtualBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/ +com/fasterxml/jackson/databind/ser/impl/AttributePropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.class +com/fasterxml/jackson/databind/ser/impl/FailingSerializer.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$MultiView.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$SingleView.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/IndexedListSerializer.class +com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.class +com/fasterxml/jackson/databind/ser/impl/IteratorSerializer.class +com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer$1.class +com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.class +com/fasterxml/jackson/databind/ser/impl/ObjectIdWriter.class +com/fasterxml/jackson/databind/ser/impl/PropertyBasedObjectIdGenerator.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Double.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Multi.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$SerializerAndMapResult.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$TypeAndSerializer.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap.class +com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap$Bucket.class +com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$1.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$FilterExceptFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$SerializeExceptFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleFilterProvider.class +com/fasterxml/jackson/databind/ser/impl/StringArraySerializer.class +com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.class +com/fasterxml/jackson/databind/ser/impl/TypeWrappedSerializer.class +com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter$1.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.class +com/fasterxml/jackson/databind/ser/impl/WritableObjectId.class +com/fasterxml/jackson/databind/ser/std/ +com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.class +com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.class +com/fasterxml/jackson/databind/ser/std/AtomicReferenceSerializer.class +com/fasterxml/jackson/databind/ser/std/BeanSerializerBase$1.class +com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.class +com/fasterxml/jackson/databind/ser/std/BooleanSerializer$AsNumber.class +com/fasterxml/jackson/databind/ser/std/BooleanSerializer.class +com/fasterxml/jackson/databind/ser/std/ByteArraySerializer.class +com/fasterxml/jackson/databind/ser/std/ByteBufferSerializer.class +com/fasterxml/jackson/databind/ser/std/CalendarSerializer.class +com/fasterxml/jackson/databind/ser/std/ClassSerializer.class +com/fasterxml/jackson/databind/ser/std/CollectionSerializer.class +com/fasterxml/jackson/databind/ser/std/DateSerializer.class +com/fasterxml/jackson/databind/ser/std/DateTimeSerializerBase.class +com/fasterxml/jackson/databind/ser/std/EnumSerializer.class +com/fasterxml/jackson/databind/ser/std/EnumSetSerializer.class +com/fasterxml/jackson/databind/ser/std/FileSerializer.class +com/fasterxml/jackson/databind/ser/std/InetAddressSerializer.class +com/fasterxml/jackson/databind/ser/std/InetSocketAddressSerializer.class +com/fasterxml/jackson/databind/ser/std/IterableSerializer.class +com/fasterxml/jackson/databind/ser/std/JsonValueSerializer$TypeSerializerRerouter.class +com/fasterxml/jackson/databind/ser/std/JsonValueSerializer.class +com/fasterxml/jackson/databind/ser/std/MapProperty.class +com/fasterxml/jackson/databind/ser/std/MapSerializer$1.class +com/fasterxml/jackson/databind/ser/std/MapSerializer.class +com/fasterxml/jackson/databind/ser/std/NonTypedScalarSerializerBase.class +com/fasterxml/jackson/databind/ser/std/NullSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializer$1.class +com/fasterxml/jackson/databind/ser/std/NumberSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$1.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$Base.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$DoubleSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$FloatSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntLikeSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntegerSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$LongSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$ShortSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers.class +com/fasterxml/jackson/databind/ser/std/ObjectArraySerializer.class +com/fasterxml/jackson/databind/ser/std/RawSerializer.class +com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer$1.class +com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer.class +com/fasterxml/jackson/databind/ser/std/SerializableSerializer.class +com/fasterxml/jackson/databind/ser/std/SqlDateSerializer.class +com/fasterxml/jackson/databind/ser/std/SqlTimeSerializer.class +com/fasterxml/jackson/databind/ser/std/StaticListSerializerBase.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$BooleanArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$CharArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$DoubleArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$FloatArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$IntArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$LongArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$ShortArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$TypedPrimitiveArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers.class +com/fasterxml/jackson/databind/ser/std/StdDelegatingSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicBooleanSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicIntegerSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicLongSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Default.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Dynamic.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$EnumKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$StringKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers.class +com/fasterxml/jackson/databind/ser/std/StdScalarSerializer.class +com/fasterxml/jackson/databind/ser/std/StdSerializer.class +com/fasterxml/jackson/databind/ser/std/StringSerializer.class +com/fasterxml/jackson/databind/ser/std/TimeZoneSerializer.class +com/fasterxml/jackson/databind/ser/std/ToStringSerializer.class +com/fasterxml/jackson/databind/ser/std/TokenBufferSerializer.class +com/fasterxml/jackson/databind/ser/std/UUIDSerializer.class +com/fasterxml/jackson/databind/type/ +com/fasterxml/jackson/databind/type/ArrayType.class +com/fasterxml/jackson/databind/type/ClassKey.class +com/fasterxml/jackson/databind/type/ClassStack.class +com/fasterxml/jackson/databind/type/CollectionLikeType.class +com/fasterxml/jackson/databind/type/CollectionType.class +com/fasterxml/jackson/databind/type/MapLikeType.class +com/fasterxml/jackson/databind/type/MapType.class +com/fasterxml/jackson/databind/type/PlaceholderForType.class +com/fasterxml/jackson/databind/type/ReferenceType.class +com/fasterxml/jackson/databind/type/ResolvedRecursiveType.class +com/fasterxml/jackson/databind/type/SimpleType.class +com/fasterxml/jackson/databind/type/TypeBase.class +com/fasterxml/jackson/databind/type/TypeBindings$AsKey.class +com/fasterxml/jackson/databind/type/TypeBindings$TypeParamStash.class +com/fasterxml/jackson/databind/type/TypeBindings.class +com/fasterxml/jackson/databind/type/TypeFactory.class +com/fasterxml/jackson/databind/type/TypeModifier.class +com/fasterxml/jackson/databind/type/TypeParser$MyTokenizer.class +com/fasterxml/jackson/databind/type/TypeParser.class +com/fasterxml/jackson/databind/util/ +com/fasterxml/jackson/databind/util/AccessPattern.class +com/fasterxml/jackson/databind/util/Annotations.class +com/fasterxml/jackson/databind/util/ArrayBuilders$1.class +com/fasterxml/jackson/databind/util/ArrayBuilders$BooleanBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$ByteBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$DoubleBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$FloatBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$IntBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$LongBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$ShortBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders.class +com/fasterxml/jackson/databind/util/ArrayIterator.class +com/fasterxml/jackson/databind/util/BeanUtil.class +com/fasterxml/jackson/databind/util/ByteBufferBackedInputStream.class +com/fasterxml/jackson/databind/util/ByteBufferBackedOutputStream.class +com/fasterxml/jackson/databind/util/ClassUtil$Ctor.class +com/fasterxml/jackson/databind/util/ClassUtil$EnumTypeLocator.class +com/fasterxml/jackson/databind/util/ClassUtil.class +com/fasterxml/jackson/databind/util/CompactStringObjectMap.class +com/fasterxml/jackson/databind/util/ConstantValueInstantiator.class +com/fasterxml/jackson/databind/util/Converter$None.class +com/fasterxml/jackson/databind/util/Converter.class +com/fasterxml/jackson/databind/util/EnumResolver.class +com/fasterxml/jackson/databind/util/EnumValues.class +com/fasterxml/jackson/databind/util/ISO8601DateFormat.class +com/fasterxml/jackson/databind/util/ISO8601Utils.class +com/fasterxml/jackson/databind/util/JSONPObject.class +com/fasterxml/jackson/databind/util/JSONWrappedObject.class +com/fasterxml/jackson/databind/util/LRUMap.class +com/fasterxml/jackson/databind/util/LinkedNode.class +com/fasterxml/jackson/databind/util/NameTransformer$1.class +com/fasterxml/jackson/databind/util/NameTransformer$2.class +com/fasterxml/jackson/databind/util/NameTransformer$3.class +com/fasterxml/jackson/databind/util/NameTransformer$Chained.class +com/fasterxml/jackson/databind/util/NameTransformer$NopTransformer.class +com/fasterxml/jackson/databind/util/NameTransformer.class +com/fasterxml/jackson/databind/util/Named.class +com/fasterxml/jackson/databind/util/ObjectBuffer.class +com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder$Node.class +com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder.class +com/fasterxml/jackson/databind/util/RawValue.class +com/fasterxml/jackson/databind/util/RootNameLookup.class +com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.class +com/fasterxml/jackson/databind/util/StdConverter.class +com/fasterxml/jackson/databind/util/StdDateFormat.class +com/fasterxml/jackson/databind/util/TokenBuffer$1.class +com/fasterxml/jackson/databind/util/TokenBuffer$Parser.class +com/fasterxml/jackson/databind/util/TokenBuffer$Segment.class +com/fasterxml/jackson/databind/util/TokenBuffer.class +com/fasterxml/jackson/databind/util/TokenBufferReadContext.class +com/fasterxml/jackson/databind/util/TypeKey.class +com/fasterxml/jackson/databind/util/ViewMatcher$Multi.class +com/fasterxml/jackson/databind/util/ViewMatcher$Single.class +com/fasterxml/jackson/databind/util/ViewMatcher.class diff --git a/gradle.properties.example b/gradle.properties.example deleted file mode 100644 index cde593ea..00000000 --- a/gradle.properties.example +++ /dev/null @@ -1,6 +0,0 @@ -signing.keyId= -signing.password= -signing.secretKeyRingFile=/Users/yourusername/.gnupg/secring.gpg - -sonatypeUsername= -sonatypePassword= diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 0087cd3b18659b5577cf6ad3ef61f8eb9416ebba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51348 zcmaI7W0WY}vL#x!ZQHhO+qP}n*k#+cZEKfpo4fG#edqLj{oOwOa^%X9KO#r26&WjH zM$AYBXBtf-10t)!e7Jura6KLk|ps_JDL96SJbfqAPy~@qd0q#NOS`#@^6`gptnJ#?aZ>H%1m} zkO3id*Me1x+KoO4dNnL}0N;U-jz`c&*alKkva%-&8h)=}7{&3D=Y$t;+NbXI5RyQ6 zuph%n$fuP(ZOXTT)UdOqW$sXd7KfwhPf!C)DKV+T=Mo0_;3_m<}2-cMr z*Y|&DIbQoI4(;#vclfK~|FVVu((=DG_`lTh-)mI%bapYdRdBNZt1K5wQ|G^T9-e}( zE*7SCE|$iIF7{6UQbLKctv!+;f*%@1_}Ichg+Wcq#&0i`<0$(D11!kV;gEE)6|yjR zGiYoM=N@A3=wJRN`Zh(8{QdZ**`Spml8pC!SJSi1bJI;t-u!-kUvT*`V`PgI>GcW> z^{Ioh$d_vphRmU+*E>uNp_^m}4lp*@?L!GZC!o0-rV-pDz+ob^HjrT@o#+v(Jw?KV zyLZBQL~gt`PCo(C^0#9HAr~HqLm%G+N(UD5VY-AVLr&V|yi}|3rq)1@g8_y^l)w4! z;|#VbCf@aWr9~ zaZ5T&YWW^EB_x1fX@2c3;(h|owqva`DzrM_!@GosgW)k=eeXJ8I`yf_0al&L1rTzR zeDGLw74gAX`pOsC0f*6+@g)`(qc>BJ^a;brn~{7IvvT7SBT`knwpU9{NQw+nvRT2r zW71-=`fgL7;vic;rD@LV<1qSGJw>EioF3#a}*Vp!`J)v8ehve6;T z5`cSW?2uB7J?)*atZ&t8ls{pF9>nhM3;lXx~z9Y-m7Z)0VdT z#qhhZ2UQ1uQ7!zP-65k|Ru4;5Cn&PYBvJMY=%3!?^h(3I@~^#Z{vAaB+3qC&m*M@( zszhT4{%$Rpu%GGk6BNX5D7|N+`|c_zU_pf^y*4H`DeemwzASM3{%|Dj6ikSTw9ofP zpKW{qv@`EBF9-;~LTXZ0d5Gk5vQzchUli+x=%MyAj-E`qVDf!rD}?nRx51~?RBkd)urL7%19Lm0!Vq2P{>-kE)z|gPxT%W zE33sZz9(^3-XSIG@!+nBjv4n}=acE_TYi2&AdSJwAjRnkkHS65T*(MZ2m?JaowrB? zv3i32j-Uj99t1B%F(nJxL1{>7m}Kpbmk&WI{f&uQ`;wYGYLyM&b>|8@{&><_QgTBz!S7<(#cC(Gr*Te$; zTnYvdwj3zZm|~f%TXyU4tr_faG<07M(;+I1TFOs1hCSR2*f5bv$11HARw}erzAmwz zSzX(*V?37juFGYQNk_R%S1aH44McN{Sn^NW%(zxtt!#z|t#vE+lB4WW?GvLw!i{KV z$|O}0204v)n&oOU+bUrVzSI zRUXmq%XO(w&{ZDs@Gy_=IN+{#eG(sc>1jQ23OCjJ_gF&)Dc+c?gjlyRglK)fq)0t> z6CU&gIgSZu?Y>fB7BjUBG&_-vya0{@xrgBxH)Gz*qcqzeie9*15mA;&s3RDbgUQ?C z{wRm+p9F*%9KuP-C<_wIi@?z62Kw3w6cYy29C6?zs`vqvJS4b-EO;%+@>(WOEJMC& zXY@B;L0+K(iRECuA;D=0T*8BIV4CTxp+q7uL~0RkF!7SJ1YsSQgGgu;WG|#k7k#y9 zl-fSZ>JX^(`61vH-<->L2$9Y({^2w)gLYS>LQbWsZZGuzG}BE9Q7TX{004!*ag_N# zo2jUWv5l*5lhK&inT+eJ!vD0DhR_U*pGKph-&whzr>tS^&@* zx+5lqw{=>@6AAysOHPvOz=1ym=>+1y9IjxHDyc^)8}a}$A9Pv49n~xcd;&>K4eJrK zSgfXxae6{G2Jpf-Wxxm^Bo!WEFa%A2+>;C}sUV&h+K!d2_}ac6!@|yzgZNc4TQOv{ zr7-jD(PeyT=AR=VxyaNMXT_CMnYaWZ6vtPr$yvrpO^^waYC3 zbA?I~#mcJc3iXzxMh`2k+*#3b6z0X!C49}uf;lHuC01s2`H+qNkqwxmcR)FH6aTtt zRaY<~Zo`_qaP{{6Xi1#565b-VJ&(0$Nt

    CflOl1i4(-2^1KXo)&I5QlgjRKFQgM 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 z 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index b0c3cf1e..00000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Mon May 26 17:38:02 PDT 2014 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-1.8-bin.zip diff --git a/gradlew b/gradlew deleted file mode 100755 index 91a7e269..00000000 --- a/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index aec99730..00000000 --- a/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/pom.xml b/pom.xml index 3557e179..cb0eaf98 100644 --- a/pom.xml +++ b/pom.xml @@ -21,19 +21,20 @@ 2.9.9 + 4.2.0 https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - HEAD + HEAD - + ${basedir} - LICENSE.txt + LICENSE.md @@ -85,6 +86,50 @@ + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.1 + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + + com.sendgrid.helpers.mail.objects + com.sendgrid + + + com.sendgrid.helpers.mail + com.sendgrid + + + + + + package + + shade + + + + @@ -100,7 +145,7 @@ com.sendgrid java-http-client - 4.1.0 + ${java-http-client.version} com.fasterxml.jackson.core diff --git a/scripts/upload.sh b/scripts/upload.sh deleted file mode 100755 index fb719838..00000000 --- a/scripts/upload.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -curl \ - -F "sdk=@./repo/com/sendgrid/sendgrid-java-latest.jar" \ - -H "X-Key: $UPLOAD_SECRET" \ - https://dx.sendgrid.com/upload - -exit 0 From 89a472934bfcf5d8fc459d052103836e12a7ba2e Mon Sep 17 00:00:00 2001 From: Twilio Date: Sat, 1 Feb 2020 00:38:48 +0000 Subject: [PATCH 238/439] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1294aa28..4583c8fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-02-01] Version 4.4.2 +-------------------------- +**Library - Chore** +- [PR #471](https://github.com/sendgrid/sendgrid-java/pull/471): Update build.gradle. Thanks to [@doilio](https://github.com/doilio)! +- [PR #557](https://github.com/sendgrid/sendgrid-java/pull/557): Update Jackson dependencies to the latest version. Thanks to [@wkurniawan07](https://github.com/wkurniawan07)! +- [PR #574](https://github.com/sendgrid/sendgrid-java/pull/574): maven-compiler-plugin 3.8.1. Thanks to [@sullis](https://github.com/sullis)! +- [PR #599](https://github.com/sendgrid/sendgrid-java/pull/599): prep the repo for automated release. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + + [2019-05-20] Version 4.4.1 --------------------------- ### Fix From 268fd10c4b351cc315ded2798177d7d1389a5922 Mon Sep 17 00:00:00 2001 From: Twilio Date: Sat, 1 Feb 2020 00:46:30 +0000 Subject: [PATCH 239/439] Release 4.4.2 --- CONTRIBUTING.md | 6 +- README.md | 6 +- pom.xml | 349 ++++++++++++++++++++++++------------------------ 3 files changed, 180 insertions(+), 181 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 531dcb88..a53d0ef1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -100,7 +100,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.1/sendgrid-4.4.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.1/sendgrid-4.4.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.2/sendgrid-4.4.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.2/sendgrid-4.4.2-jar.jar:. Example ``` @@ -166,10 +166,10 @@ Please run your code through: ```bash # Clone your fork of the repo into the current directory git clone https://github.com/sendgrid/sendgrid-java - + # Navigate to the newly cloned directory cd sendgrid-java - + # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/sendgrid/sendgrid-java ``` diff --git a/README.md b/README.md index 3b941063..1d736927 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.1' + implementation 'com.sendgrid:sendgrid-java:4.4.2' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.2/sendgrid-java.jar) ## Dependencies @@ -232,7 +232,7 @@ Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java sendgrid-java is guided and supported by the Twilio Developer Experience Team. -Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. +Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. diff --git a/pom.xml b/pom.xml index cb0eaf98..2ca492ec 100644 --- a/pom.xml +++ b/pom.xml @@ -1,179 +1,178 @@ - + - 4.0.0 - - org.sonatype.oss - oss-parent - 7 - - com.sendgrid - sendgrid-java - Twilio SendGrid Java helper library - 4.4.1 - This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. + 4.0.0 + + org.sonatype.oss + oss-parent + 7 + + com.sendgrid + sendgrid-java + Twilio SendGrid Java helper library + 4.4.2 + This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. + https://github.com/sendgrid/sendgrid-java + + + The MIT License (MIT) + https://github.com/sendgrid/java-http-client/blob/master/LICENSE + repo + + + + 2.9.9 + 4.3.0 + + https://github.com/sendgrid/sendgrid-java - - - The MIT License (MIT) - https://github.com/sendgrid/java-http-client/blob/master/LICENSE - repo - - - - 2.9.9 - 4.2.0 - - - https://github.com/sendgrid/sendgrid-java - scm:git:git@github.com:sendgrid/sendgrid-java.git - scm:git:git@github.com:sendgrid/sendgrid-java.git - HEAD + scm:git:git@github.com:sendgrid/sendgrid-java.git + scm:git:git@github.com:sendgrid/sendgrid-java.git + 4.4.2 - - - - ${basedir} - - LICENSE.md - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-release-plugin - 2.4.2 - - - org.apache.maven.scm - maven-scm-provider-gitexe - 1.8.1 - - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - attach-sources - - jar - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - - attach-javadocs - - jar - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.1.1 - - - jar-with-dependencies - - - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.1 - - - - com.sendgrid.helpers.mail.objects - com.sendgrid - - - com.sendgrid.helpers.mail - com.sendgrid - - - - - - package - - shade - - - - - - - - - thinkingserious - Elmer Thomas - dx@sendgrid.com - https://sendgrid.com - - - jar - - - com.sendgrid - java-http-client - ${java-http-client.version} - - - com.fasterxml.jackson.core - jackson-core - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - junit - junit-dep - 4.11 - test - - - org.mockito - mockito-core - 2.1.0 - test - - + + + + ${basedir} + + LICENSE.md + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-release-plugin + 2.4.2 + + + org.apache.maven.scm + maven-scm-provider-gitexe + 1.8.1 + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.1 + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + + com.sendgrid.helpers.mail.objects + com.sendgrid + + + com.sendgrid.helpers.mail + com.sendgrid + + + + + + package + + shade + + + + + + + + + thinkingserious + Elmer Thomas + dx@sendgrid.com + https://sendgrid.com + + + jar + + + com.sendgrid + java-http-client + ${java-http-client.version} + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + junit + junit-dep + 4.11 + test + + + org.mockito + mockito-core + 2.1.0 + test + + - From aaef5b4571d57d5a9119201d70de82abe8a5b6c9 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Mon, 3 Feb 2020 16:50:53 -0800 Subject: [PATCH 240/439] Version Bump --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 167344c7..8e697df3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,6 @@ language: java +before_install: + - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import || true matrix: include: - name: 'OpenJDK 7' From 1ff240564d1f8cfe8b3de9ea449e913d61eff3a0 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Mon, 3 Feb 2020 16:53:40 -0800 Subject: [PATCH 241/439] Version Bump --- pom.xml | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/pom.xml b/pom.xml index 2ca492ec..27569c47 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,128 @@ scm:git:git@github.com:sendgrid/sendgrid-java.git 4.4.2 + + + gpg + + false + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + ${gpg.keyname} + ${gpg.passphrase} + + --pinentry-mode + loopback + + + + + + + + release + + + release + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + ossrh + https://oss.sonatype.org/ + true + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.4 + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + + com.sendgrid.helpers.mail.objects + com.sendgrid + + + com.sendgrid.helpers.mail + com.sendgrid + + + + + + package + + shade + + + + + + + + From 76dcd4280280c2661be211eec6f47c2d691c30b1 Mon Sep 17 00:00:00 2001 From: brianjester Date: Tue, 4 Feb 2020 08:35:37 -0800 Subject: [PATCH 242/439] docs: fix typo in README (#590) --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1d736927..954df3fc 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Update the development environment with your [SENDGRID_API_KEY](https://app.send cp .env_sample .env ``` 2. Edit the new `.env` to add your API key -3. Source the `.env` file to set rhe variable in the current session +3. Source the `.env` file to set the variable in the current session ```bash source .env ``` @@ -220,7 +220,6 @@ Quick links: - [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) - [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) - [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) -- [Sign the CLA to Create a Pull Request](https://cla.sendgrid.com/sendgrid/sendgrid-java) # Troubleshooting From b71b572ba60e50aab2ca67d2bad0f6b872d9a522 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2020 10:46:46 -0600 Subject: [PATCH 243/439] chore: Bump jackson.version from 2.9.9 to 2.10.2 (#602) Bumps `jackson.version` from 2.9.9 to 2.10.2. Updates `jackson-core` from 2.9.9 to 2.10.2 - [Release notes](https://github.com/FasterXML/jackson-core/releases) - [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.9.9...jackson-core-2.10.2) Updates `jackson-annotations` from 2.9.9 to 2.10.2 - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Updates `jackson-databind` from 2.9.9 to 2.10.2 - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 27569c47..6aebb72a 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 2.9.9 + 2.10.2 4.3.0 From f00704b6bff594636d04b7517ec45d9b15ea20f5 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 4 Feb 2020 12:48:25 -0600 Subject: [PATCH 244/439] fix: version command updated --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index bc1a62ee..c739dbc9 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ .PHONY: install test test-integration clean -VERSION := $(shell mvn help:evaluate -Dexpression=project.version | grep -e '^[^\[]') +VERSION := $(shell mvn help:evaluate -Dexpression=project.version --batch-mode | grep -e '^[^\[]') install: @java -version || (echo "Java is not installed, please install Java >= 7"; exit 1); mvn clean install -DskipTests=true -Dgpg.skip -B From 69ba0d2941ad33eb57bec96d4d0cb3c52961dd2d Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Tue, 4 Feb 2020 11:18:04 -0800 Subject: [PATCH 245/439] fix: use http client version range --- pom.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 6aebb72a..d50252e8 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,6 @@ 2.10.2 - 4.3.0 https://github.com/sendgrid/sendgrid-java @@ -267,7 +266,7 @@ com.sendgrid java-http-client - ${java-http-client.version} + [4.2,) com.fasterxml.jackson.core From 1b2a55eaacf069cecde7ef26ff6d34bcc74237d7 Mon Sep 17 00:00:00 2001 From: Ethan Wood Date: Tue, 4 Feb 2020 12:51:11 -0700 Subject: [PATCH 246/439] chore: Remove unnecessary access modifiers on interface methods. (#563) --- src/main/java/com/sendgrid/APICallback.java | 4 ++-- src/main/java/com/sendgrid/SendGridAPI.java | 22 ++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/sendgrid/APICallback.java b/src/main/java/com/sendgrid/APICallback.java index fde54f9d..8504f41c 100644 --- a/src/main/java/com/sendgrid/APICallback.java +++ b/src/main/java/com/sendgrid/APICallback.java @@ -9,11 +9,11 @@ public interface APICallback { * Callback method in case of an error. * @param ex the error that was thrown. */ - public void error(Exception ex); + void error(Exception ex); /** * Callback method in case of a valid response. * @param response the valid response. */ - public void response(Response response); + void response(Response response); } diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index 1d9e69f7..aa9583a2 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -10,34 +10,34 @@ public interface SendGridAPI { * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys */ - public void initializeSendGrid(String apiKey); + void initializeSendGrid(String apiKey); /** * Returns the library version * * @return the library version. */ - public String getLibraryVersion(); + String getLibraryVersion(); /** * Gets the version. * * @return returns the version. */ - public String getVersion(); + String getVersion(); /** * Sets the version. * * @param version the Twilio SendGrid version. */ - public void setVersion(String version); + void setVersion(String version); /** * Gets the request headers. * @return returns a map of request headers. */ - public Map getRequestHeaders(); + Map getRequestHeaders(); /** * Adds a request headers. @@ -46,7 +46,7 @@ public interface SendGridAPI { * @param value the value * @return returns a map of request headers. */ - public Map addRequestHeader(String key, String value); + Map addRequestHeader(String key, String value); /** * Removes a request headers. @@ -54,21 +54,21 @@ public interface SendGridAPI { * @param key the key * @return returns a map of request headers. */ - public Map removeRequestHeader(String key); + Map removeRequestHeader(String key); /** * Gets the host. * * @return returns the host. */ - public String getHost(); + String getHost(); /** * Sets the host. * * @param host the host to set */ - public void setHost(String host); + void setHost(String host); /** * Class makeCall makes the call to the Twilio SendGrid API, override this method for @@ -78,7 +78,7 @@ public interface SendGridAPI { * @return returns a response. * @throws IOException in case of network or marshal error. */ - public Response makeCall(Request request) throws IOException; + Response makeCall(Request request) throws IOException; /** * Class api sets up the request to the Twilio SendGrid API, this is main interface. @@ -87,5 +87,5 @@ public interface SendGridAPI { * @return returns a response. * @throws IOException in case of network or marshal error. */ - public Response api(Request request) throws IOException; + Response api(Request request) throws IOException; } From 8fc3514a8f9384379d2a438d04b36cddd866c357 Mon Sep 17 00:00:00 2001 From: Rohan Talip Date: Tue, 4 Feb 2020 11:57:16 -0800 Subject: [PATCH 247/439] chore: Removed the apiKey instance variable as it wasn't being used (#542) --- src/main/java/com/sendgrid/SendGrid.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 213cce52..3c27b313 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -20,9 +20,6 @@ public class SendGrid implements SendGridAPI { private ExecutorService pool; - /** The user's API key. */ - private String apiKey; - /** The Twilio SendGrid host to which to connect. */ private String host; @@ -78,7 +75,6 @@ public SendGrid(String apiKey, Client client) { * @param apiKey the user's API key. */ public void initializeSendGrid(String apiKey) { - this.apiKey = apiKey; this.host = "api.sendgrid.com"; this.version = "v3"; this.requestHeaders = new HashMap(); From ced880a3fe553598023a9dd628904766b52fdb4a Mon Sep 17 00:00:00 2001 From: Anurag Sachdeva Date: Wed, 5 Feb 2020 01:34:46 +0530 Subject: [PATCH 248/439] docs: fix a minor type in README (#516) From c8fb5a6d9e64ef442453e5f0e2d7fca5605f021b Mon Sep 17 00:00:00 2001 From: thepriefy Date: Wed, 5 Feb 2020 03:14:49 +0700 Subject: [PATCH 249/439] docs: makes Environmental Variables a sub topic in CONTRIBUTING.md (#387) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a53d0ef1..bca4db22 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -72,7 +72,7 @@ git clone https://github.com/sendgrid/sendgrid-java.git cd sendgrid-java ``` -## Environment Variables +### Environment Variables First, get your free Twilio SendGrid account [here](https://sendgrid.com/free?source=sendgrid-java). From 4c13fa2b26c63de683152806cae376276cea4f70 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Tue, 4 Feb 2020 15:16:24 -0600 Subject: [PATCH 250/439] docs: baseline all the templated markdown docs (#603) --- .github/ISSUE_TEMPLATE | 17 --- .github/PULL_REQUEST_TEMPLATE | 26 ---- CODE_OF_CONDUCT.md | 115 +++++++++++------- CONTRIBUTING.md | 2 +- ISSUE_TEMPLATE.md | 26 ++++ LICENSE.md | 16 +-- PULL_REQUEST_TEMPLATE.md | 31 +++++ src/test/java/com/sendgrid/LicenseTest.java | 2 +- .../com/sendgrid/TestRequiredFilesExist.java | 8 +- 9 files changed, 144 insertions(+), 99 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE delete mode 100644 .github/PULL_REQUEST_TEMPLATE create mode 100644 ISSUE_TEMPLATE.md create mode 100644 PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE b/.github/ISSUE_TEMPLATE deleted file mode 100644 index ee3ea5c2..00000000 --- a/.github/ISSUE_TEMPLATE +++ /dev/null @@ -1,17 +0,0 @@ -#### Issue Summary - -A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. Please feel free to include screenshots, screencasts, code examples. - - -#### Steps to Reproduce - -1. This is the first step -2. This is the second step -3. Further steps, etc. - -Any other information you want to share that is relevant to the issue being reported. Especially, why do you consider this to be a bug? What do you expect to happen instead? - -#### Technical details: - -* sendgrid-java Version: master (latest commit: [commit number]) -* Java Version: X.X \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE deleted file mode 100644 index 4aa9c567..00000000 --- a/.github/PULL_REQUEST_TEMPLATE +++ /dev/null @@ -1,26 +0,0 @@ - -# Fixes # - -### Checklist -- [ ] I acknowledge that all my contributions will be made under the project's license -- [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) -- [ ] I have read the [Contribution Guide] and my PR follows them. -- [ ] I updated my branch with the development branch. -- [ ] I have added tests that prove my fix is effective or that my feature works -- [ ] I have added necessary documentation about the functionality in the appropriate .md file -- [ ] I have added in line documentation to the code I modified - -### Short description of what this PR does: -- -- - -If you have questions, please send an email to [Sendgrid](mailto:dx@sendgrid.com), or file a Github Issue in this repository. \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index d2ca9db9..2f0727ed 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,42 +1,73 @@ - - # Twilio SendGrid Community Code of Conduct - - The Twilio SendGrid open source community is made up of members from around the globe with a diverse set of skills, personalities, and experiences. It is through these differences that our community experiences successes and continued growth. When you're working with members of the community, we encourage you to follow these guidelines, which help steer our interactions and strive to maintain a positive, successful and growing community. - - ### Be Open - Members of the community are open to collaboration, whether it's on pull requests, code reviews, approvals, issues or otherwise. We're receptive to constructive comments and criticism, as the experiences and skill sets of all members contribute to the whole of our efforts. We're accepting of all who wish to take part in our activities, fostering an environment where anyone can participate, and everyone can make a difference. - - ### Be Considerate - Members of the community are considerate of their peers, which include other contributors and users of Twilio SendGrid. We're thoughtful when addressing the efforts of others, keeping in mind that often the labor was completed with the intent of the good of the community. We're attentive in our communications, whether in person or online, and we're tactful when approaching differing views. - - ### Be Respectful - Members of the community are respectful. We're respectful of others, their positions, their skills, their commitments and their efforts. We're respectful of the volunteer efforts that permeate the Twilio SendGrid community. We're respectful of the processes outlined in the community, and we work within them. When we disagree, we are courteous in raising our issues. Overall, we're good to each other. We contribute to this community not because we have to, but because we want to. If we remember that, these guidelines will come naturally. - - ## Additional Guidance - - ### Disclose Potential Conflicts of Interest - Community discussions often involve interested parties. We expect participants to be aware when they are conflicted due to employment or other projects they are involved in and disclose those interests to other project members. When in doubt, over-disclose. Perceived conflicts of interest are important to address so that the community’s decisions are credible even when unpopular, difficult or favorable to the interests of one group over another. - - ### Interpretation - This Code is not exhaustive or complete. It is not a rulebook; it serves to distill our common understanding of a collaborative, shared environment and goals. We expect it to be followed in spirit as much as in the letter. When in doubt, try to abide by [Twilio SendGrid’s cultural values](https://sendgrid.com/blog/employee-engagement-the-4h-way) defined by our “4H’s”: Happy, Hungry, Humble and Honest. - - ### Enforcement - Most members of the Twilio SendGrid community always comply with this Code, not because of the existence of this Code, but because they have long experience participating in open source communities where the conduct described above is normal and expected. However, failure to observe this Code may be grounds for suspension, reporting the user for abuse or changing permissions for outside contributors. - - ## If you have concerns about someone’s conduct - **Initiate Direct Contact** - It is always appropriate to email a community member (if contact information is available), mention that you think their behavior was out of line, and (if necessary) point them to this Code. - - **Discuss Publicly** - Discussing publicly is always acceptable. Note, though, that approaching the person directly may be better, as it tends to make them less defensive, and it respects the time of other community members, so you probably want to try direct contact first. - - **Contact the Moderators** - You can reach the Twilio SendGrid moderators by emailing dx@sendgrid.com. - - ## Submission to Twilio SendGrid Repositories - Finally, just a reminder, changes to the Twilio SendGrid repositories will only be accepted upon completion of the [Twilio SendGrid Contributor Agreement](https://cla.sendgrid.com). - - ## Attribution - - Twilio SendGrid thanks the following, on which it draws for content and inspiration: - - * [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/) - * [Open Source Initiative General Code of Conduct](https://opensource.org/codeofconduct) - * [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html) +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or + advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic + address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at open-source@twilio.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bca4db22..9e433714 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,7 +47,7 @@ Before you decide to create a new issue, please try the following: ### Please use our Bug Report Template -In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. +In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/ISSUE_TEMPLATE.md) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. ## Improvements to the Codebase diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..68630383 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,26 @@ + + +### Issue Summary +A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. Please feel free to include screenshots, screencasts, or code examples. + +### Steps to Reproduce +1. This is the first step +2. This is the second step +3. Further steps, etc. + +### Code Snippet +```java +# paste code here +``` + +### Exception/Log +``` +# paste exception/log here +``` + +### Technical details: +* sendgrid-java version: +* java version: + diff --git a/LICENSE.md b/LICENSE.md index d55059a3..29aba592 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,13 +1,13 @@ -The MIT License (MIT) +MIT License -Copyright (c) 2013-2020 Twilio SendGrid, Inc. +Copyright (C) 2020, Twilio SendGrid, Inc. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..215059a9 --- /dev/null +++ b/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,31 @@ + + +# Fixes # + +A short description of what this PR does. + +### Checklist +- [ ] I acknowledge that all my contributions will be made under the project's license +- [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) +- [ ] I have read the [Contribution Guidelines](CONTRIBUTING.md) and my PR follows them +- [ ] I have titled the PR appropriately +- [ ] I have updated my branch with the master branch +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] I have added necessary documentation about the functionality in the appropriate .md file +- [ ] I have added inline documentation to the code I modified + +If you have questions, please file a [support ticket](https://twilio.com/help/contact), or create a GitHub Issue in this repository. diff --git a/src/test/java/com/sendgrid/LicenseTest.java b/src/test/java/com/sendgrid/LicenseTest.java index 776b768e..493458e6 100644 --- a/src/test/java/com/sendgrid/LicenseTest.java +++ b/src/test/java/com/sendgrid/LicenseTest.java @@ -21,7 +21,7 @@ public void testLicenseShouldHaveCorrectYear() throws IOException { } } } - String expectedCopyright = String.format("Copyright (c) 2013-%d Twilio SendGrid, Inc.", Calendar.getInstance().get(Calendar.YEAR)); + String expectedCopyright = String.format("Copyright (C) %d, Twilio SendGrid, Inc. ", Calendar.getInstance().get(Calendar.YEAR)); Assert.assertEquals("License has incorrect year", copyrightText, expectedCopyright); } } diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index 928758b9..bb5dd46c 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -57,9 +57,9 @@ public class TestRequiredFilesExist { assertTrue(new File("./CONTRIBUTING.md").exists()); } - // ./.github/ISSUE_TEMPLATE + // ./ISSUE_TEMPLATE.md @Test public void checkIssuesTemplateExists() { - assertTrue(new File("./.github/ISSUE_TEMPLATE").exists()); + assertTrue(new File("./ISSUE_TEMPLATE.md").exists()); } // ./LICENSE.md @@ -67,9 +67,9 @@ public class TestRequiredFilesExist { assertTrue(new File("./LICENSE.md").exists()); } - // ./.github/PULL_REQUEST_TEMPLATE + // ./PULL_REQUEST_TEMPLATE.md @Test public void checkPullRequestExists() { - assertTrue(new File("./.github/PULL_REQUEST_TEMPLATE").exists()); + assertTrue(new File("./PULL_REQUEST_TEMPLATE.md").exists()); } // ./README.md From 40d073ec5dcd839923ea5b08d0fd07f004dc9667 Mon Sep 17 00:00:00 2001 From: Derek Neuland Date: Tue, 4 Feb 2020 16:37:53 -0500 Subject: [PATCH 251/439] docs: Add Code Review to Contributing.md (#402) --- CONTRIBUTING.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6d512b75..60ac4b09 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,6 +16,7 @@ Hello! Thank you for choosing to help contribute to one of the Twilio SendGrid o - [Testing](#testing) - [Style Guidelines & Naming Conventions](#style-guidelines--naming-conventions) - [Creating a Pull Request](#creating-a-pull-request) +- [Code Reviews](#code-reviews) We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. @@ -211,6 +212,9 @@ Please run your code through: ``` 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) - with a clear title and description against the `development` branch. All tests must be passing before we will review the PR. + with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. + +## Code Reviews +If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, Github has some great information on how to review a Pull Request. If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. From 63aafd1a32fd4df6faf873f8f2e98fd2b5e0e907 Mon Sep 17 00:00:00 2001 From: Frieder Bluemle Date: Tue, 4 Feb 2020 13:46:55 -0800 Subject: [PATCH 252/439] docs: Fix GitHub spelling (#604) --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 60ac4b09..bd04f222 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -213,8 +213,8 @@ Please run your code through: 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. - + ## Code Reviews -If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, Github has some great information on how to review a Pull Request. +If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, GitHub has some great information on how to review a Pull Request. If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. From 7d8a80f96a95bcc6daa4238c5c3ebd337d3edeab Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 5 Feb 2020 19:04:46 +0000 Subject: [PATCH 253/439] [Librarian] Version Bump --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4583c8fd..599016cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,23 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-02-05] Version 4.4.3 +-------------------------- +**Library - Docs** +- [PR #604](https://github.com/sendgrid/sendgrid-java/pull/604): Fix GitHub spelling. Thanks to [@friederbluemle](https://github.com/friederbluemle)! +- [PR #534](https://github.com/sendgrid/sendgrid-java/pull/534): Fix whitespace errors and typos. Thanks to [@friederbluemle](https://github.com/friederbluemle)! +- [PR #402](https://github.com/sendgrid/sendgrid-java/pull/402): Add Code Review to Contributing.md. Thanks to [@derekneuland](https://github.com/derekneuland)! +- [PR #603](https://github.com/sendgrid/sendgrid-java/pull/603): baseline all the templated markdown docs. Thanks to [@childish-sambino](https://github.com/childish-sambino)! +- [PR #387](https://github.com/sendgrid/sendgrid-java/pull/387): makes Environmental Variables a sub topic in CONTRIBUTING.md. Thanks to [@thepriefy](https://github.com/thepriefy)! +- [PR #516](https://github.com/sendgrid/sendgrid-java/pull/516): fix a minor type in README. Thanks to [@anuragsachdeva28](https://github.com/anuragsachdeva28)! +- [PR #590](https://github.com/sendgrid/sendgrid-java/pull/590): fix typo in README. Thanks to [@brianjester](https://github.com/brianjester)! + +**Library - Chore** +- [PR #542](https://github.com/sendgrid/sendgrid-java/pull/542): Removed the apiKey instance variable as it wasn't being used. Thanks to [@RohanTalip](https://github.com/RohanTalip)! +- [PR #563](https://github.com/sendgrid/sendgrid-java/pull/563): Remove unnecessary access modifiers on interface methods. Thanks to [@ethanwood17](https://github.com/ethanwood17)! +- [PR #602](https://github.com/sendgrid/sendgrid-java/pull/602): Bump jackson.version from 2.9.9 to 2.10.2. Thanks to [@dependabot](https://github.com/dependabot)! + + [2020-02-01] Version 4.4.2 -------------------------- **Library - Chore** From 0e121cc4e83de5fd954e420189cb6224ba92991e Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 5 Feb 2020 19:38:13 +0000 Subject: [PATCH 254/439] Release 4.4.3 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bd04f222..5687d511 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.2/sendgrid-4.4.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.2/sendgrid-4.4.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.3/sendgrid-4.4.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.3/sendgrid-4.4.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index 30b2da8d..de73ea22 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.2' + implementation 'com.sendgrid:sendgrid-java:4.4.3' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index d50252e8..af283cb1 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.2 + 4.4.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.2 + 4.4.3 @@ -296,4 +296,4 @@ test - + \ No newline at end of file From 81a170e03505cc9d7f437d26b60939893d9410a1 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Fri, 7 Feb 2020 15:43:55 -0800 Subject: [PATCH 255/439] fix: update release jar (#608) --- Makefile | 2 +- pom.xml | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index c739dbc9..36295ba5 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ VERSION := $(shell mvn help:evaluate -Dexpression=project.version --batch-mode | install: @java -version || (echo "Java is not installed, please install Java >= 7"; exit 1); mvn clean install -DskipTests=true -Dgpg.skip -B - cp target/sendgrid-java-$(VERSION).jar sendgrid-java.jar + cp target/sendgrid-java-$(VERSION)-shaded.jar sendgrid-java.jar test: mvn test diff --git a/pom.xml b/pom.xml index af283cb1..be2ca895 100644 --- a/pom.xml +++ b/pom.xml @@ -143,6 +143,10 @@ shade + + true + shaded + @@ -248,6 +252,10 @@ shade + + true + shaded + @@ -296,4 +304,4 @@ test - \ No newline at end of file + From a2157a17256490947b00cc359675aa6c672c5e3d Mon Sep 17 00:00:00 2001 From: Twilio Date: Sat, 8 Feb 2020 00:14:56 +0000 Subject: [PATCH 256/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 599016cb..aecc8312 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-02-08] Version 4.4.4 +-------------------------- +**Library - Fix** +- [PR #608](https://github.com/sendgrid/sendgrid-java/pull/608): update release jar. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + + [2020-02-05] Version 4.4.3 -------------------------- **Library - Docs** From 603713410dbb259afa5cd2524a79218aa11d50b0 Mon Sep 17 00:00:00 2001 From: Twilio Date: Sat, 8 Feb 2020 00:18:05 +0000 Subject: [PATCH 257/439] Release 4.4.4 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5687d511..1bb95451 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.3/sendgrid-4.4.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.3/sendgrid-4.4.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.4/sendgrid-4.4.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.4/sendgrid-4.4.4-jar.jar:. Example ``` diff --git a/README.md b/README.md index de73ea22..38061f66 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.3' + implementation 'com.sendgrid:sendgrid-java:4.4.4' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.3/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.4/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index be2ca895..0b3b0990 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.3 + 4.4.4 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.3 + 4.4.4 @@ -304,4 +304,4 @@ test - + \ No newline at end of file From 9659ae34aa028ffc71f6db0529f60e59804f1ad7 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 10 Feb 2020 12:35:03 -0600 Subject: [PATCH 258/439] fix: limit HTTP client version range to minor updates --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0b3b0990..771fa249 100644 --- a/pom.xml +++ b/pom.xml @@ -274,7 +274,7 @@ com.sendgrid java-http-client - [4.2,) + [4.2,5.0) com.fasterxml.jackson.core @@ -304,4 +304,4 @@ test - \ No newline at end of file + From 07425677749ed9cc18df7d5c656b036c13449042 Mon Sep 17 00:00:00 2001 From: Rohan Talip Date: Fri, 14 Feb 2020 06:19:51 -0800 Subject: [PATCH 259/439] docs: Update the link for Google's Style Guide (#540) ... from the out-of-date http://checkstyle.sourceforge.net/reports/google-java-style.html (last updated 2014-03-21) ... to https://google.github.io/styleguide/javaguide.html (last updated 2018-05-22) See also https://github.com/google/styleguide/blob/gh-pages/javaguide.html --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1bb95451..d5ad65b0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -155,7 +155,7 @@ Generally, we follow the style guidelines as suggested by the official language. Please run your code through: - [FindBugs](http://findbugs.sourceforge.net/) -- [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](http://checkstyle.sourceforge.net/reports/google-java-style.html). +- [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](https://google.github.io/styleguide/javaguide.html). ## Creating a Pull Request From 041f7b1ae617fc750937e728871ac4103f2a4249 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 19 Feb 2020 23:47:56 +0000 Subject: [PATCH 260/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aecc8312..51d5926e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-02-19] Version 4.4.5 +-------------------------- +**Library - Docs** +- [PR #540](https://github.com/sendgrid/sendgrid-java/pull/540): Update the link for Google's Style Guide. Thanks to [@RohanTalip](https://github.com/RohanTalip)! + + [2020-02-08] Version 4.4.4 -------------------------- **Library - Fix** From 5b10cf9ca91d7b28cdbcdfabd18e608e44b71772 Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 20 Feb 2020 00:02:02 +0000 Subject: [PATCH 261/439] Release 4.4.5 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d5ad65b0..bf38a9d1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.4/sendgrid-4.4.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.4/sendgrid-4.4.4-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.5/sendgrid-4.4.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.5/sendgrid-4.4.5-jar.jar:. Example ``` diff --git a/README.md b/README.md index 38061f66..8ccf389a 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.4' + implementation 'com.sendgrid:sendgrid-java:4.4.5' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.4/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.5/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 771fa249..84dd9b68 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.4 + 4.4.5 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.4 + 4.4.5 @@ -304,4 +304,4 @@ test - + \ No newline at end of file From e2e146b60d36b1c6ced57436efdd389472a63b7d Mon Sep 17 00:00:00 2001 From: Rohan Talip Date: Wed, 31 Oct 2018 10:13:21 -0700 Subject: [PATCH 262/439] Tidied up a little. - (Mostly) automatically reformatted code using IntelliJ IDEA to match the Google Style Guide (as documented in CONTRIBUTING.md). - 2 space indent, where it wasn't already. - Line wrap at 100 characters, where it wasn't already. - Wildcard imports were replaced with explicit imports. - Unused imports were removed. - Annotations were put onto their own line, and additional lines added for readability where necessary. - Braces were added to if-statements that didn't already have them. - Also made some minor edits, e.g. as suggested by IntelliJ IDEA (e.g. public --> private). This will help with getting the code into shape before style conformance is required as per issue #472 and pull request #496. See also: - https://github.com/google/google-java-format - https://plugins.jetbrains.com/plugin/8527-google-java-format - https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml --- src/main/java/com/sendgrid/APICallback.java | 27 +- .../java/com/sendgrid/RateLimitException.java | 58 ++-- src/main/java/com/sendgrid/SendGrid.java | 55 ++-- src/main/java/com/sendgrid/SendGridAPI.java | 22 +- .../java/com/sendgrid/helpers/mail/Mail.java | 270 +++++++++++------- .../sendgrid/helpers/mail/objects/ASM.java | 32 ++- .../helpers/mail/objects/Attachments.java | 133 +++++---- .../helpers/mail/objects/BccSettings.java | 31 +- .../mail/objects/ClickTrackingSetting.java | 37 ++- .../helpers/mail/objects/Content.java | 41 +-- .../sendgrid/helpers/mail/objects/Email.java | 29 +- .../helpers/mail/objects/FooterSetting.java | 47 +-- .../mail/objects/GoogleAnalyticsSetting.java | 86 ++++-- .../helpers/mail/objects/MailSettings.java | 93 +++--- .../mail/objects/OpenTrackingSetting.java | 43 +-- .../helpers/mail/objects/Personalization.java | 141 +++++---- .../helpers/mail/objects/Setting.java | 16 +- .../mail/objects/SpamCheckSetting.java | 46 +-- .../objects/SubscriptionTrackingSetting.java | 70 +++-- .../mail/objects/TrackingSettings.java | 75 +++-- src/test/java/com/sendgrid/LicenseTest.java | 31 +- src/test/java/com/sendgrid/SendGridTest.java | 133 +++++---- .../com/sendgrid/TestRequiredFilesExist.java | 184 ++++++------ 23 files changed, 1040 insertions(+), 660 deletions(-) diff --git a/src/main/java/com/sendgrid/APICallback.java b/src/main/java/com/sendgrid/APICallback.java index 8504f41c..101052d6 100644 --- a/src/main/java/com/sendgrid/APICallback.java +++ b/src/main/java/com/sendgrid/APICallback.java @@ -1,19 +1,22 @@ package com.sendgrid; /** - * An interface describing a callback mechanism for the - * asynchronous, rate limit aware API connection. + * An interface describing a callback mechanism for the asynchronous, rate limit aware API + * connection. */ public interface APICallback { - /** - * Callback method in case of an error. - * @param ex the error that was thrown. - */ - void error(Exception ex); - /** - * Callback method in case of a valid response. - * @param response the valid response. - */ - void response(Response response); + /** + * Callback method in case of an error. + * + * @param ex the error that was thrown. + */ + void error(Exception ex); + + /** + * Callback method in case of a valid response. + * + * @param response the valid response. + */ + void response(Response response); } diff --git a/src/main/java/com/sendgrid/RateLimitException.java b/src/main/java/com/sendgrid/RateLimitException.java index 4912ac92..7a2570ac 100644 --- a/src/main/java/com/sendgrid/RateLimitException.java +++ b/src/main/java/com/sendgrid/RateLimitException.java @@ -1,36 +1,40 @@ package com.sendgrid; /** - * An exception thrown when the maximum number of retries - * have occurred, and the API calls are still rate limited. + * An exception thrown when the maximum number of retries have occurred, and the API calls are still + * rate limited. */ public class RateLimitException extends Exception { - private final Request request; - private final int retryCount; - /** - * Construct a new exception. - * @param request the originating request object. - * @param retryCount the number of times a retry was attempted. - */ - public RateLimitException(Request request, int retryCount) { - this.request = request; - this.retryCount = retryCount; - } + private final Request request; + private final int retryCount; - /** - * Get the originating request object. - * @return the request object. - */ - public Request getRequest() { - return this.request; - } + /** + * Construct a new exception. + * + * @param request the originating request object. + * @param retryCount the number of times a retry was attempted. + */ + public RateLimitException(Request request, int retryCount) { + this.request = request; + this.retryCount = retryCount; + } - /** - * Get the number of times the action was attemted. - * @return the retry count. - */ - public int getRetryCount() { - return this.retryCount; - } + /** + * Get the originating request object. + * + * @return the request object. + */ + public Request getRequest() { + return this.request; + } + + /** + * Get the number of times the action was attemted. + * + * @return the retry count. + */ + public int getRetryCount() { + return this.retryCount; + } } diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 3c27b313..b248e7af 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -3,12 +3,12 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** - * Class Twilio SendGrid allows for quick and easy access to the Twilio SendGrid API. - */ + * The Twilio SendGrid class allows for quick and easy access to the Twilio SendGrid API. + */ public class SendGrid implements SendGridAPI { private static final String VERSION = "3.0.0"; @@ -43,6 +43,7 @@ public class SendGrid implements SendGridAPI { /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys */ public SendGrid(String apiKey) { @@ -52,6 +53,7 @@ public SendGrid(String apiKey) { /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param test is true if you are unit testing */ @@ -62,6 +64,7 @@ public SendGrid(String apiKey, Boolean test) { /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param client the Client to use (allows to customize its configuration) */ @@ -72,6 +75,7 @@ public SendGrid(String apiKey, Client client) { /** * Initialize the client. + * * @param apiKey the user's API key. */ public void initializeSendGrid(String apiKey) { @@ -89,14 +93,16 @@ public void initializeSendGrid(String apiKey) { /** * Retrieve the current library version. + * * @return the current version. */ public String getLibraryVersion() { - return this.VERSION; + return VERSION; } /** * Get the API version. + * * @return the current API versioin (v3 by default). */ public String getVersion() { @@ -105,6 +111,7 @@ public String getVersion() { /** * Set the API version. + * * @param version the new version. */ public void setVersion(String version) { @@ -113,6 +120,7 @@ public void setVersion(String version) { /** * Obtain the request headers. + * * @return the request headers. */ public Map getRequestHeaders() { @@ -121,6 +129,7 @@ public Map getRequestHeaders() { /** * Add a new request header. + * * @param key the header key. * @param value the header value. * @return the new set of request headers. @@ -132,6 +141,7 @@ public Map addRequestHeader(String key, String value) { /** * Remove a request header. + * * @param key the header key to remove. * @return the new set of request headers. */ @@ -142,6 +152,7 @@ public Map removeRequestHeader(String key) { /** * Get the Twilio SendGrid host (api.sendgrid.com by default). + * * @return the Twilio SendGrid host. */ public String getHost() { @@ -150,6 +161,7 @@ public String getHost() { /** * Set the Twilio SendGrid host. + * * @param host the new Twilio SendGrid host. */ public void setHost(String host) { @@ -157,8 +169,8 @@ public void setHost(String host) { } /** - * Get the maximum number of retries on a rate limit response. - * The default is 5. + * Get the maximum number of retries on a rate limit response. The default is 5. + * * @return the number of retries on a rate limit. */ public int getRateLimitRetry() { @@ -167,6 +179,7 @@ public int getRateLimitRetry() { /** * Set the maximum number of retries on a rate limit response. + * * @param rateLimitRetry the maximum retry count. */ public void setRateLimitRetry(int rateLimitRetry) { @@ -174,9 +187,9 @@ public void setRateLimitRetry(int rateLimitRetry) { } /** - * Get the duration of time (in milliseconds) to sleep between - * consecutive rate limit retries. The Twilio SendGrid API enforces - * the rate limit to the second. The default value is 1.1 seconds. + * Get the duration of time (in milliseconds) to sleep between consecutive rate limit retries. The + * Twilio SendGrid API enforces the rate limit to the second. The default value is 1.1 seconds. + * * @return the sleep duration. */ public int getRateLimitSleep() { @@ -184,8 +197,8 @@ public int getRateLimitSleep() { } /** - * Set the duration of time (in milliseconds) to sleep between - * consecutive rate limit retries. + * Set the duration of time (in milliseconds) to sleep between consecutive rate limit retries. + * * @param rateLimitSleep the sleep duration. */ public void setRateLimitSleep(int rateLimitSleep) { @@ -194,6 +207,7 @@ public void setRateLimitSleep(int rateLimitSleep) { /** * Impersonate subuser for subsequent requests + * * @param subuser the subuser to be impersonated */ public void addImpersonateSubuser(String subuser) { @@ -211,14 +225,16 @@ public void removeImpersonateSubuser() { /** * Get the impersonated subuser or null if empty + * * @return the impersonated subuser */ public String getImpersonateSubuser() { - return this.subuser; + return this.subuser; } /** * Makes the call to the Twilio SendGrid API, override this method for testing. + * * @param request the request to make. * @return the response object. * @throws IOException in case of a network error. @@ -229,6 +245,7 @@ public Response makeCall(Request request) throws IOException { /** * Class api sets up the request to the Twilio SendGrid API, this is main interface. + * * @param request the request object. * @return the response object. * @throws IOException in case of a network error. @@ -250,9 +267,9 @@ public Response api(Request request) throws IOException { } /** - * Attempt an API call. This method executes the API call asynchronously - * on an internal thread pool. If the call is rate limited, the thread - * will retry up to the maximum configured time. + * Attempt an API call. This method executes the API call asynchronously on an internal thread + * pool. If the call is rate limited, the thread will retry up to the maximum configured time. + * * @param request the API request. */ public void attempt(Request request) { @@ -267,10 +284,10 @@ public void response(Response r) { } /** - * Attempt an API call. This method executes the API call asynchronously - * on an internal thread pool. If the call is rate limited, the thread - * will retry up to the maximum configured time. The supplied callback - * will be called in the event of an error, or a successful response. + * Attempt an API call. This method executes the API call asynchronously on an internal thread + * pool. If the call is rate limited, the thread will retry up to the maximum configured time. The + * supplied callback will be called in the event of an error, or a successful response. + * * @param request the API request. * @param callback the callback. */ diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index aa9583a2..5110e8ca 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -7,14 +7,14 @@ public interface SendGridAPI { /** * Initializes Twilio SendGrid - * + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys */ void initializeSendGrid(String apiKey); /** * Returns the library version - * + * * @return the library version. */ String getLibraryVersion(); @@ -28,20 +28,21 @@ public interface SendGridAPI { /** * Sets the version. - * + * * @param version the Twilio SendGrid version. */ void setVersion(String version); /** * Gets the request headers. + * * @return returns a map of request headers. */ Map getRequestHeaders(); /** * Adds a request headers. - * + * * @param key the key * @param value the value * @return returns a map of request headers. @@ -50,7 +51,7 @@ public interface SendGridAPI { /** * Removes a request headers. - * + * * @param key the key * @return returns a map of request headers. */ @@ -58,22 +59,21 @@ public interface SendGridAPI { /** * Gets the host. - * + * * @return returns the host. */ String getHost(); /** * Sets the host. - * + * * @param host the host to set */ void setHost(String host); /** - * Class makeCall makes the call to the Twilio SendGrid API, override this method for - * testing. - * + * Class makeCall makes the call to the Twilio SendGrid API, override this method for testing. + * * @param request the request * @return returns a response. * @throws IOException in case of network or marshal error. @@ -82,7 +82,7 @@ public interface SendGridAPI { /** * Class api sets up the request to the Twilio SendGrid API, this is main interface. - * + * * @param request the request * @return returns a response. * @throws IOException in case of network or marshal error. diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index 29dd2325..24eb19de 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -5,8 +5,13 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import com.sendgrid.helpers.mail.objects.*; - +import com.sendgrid.helpers.mail.objects.ASM; +import com.sendgrid.helpers.mail.objects.Attachments; +import com.sendgrid.helpers.mail.objects.Content; +import com.sendgrid.helpers.mail.objects.Email; +import com.sendgrid.helpers.mail.objects.MailSettings; +import com.sendgrid.helpers.mail.objects.Personalization; +import com.sendgrid.helpers.mail.objects.TrackingSettings; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -14,95 +19,106 @@ import java.util.Map; /** - * Class Mail builds an object that sends an email through Twilio SendGrid. - * Note that this object is not thread safe. + * Class Mail builds an object that sends an email through Twilio SendGrid. Note that this object is + * not thread safe. */ @JsonInclude(Include.NON_DEFAULT) public class Mail { /** The email's from field. */ - @JsonProperty("from") public Email from; + @JsonProperty("from") + public Email from; - /** The email's subject line. This is the global, or - * “message level”, subject of your email. This may - * be overridden by personalizations[x].subject. + /** + * The email's subject line. This is the global, or “message level”, subject of your email. This + * may be overridden by personalizations[x].subject. */ - @JsonProperty("subject") public String subject; + @JsonProperty("subject") + public String subject; - /** - * The email's personalization. Each object within - * personalizations can be thought of as an envelope - * - it defines who should receive an individual message - * and how that message should be handled. + /** + * The email's personalization. Each object within personalizations can be thought of as an + * envelope - it defines who should receive an individual message and how that message should be + * handled. */ - @JsonProperty("personalizations") public List personalization; + @JsonProperty("personalizations") + public List personalization; /** The email's content. */ - @JsonProperty("content") public List content; + @JsonProperty("content") + public List content; /** The email's attachments. */ - @JsonProperty("attachments") public List attachments; + @JsonProperty("attachments") + public List attachments; /** The email's template ID. */ - @JsonProperty("template_id") public String templateId; + @JsonProperty("template_id") + public String templateId; - /** - * The email's sections. An object of key/value pairs that - * define block sections of code to be used as substitutions. + /** + * The email's sections. An object of key/value pairs that define block sections of code to be + * used as substitutions. */ - @JsonProperty("sections") public Map sections; + @JsonProperty("sections") + public Map sections; /** The email's headers. */ - @JsonProperty("headers") public Map headers; + @JsonProperty("headers") + public Map headers; /** The email's categories. */ - @JsonProperty("categories") public List categories; - - /** - * The email's custom arguments. Values that are specific to - * the entire send that will be carried along with the email - * and its activity data. Substitutions will not be made on - * custom arguments, so any string that is entered into this - * parameter will be assumed to be the custom argument that - * you would like to be used. This parameter is overridden by - * personalizations[x].custom_args if that parameter has been - * defined. Total custom args size may not exceed 10,000 bytes. - */ - @JsonProperty("custom_args") public Map customArgs; - - /** - * A unix timestamp allowing you to specify when you want - * your email to be delivered. This may be overridden by - * the personalizations[x].send_at parameter. Scheduling - * more than 72 hours in advance is forbidden. - */ - @JsonProperty("send_at") public long sendAt; - - /** - * This ID represents a batch of emails to be sent at the - * same time. Including a batch_id in your request allows - * you include this email in that batch, and also enables - * you to cancel or pause the delivery of that batch. For - * more information, see https://sendgrid.com/docs/API_Reference/Web_API_v3/cancel_schedule_send. - */ - @JsonProperty("batch_id") public String batchId; + @JsonProperty("categories") + public List categories; + + /** + * The email's custom arguments. Values that are specific to the entire send that will be carried + * along with the email and its activity data. Substitutions will not be made on custom arguments, + * so any string that is entered into this parameter will be assumed to be the custom argument + * that you would like to be used. This parameter is overridden by personalizations[x].custom_args + * if that parameter has been defined. Total custom args size may not exceed 10,000 bytes. + */ + @JsonProperty("custom_args") + public Map customArgs; + + /** + * A unix timestamp allowing you to specify when you want your email to be delivered. This may be + * overridden by the personalizations[x].send_at parameter. Scheduling more than 72 hours in + * advance is forbidden. + */ + @JsonProperty("send_at") + public long sendAt; + + /** + * This ID represents a batch of emails to be sent at the same time. Including a batch_id in your + * request allows you include this email in that batch, and also enables you to cancel or pause + * the delivery of that batch. For more information, see https://sendgrid.com/docs/API_Reference/Web_API_v3/cancel_schedule_send. + */ + @JsonProperty("batch_id") + public String batchId; /** The email's unsubscribe handling object. */ - @JsonProperty("asm") public ASM asm; + @JsonProperty("asm") + public ASM asm; /** The email's IP pool name. */ - @JsonProperty("ip_pool_name") public String ipPoolId; + @JsonProperty("ip_pool_name") + public String ipPoolId; /** The email's mail settings. */ - @JsonProperty("mail_settings") public MailSettings mailSettings; + @JsonProperty("mail_settings") + public MailSettings mailSettings; /** The email's tracking settings. */ - @JsonProperty("tracking_settings") public TrackingSettings trackingSettings; + @JsonProperty("tracking_settings") + public TrackingSettings trackingSettings; /** The email's reply to address. */ - @JsonProperty("reply_to") public Email replyTo; + @JsonProperty("reply_to") + public Email replyTo; private static final ObjectMapper SORTED_MAPPER = new ObjectMapper(); + static { SORTED_MAPPER.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); } @@ -118,17 +134,17 @@ private List addToList(T element, List defaultList) { } } - private Map addToMap(K key, V value, Map defaultMap) { + private Map addToMap(K key, V value, Map defaultMap) { if (defaultMap != null) { defaultMap.put(key, value); return defaultMap; } else { - Map map = new HashMap(); + Map map = new HashMap(); map.put(key, value); return map; } } - + /** Construct a new Mail object. */ public Mail() { return; @@ -136,13 +152,13 @@ public Mail() { /** * Construct a new Mail object. + * * @param from the email's from address. * @param subject the email's subject line. * @param to the email's recipient. * @param content the email's content. */ - public Mail(Email from, String subject, Email to, Content content) - { + public Mail(Email from, String subject, Email to, Content content) { this.setFrom(from); this.setSubject(subject); Personalization personalization = new Personalization(); @@ -153,6 +169,7 @@ public Mail(Email from, String subject, Email to, Content content) /** * Get the email's from address. + * * @return the email's from address. */ @JsonProperty("from") @@ -162,6 +179,7 @@ public Email getFrom() { /** * Set the email's from address. + * * @param from the email's from address. */ public void setFrom(Email from) { @@ -170,6 +188,7 @@ public void setFrom(Email from) { /** * Get the email's subject line. + * * @return the email's subject line. */ @JsonProperty("subject") @@ -179,6 +198,7 @@ public String getSubject() { /** * Set the email's subject line. + * * @param subject the email's subject line. */ public void setSubject(String subject) { @@ -187,6 +207,7 @@ public void setSubject(String subject) { /** * Get the email's unsubscribe handling object (ASM). + * * @return the email's ASM. */ @JsonProperty("asm") @@ -196,6 +217,7 @@ public ASM getASM() { /** * Set the email's unsubscribe handling object (ASM). + * * @param asm the email's ASM. */ public void setASM(ASM asm) { @@ -203,8 +225,9 @@ public void setASM(ASM asm) { } /** - * Get the email's personalizations. Content added to the returned - * list will be included when sent. + * Get the email's personalizations. Content added to the returned list will be included when + * sent. + * * @return the email's personalizations. */ @JsonProperty("personalizations") @@ -214,6 +237,7 @@ public List getPersonalization() { /** * Add a personalizaton to the email. + * * @param personalization a personalization. */ public void addPersonalization(Personalization personalization) { @@ -221,8 +245,8 @@ public void addPersonalization(Personalization personalization) { } /** - * Get the email's content. Content added to the returned list - * will be included when sent. + * Get the email's content. Content added to the returned list will be included when sent. + * * @return the email's content. */ @JsonProperty("content") @@ -232,6 +256,7 @@ public List getContent() { /** * Add content to this email. + * * @param content content to add to this email. */ public void addContent(Content content) { @@ -242,8 +267,9 @@ public void addContent(Content content) { } /** - * Get the email's attachments. Attachments added to the returned - * list will be included when sent. + * Get the email's attachments. Attachments added to the returned list will be included when + * sent. + * * @return the email's attachments. */ @JsonProperty("attachments") @@ -253,6 +279,7 @@ public List getAttachments() { /** * Add attachments to the email. + * * @param attachments attachments to add. */ public void addAttachments(Attachments attachments) { @@ -267,6 +294,7 @@ public void addAttachments(Attachments attachments) { /** * Get the email's template ID. + * * @return the email's template ID. */ @JsonProperty("template_id") @@ -276,6 +304,7 @@ public String getTemplateId() { /** * Set the email's template ID. + * * @param templateId the email's template ID. */ public void setTemplateId(String templateId) { @@ -283,17 +312,18 @@ public void setTemplateId(String templateId) { } /** - * Get the email's sections. Sections added to the returned list - * will be included when sent. + * Get the email's sections. Sections added to the returned list will be included when sent. + * * @return the email's sections. */ @JsonProperty("sections") - public Map getSections() { + public Map getSections() { return sections; } /** * Add a section to the email. + * * @param key the section's key. * @param value the section's value. */ @@ -302,17 +332,18 @@ public void addSection(String key, String value) { } /** - * Get the email's headers. Headers added to the returned list - * will be included when sent. + * Get the email's headers. Headers added to the returned list will be included when sent. + * * @return the email's headers. */ @JsonProperty("headers") - public Map getHeaders() { + public Map getHeaders() { return headers; } /** * Add a header to the email. + * * @param key the header's key. * @param value the header's value. */ @@ -321,8 +352,8 @@ public void addHeader(String key, String value) { } /** - * Get the email's categories. Categories added to the returned list - * will be included when sent. + * Get the email's categories. Categories added to the returned list will be included when sent. + * * @return the email's categories. */ @JsonProperty("categories") @@ -332,6 +363,7 @@ public List getCategories() { /** * Add a category to the email. + * * @param category the category. */ public void addCategory(String category) { @@ -339,17 +371,19 @@ public void addCategory(String category) { } /** - * Get the email's custom arguments. Custom arguments added to the returned list - * will be included when sent. + * Get the email's custom arguments. Custom arguments added to the returned list will be included + * when sent. + * * @return the email's custom arguments. */ @JsonProperty("custom_args") - public Map getCustomArgs() { + public Map getCustomArgs() { return customArgs; } /** * Add a custom argument to the email. + * * @param key argument's key. * @param value the argument's value. */ @@ -359,6 +393,7 @@ public void addCustomArg(String key, String value) { /** * Get the email's send at time (Unix timestamp). + * * @return the email's send at time. */ @JsonProperty("send_at") @@ -368,6 +403,7 @@ public long sendAt() { /** * Set the email's send at time (Unix timestamp). + * * @param sendAt the send at time. */ public void setSendAt(long sendAt) { @@ -376,6 +412,7 @@ public void setSendAt(long sendAt) { /** * Get the email's batch ID. + * * @return the batch ID. */ @JsonProperty("batch_id") @@ -385,6 +422,7 @@ public String getBatchId() { /** * Set the email's batch ID. + * * @param batchId the batch ID. */ public void setBatchId(String batchId) { @@ -393,6 +431,7 @@ public void setBatchId(String batchId) { /** * Get the email's IP pool ID. + * * @return the IP pool ID. */ @JsonProperty("ip_pool_name") @@ -402,6 +441,7 @@ public String getIpPoolId() { /** * Set the email's IP pool ID. + * * @param ipPoolId the IP pool ID. */ public void setIpPoolId(String ipPoolId) { @@ -410,6 +450,7 @@ public void setIpPoolId(String ipPoolId) { /** * Get the email's settings. + * * @return the settings. */ @JsonProperty("mail_settings") @@ -419,6 +460,7 @@ public MailSettings getMailSettings() { /** * Set the email's settings. + * * @param mailSettings the settings. */ public void setMailSettings(MailSettings mailSettings) { @@ -427,6 +469,7 @@ public void setMailSettings(MailSettings mailSettings) { /** * Get the email's tracking settings. + * * @return the tracking settings. */ @JsonProperty("tracking_settings") @@ -436,6 +479,7 @@ public TrackingSettings getTrackingSettings() { /** * Set the email's tracking settings. + * * @param trackingSettings the tracking settings. */ public void setTrackingSettings(TrackingSettings trackingSettings) { @@ -444,6 +488,7 @@ public void setTrackingSettings(TrackingSettings trackingSettings) { /** * Get the email's reply to address. + * * @return the reply to address. */ @JsonProperty("reply_to") @@ -453,6 +498,7 @@ public Email getReplyto() { /** * Set the email's reply to address. + * * @param replyTo the reply to address. */ public void setReplyTo(Email replyTo) { @@ -461,6 +507,7 @@ public void setReplyTo(Email replyTo) { /** * Create a string represenation of the Mail object JSON. + * * @return a JSON string. * @throws IOException in case of a JSON marshal error. */ @@ -475,6 +522,7 @@ public String build() throws IOException { /** * Create a string represenation of the Mail object JSON and pretty print it. + * * @return a pretty JSON string. * @throws IOException in case of a JSON marshal error. */ @@ -505,55 +553,75 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Mail other = (Mail) obj; if (batchId == null) { - if (other.batchId != null) + if (other.batchId != null) { return false; - } else if (!batchId.equals(other.batchId)) + } + } else if (!batchId.equals(other.batchId)) { return false; + } if (categories == null) { - if (other.categories != null) + if (other.categories != null) { return false; - } else if (!categories.equals(other.categories)) + } + } else if (!categories.equals(other.categories)) { return false; + } if (customArgs == null) { - if (other.customArgs != null) + if (other.customArgs != null) { return false; - } else if (!customArgs.equals(other.customArgs)) + } + } else if (!customArgs.equals(other.customArgs)) { return false; + } if (headers == null) { - if (other.headers != null) + if (other.headers != null) { return false; - } else if (!headers.equals(other.headers)) + } + } else if (!headers.equals(other.headers)) { return false; + } if (ipPoolId == null) { - if (other.ipPoolId != null) + if (other.ipPoolId != null) { return false; - } else if (!ipPoolId.equals(other.ipPoolId)) + } + } else if (!ipPoolId.equals(other.ipPoolId)) { return false; + } if (sections == null) { - if (other.sections != null) + if (other.sections != null) { return false; - } else if (!sections.equals(other.sections)) + } + } else if (!sections.equals(other.sections)) { return false; - if (sendAt != other.sendAt) + } + if (sendAt != other.sendAt) { return false; + } if (subject == null) { - if (other.subject != null) + if (other.subject != null) { return false; - } else if (!subject.equals(other.subject)) + } + } else if (!subject.equals(other.subject)) { return false; + } if (templateId == null) { - if (other.templateId != null) + if (other.templateId != null) { return false; - } else if (!templateId.equals(other.templateId)) + } + } else if (!templateId.equals(other.templateId)) { return false; + } return true; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java index a34895f2..44ce4228 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java @@ -3,28 +3,31 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; - import java.util.Arrays; @JsonInclude(Include.NON_DEFAULT) public class ASM { - @JsonProperty("group_id") private int groupId; - @JsonProperty("groups_to_display") private int[] groupsToDisplay; - + + @JsonProperty("group_id") + private int groupId; + + @JsonProperty("groups_to_display") + private int[] groupsToDisplay; + @JsonProperty("group_id") public int getGroupId() { return groupId; } - + public void setGroupId(int groupId) { this.groupId = groupId; } - + @JsonProperty("groups_to_display") public int[] getGroupsToDisplay() { return groupsToDisplay; } - + public void setGroupsToDisplay(int[] groupsToDisplay) { this.groupsToDisplay = Arrays.copyOf(groupsToDisplay, groupsToDisplay.length); } @@ -40,17 +43,22 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } ASM other = (ASM) obj; - if (groupId != other.groupId) + if (groupId != other.groupId) { return false; - if (!Arrays.equals(groupsToDisplay, other.groupsToDisplay)) + } + if (!Arrays.equals(groupsToDisplay, other.groupsToDisplay)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 969c1630..9a3ff1b4 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -4,68 +4,74 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; import org.apache.commons.codec.binary.Base64; -import java.io.*; - /** * An attachment object. */ @JsonInclude(Include.NON_DEFAULT) public class Attachments { - + /** The attachment content. */ - @JsonProperty("content") private String content; + @JsonProperty("content") + private String content; - /** - * The mime type of the content you are attaching. For example, - * “text/plain” or “text/html”. + /** + * The mime type of the content you are attaching. For example, “text/plain” or “text/html”. */ - @JsonProperty("type") private String type; + @JsonProperty("type") + private String type; /** The attachment file name. */ - @JsonProperty("filename") private String filename; + @JsonProperty("filename") + private String filename; /** The attachment disposition. */ - @JsonProperty("disposition") private String disposition; + @JsonProperty("disposition") + private String disposition; - /** - * The attachment content ID. This is used when the - * disposition is set to “inline” and the attachment - * is an image, allowing the file to be displayed within - * the body of your email. + /** + * The attachment content ID. This is used when the disposition is set to “inline” and the + * attachment is an image, allowing the file to be displayed within the body of your email. */ - @JsonProperty("content_id") private String contentId; + @JsonProperty("content_id") + private String contentId; /** * Get the attachment's content. + * * @return the content. */ - @JsonProperty("content") + @JsonProperty("content") public String getContent() { return content; } /** * Set the attachment's content. + * * @param content the content. */ public void setContent(String content) { this.content = content; } - + /** - * Get the mime type of the content you are attaching. For example, - * “text/plain” or “text/html”. + * Get the mime type of the content you are attaching. For example, “text/plain” or “text/html”. + * * @return the mime type. */ - @JsonProperty("type") + @JsonProperty("type") public String getType() { return type; } - + /** * Set the mime type of the content. + * * @param type the mime type. */ public void setType(String type) { @@ -74,38 +80,39 @@ public void setType(String type) { /** * Get the filename for this attachment. + * * @return the file name. */ - @JsonProperty("filename") + @JsonProperty("filename") public String getFilename() { return filename; } - + /** * Set the filename for this attachment. + * * @param filename the filename. */ public void setFilename(String filename) { this.filename = filename; } - + /** - * Get the content-disposition of the attachment specifying - * how you would like the attachment to be displayed. - * For example, “inline” results in the attached file - * being displayed automatically within the message - * while “attachment” results in the attached file - * requiring some action to be taken before it is - * displayed (e.g. opening or downloading the file). + * Get the content-disposition of the attachment specifying how you would like the attachment to + * be displayed. For example, “inline” results in the attached file being displayed automatically + * within the message while “attachment” results in the attached file requiring some action to be + * taken before it is displayed (e.g. opening or downloading the file). + * * @return the disposition. */ - @JsonProperty("disposition") + @JsonProperty("disposition") public String getDisposition() { return disposition; } - + /** * Set the content-disposition of the attachment. + * * @param disposition the disposition. */ public void setDisposition(String disposition) { @@ -113,19 +120,19 @@ public void setDisposition(String disposition) { } /** - * Get the attachment content ID. This is used when the - * disposition is set to “inline” and the attachment - * is an image, allowing the file to be displayed within - * the body of your email. + * Get the attachment content ID. This is used when the disposition is set to “inline” and the + * attachment is an image, allowing the file to be displayed within the body of your email. + * * @return the content ID. */ - @JsonProperty("content_id") + @JsonProperty("content_id") public String getContentId() { return contentId; } - + /** * Set the content ID. + * * @param contentId the content ID. */ public void setContentId(String contentId) { @@ -148,6 +155,7 @@ public static class Builder { /** * Construct a new attachment builder. + * * @param fileName the filename to include. * @param content an input stream for the content. * @throws IllegalArgumentException in case either the fileName or the content is null. @@ -167,6 +175,7 @@ public Builder(String fileName, InputStream content) { /** * Construct a new attachment builder. + * * @param fileName the filename to include. * @param content an input string for the content. * @throws IllegalArgumentException in case either the fileName or the content is null. @@ -187,7 +196,7 @@ public Builder(String fileName, String content) { private String encodeToBase64(InputStream content) { int read = 0; byte[] bytes = new byte[BYTE_BUFFER_SIZE]; - try(ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { while ((read = content.read(bytes)) != -1) { baos.write(bytes, 0, read); } @@ -200,6 +209,7 @@ private String encodeToBase64(InputStream content) { /** * Set the type of this attachment builder. + * * @param type the attachment type. */ public Builder withType(String type) { @@ -209,6 +219,7 @@ public Builder withType(String type) { /** * Set the disposition of this attachment builder. + * * @param disposition the disposition. */ public Builder withDisposition(String disposition) { @@ -218,6 +229,7 @@ public Builder withDisposition(String disposition) { /** * Set the content ID of this attachment builder. + * * @param contentId the content ID. */ public Builder withContentId(String contentId) { @@ -253,38 +265,51 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Attachments other = (Attachments) obj; if (content == null) { - if (other.content != null) + if (other.content != null) { return false; - } else if (!content.equals(other.content)) + } + } else if (!content.equals(other.content)) { return false; + } if (contentId == null) { - if (other.contentId != null) + if (other.contentId != null) { return false; - } else if (!contentId.equals(other.contentId)) + } + } else if (!contentId.equals(other.contentId)) { return false; + } if (disposition == null) { - if (other.disposition != null) + if (other.disposition != null) { return false; - } else if (!disposition.equals(other.disposition)) + } + } else if (!disposition.equals(other.disposition)) { return false; + } if (filename == null) { - if (other.filename != null) + if (other.filename != null) { return false; - } else if (!filename.equals(other.filename)) + } + } else if (!filename.equals(other.filename)) { return false; + } if (type == null) { - if (other.type != null) + if (other.type != null) { return false; - } else if (!type.equals(other.type)) + } + } else if (!type.equals(other.type)) { return false; + } return true; } } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index f43803f1..68d7a535 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -5,14 +5,17 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * This object allows you to have a blind carbon copy - * automatically sent to the specified email address - * for every email that is sent. + * This object allows you to have a blind carbon copy automatically sent to the specified email + * address for every email that is sent. */ @JsonInclude(Include.NON_EMPTY) public class BccSettings { - @JsonProperty("enable") private boolean enable; - @JsonProperty("email") private String email; + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("email") + private String email; @JsonProperty("enable") public boolean getEnable() { @@ -43,20 +46,26 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } BccSettings other = (BccSettings) obj; if (email == null) { - if (other.email != null) + if (other.email != null) { return false; - } else if (!email.equals(other.email)) + } + } else if (!email.equals(other.email)) { return false; - if (enable != other.enable) + } + if (enable != other.enable) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index ee12fc07..13ce3f13 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -5,28 +5,32 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * Settings to determine how you would like to track the - * metrics of how your recipients interact with your email. + * Settings to determine how you would like to track the metrics of how your recipients interact + * with your email. */ @JsonInclude(Include.NON_EMPTY) public class ClickTrackingSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("enable_text") private boolean enableText; - + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("enable_text") + private boolean enableText; + @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("enable_text") public boolean getEnableText() { return enableText; - } - + } + public void setEnableText(boolean enableText) { this.enableText = enableText; } @@ -42,17 +46,22 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } ClickTrackingSetting other = (ClickTrackingSetting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; - if (enableText != other.enableText) + } + if (enableText != other.enableText) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index 0a7a6557..329cf285 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -3,22 +3,21 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; - -import java.util.Arrays; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.regex.Pattern; -import java.lang.IllegalArgumentException; /** - * An object in which you may specify the content of your email. + * An object in which you may specify the content of your email. */ @JsonInclude(Include.NON_DEFAULT) public class Content { - @JsonProperty("type") private String type; - @JsonProperty("value") private String value; + + @JsonProperty("type") + private String type; + + @JsonProperty("value") + private String value; public Content() { return; @@ -59,34 +58,42 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Content other = (Content) obj; if (type == null) { - if (other.type != null) + if (other.type != null) { return false; - } else if (!type.equals(other.type)) + } + } else if (!type.equals(other.type)) { return false; + } if (value == null) { - if (other.value != null) + if (other.value != null) { return false; - } else if (!value.equals(other.value)) + } + } else if (!value.equals(other.value)) { return false; + } return true; } } class ContentVerifier { + private static final List FORBIDDEN_PATTERNS = Collections.singletonList( - Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") + Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") ); static void verifyContent(String content) { - for (Pattern pattern: FORBIDDEN_PATTERNS) { + for (Pattern pattern : FORBIDDEN_PATTERNS) { if (pattern.matcher(content).matches()) { throw new IllegalArgumentException("Found a Forbidden Pattern in the content of the email"); } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java index 537b27b6..37e8fbcf 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -6,8 +6,12 @@ @JsonInclude(Include.NON_DEFAULT) public class Email { - @JsonProperty("name") private String name; - @JsonProperty("email") private String email; + + @JsonProperty("name") + private String name; + + @JsonProperty("email") + private String email; public Email() { return; @@ -51,23 +55,30 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Email other = (Email) obj; if (email == null) { - if (other.email != null) + if (other.email != null) { return false; - } else if (!email.equals(other.email)) + } + } else if (!email.equals(other.email)) { return false; + } if (name == null) { - if (other.name != null) + if (other.name != null) { return false; - } else if (!name.equals(other.name)) + } + } else if (!name.equals(other.name)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index 905436ed..6ec12eb2 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -5,15 +5,20 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * An object representing the default footer - * that you would like included on every email. + * An object representing the default footer that you would like included on every email. */ @JsonInclude(Include.NON_EMPTY) public class FooterSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("text") private String text; - @JsonProperty("html") private String html; - + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("text") + private String text; + + @JsonProperty("html") + private String html; + @JsonProperty("enable") public boolean getEnable() { return enable; @@ -22,16 +27,16 @@ public boolean getEnable() { public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("text") public String getText() { return text; } - + public void setText(String text) { this.text = text; } - + @JsonProperty("html") public String getHtml() { return html; @@ -53,25 +58,33 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } FooterSetting other = (FooterSetting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; + } if (html == null) { - if (other.html != null) + if (other.html != null) { return false; - } else if (!html.equals(other.html)) + } + } else if (!html.equals(other.html)) { return false; + } if (text == null) { - if (other.text != null) + if (other.text != null) { return false; - } else if (!text.equals(other.text)) + } + } else if (!text.equals(other.text)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index a01d4df6..e8f12f70 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -9,22 +9,34 @@ */ @JsonInclude(Include.NON_EMPTY) public class GoogleAnalyticsSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("utm_source") private String campaignSource; - @JsonProperty("utm_term") private String campaignTerm; - @JsonProperty("utm_content") private String campaignContent; - @JsonProperty("utm_campaign") private String campaignName; - @JsonProperty("utm_medium") private String campaignMedium; - + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("utm_source") + private String campaignSource; + + @JsonProperty("utm_term") + private String campaignTerm; + + @JsonProperty("utm_content") + private String campaignContent; + + @JsonProperty("utm_campaign") + private String campaignName; + + @JsonProperty("utm_medium") + private String campaignMedium; + @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("utm_source") public String getCampaignSource() { return campaignSource; @@ -33,7 +45,7 @@ public String getCampaignSource() { public void setCampaignSource(String campaignSource) { this.campaignSource = campaignSource; } - + @JsonProperty("utm_term") public String getCampaignTerm() { return campaignTerm; @@ -42,30 +54,30 @@ public String getCampaignTerm() { public void setCampaignTerm(String campaignTerm) { this.campaignTerm = campaignTerm; } - + @JsonProperty("utm_content") public String getCampaignContent() { return campaignContent; } - + public void setCampaignContent(String campaignContent) { this.campaignContent = campaignContent; } - + @JsonProperty("utm_campaign") public String getCampaignName() { return campaignName; } - + public void setCampaignName(String campaignName) { this.campaignName = campaignName; } - + @JsonProperty("utm_medium") public String getCampaignMedium() { return campaignMedium; } - + public void setCampaignMedium(String campaignMedium) { this.campaignMedium = campaignMedium; } @@ -85,40 +97,54 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } GoogleAnalyticsSetting other = (GoogleAnalyticsSetting) obj; if (campaignContent == null) { - if (other.campaignContent != null) + if (other.campaignContent != null) { return false; - } else if (!campaignContent.equals(other.campaignContent)) + } + } else if (!campaignContent.equals(other.campaignContent)) { return false; + } if (campaignMedium == null) { - if (other.campaignMedium != null) + if (other.campaignMedium != null) { return false; - } else if (!campaignMedium.equals(other.campaignMedium)) + } + } else if (!campaignMedium.equals(other.campaignMedium)) { return false; + } if (campaignName == null) { - if (other.campaignName != null) + if (other.campaignName != null) { return false; - } else if (!campaignName.equals(other.campaignName)) + } + } else if (!campaignName.equals(other.campaignName)) { return false; + } if (campaignSource == null) { - if (other.campaignSource != null) + if (other.campaignSource != null) { return false; - } else if (!campaignSource.equals(other.campaignSource)) + } + } else if (!campaignSource.equals(other.campaignSource)) { return false; + } if (campaignTerm == null) { - if (other.campaignTerm != null) + if (other.campaignTerm != null) { return false; - } else if (!campaignTerm.equals(other.campaignTerm)) + } + } else if (!campaignTerm.equals(other.campaignTerm)) { return false; - if (enable != other.enable) + } + if (enable != other.enable) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index 5175642c..bd239880 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -5,18 +5,27 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * An object representing a collection of different mail - * settings that you can use to specify how you would - * like this email to be handled. + * An object representing a collection of different mail settings that you can use to specify how + * you would like this email to be handled. */ @JsonInclude(Include.NON_DEFAULT) public class MailSettings { - @JsonProperty("bcc") private BccSettings bccSettings; - @JsonProperty("bypass_list_management") private Setting bypassListManagement; - @JsonProperty("footer") private FooterSetting footerSetting; - @JsonProperty("sandbox_mode") private Setting sandBoxMode; - @JsonProperty("spam_check") private SpamCheckSetting spamCheckSetting; + + @JsonProperty("bcc") + private BccSettings bccSettings; + + @JsonProperty("bypass_list_management") + private Setting bypassListManagement; + + @JsonProperty("footer") + private FooterSetting footerSetting; + + @JsonProperty("sandbox_mode") + private Setting sandBoxMode; + + @JsonProperty("spam_check") + private SpamCheckSetting spamCheckSetting; @JsonProperty("bcc") public BccSettings getBccSettings() { @@ -25,6 +34,7 @@ public BccSettings getBccSettings() { /** * Set the BCC settings. + * * @param bccSettings the BCC settings. */ public void setBccSettings(BccSettings bccSettings) { @@ -32,11 +42,10 @@ public void setBccSettings(BccSettings bccSettings) { } /** - * A setting that allows you to bypass all unsubscribe - * groups and suppressions to ensure that the email is - * delivered to every single recipient. This should only - * be used in emergencies when it is absolutely necessary - * that every recipient receives your email. + * A setting that allows you to bypass all unsubscribe groups and suppressions to ensure that the + * email is delivered to every single recipient. This should only be used in emergencies when it + * is absolutely necessary that every recipient receives your email. + * * @return the bypass list setting. */ @@ -51,6 +60,7 @@ public void setBypassListManagement(Setting bypassListManagement) { /** * Get the the footer settings that you would like included on every email. + * * @return the setting. */ @@ -61,6 +71,7 @@ public FooterSetting getFooterSetting() { /** * Set the the footer settings that you would like included on every email. + * * @param footerSetting the setting. */ public void setFooterSetting(FooterSetting footerSetting) { @@ -68,8 +79,9 @@ public void setFooterSetting(FooterSetting footerSetting) { } /** - * Get sandbox mode. This allows you to send a test email to - * ensure that your request body is valid and formatted correctly. + * Get sandbox mode. This allows you to send a test email to ensure that your request body is + * valid and formatted correctly. + * * @return the sandbox mode setting. */ @@ -80,6 +92,7 @@ public Setting getSandBoxMode() { /** * Set sandbox mode. + * * @param sandBoxMode the sandbox mode setting. */ @JsonProperty("sandbox_mode") @@ -88,8 +101,8 @@ public void setSandboxMode(Setting sandBoxMode) { } /** - * Get the spam check setting. This allows you to test the - * content of your email for spam. + * Get the spam check setting. This allows you to test the content of your email for spam. + * * @return the spam check setting. */ @@ -99,8 +112,8 @@ public SpamCheckSetting getSpamCheck() { } /** - * Set the spam check setting. This allows you to test the - * content of your email for spam. + * Set the spam check setting. This allows you to test the content of your email for spam. + * * @param spamCheckSetting the spam check setting. */ @@ -113,7 +126,8 @@ public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((bccSettings == null) ? 0 : bccSettings.hashCode()); - result = prime * result + ((bypassListManagement == null) ? 0 : bypassListManagement.hashCode()); + result = + prime * result + ((bypassListManagement == null) ? 0 : bypassListManagement.hashCode()); result = prime * result + ((footerSetting == null) ? 0 : footerSetting.hashCode()); result = prime * result + ((sandBoxMode == null) ? 0 : sandBoxMode.hashCode()); result = prime * result + ((spamCheckSetting == null) ? 0 : spamCheckSetting.hashCode()); @@ -122,38 +136,51 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } MailSettings other = (MailSettings) obj; if (bccSettings == null) { - if (other.bccSettings != null) + if (other.bccSettings != null) { return false; - } else if (!bccSettings.equals(other.bccSettings)) + } + } else if (!bccSettings.equals(other.bccSettings)) { return false; + } if (bypassListManagement == null) { - if (other.bypassListManagement != null) + if (other.bypassListManagement != null) { return false; - } else if (!bypassListManagement.equals(other.bypassListManagement)) + } + } else if (!bypassListManagement.equals(other.bypassListManagement)) { return false; + } if (footerSetting == null) { - if (other.footerSetting != null) + if (other.footerSetting != null) { return false; - } else if (!footerSetting.equals(other.footerSetting)) + } + } else if (!footerSetting.equals(other.footerSetting)) { return false; + } if (sandBoxMode == null) { - if (other.sandBoxMode != null) + if (other.sandBoxMode != null) { return false; - } else if (!sandBoxMode.equals(other.sandBoxMode)) + } + } else if (!sandBoxMode.equals(other.sandBoxMode)) { return false; + } if (spamCheckSetting == null) { - if (other.spamCheckSetting != null) + if (other.spamCheckSetting != null) { return false; - } else if (!spamCheckSetting.equals(other.spamCheckSetting)) + } + } else if (!spamCheckSetting.equals(other.spamCheckSetting)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index e4497d9c..a44cb8d8 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -5,30 +5,33 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * An open tracking settings object. This allows you to track - * whether the email was opened or not, but including a single - * pixel image in the body of the content. When the pixel is - * loaded, we can log that the email was opened. + * An open tracking settings object. This allows you to track whether the email was opened or not, + * but including a single pixel image in the body of the content. When the pixel is loaded, we can + * log that the email was opened. */ @JsonInclude(Include.NON_EMPTY) public class OpenTrackingSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("substitution_tag") private String substitutionTag; - + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("substitution_tag") + private String substitutionTag; + @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("substitution_tag") public String getSubstitutionTag() { return substitutionTag; } - + public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; } @@ -44,21 +47,27 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } OpenTrackingSetting other = (OpenTrackingSetting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; + } if (substitutionTag == null) { - if (other.substitutionTag != null) + if (other.substitutionTag != null) { return false; - } else if (!substitutionTag.equals(other.substitutionTag)) + } + } else if (!substitutionTag.equals(other.substitutionTag)) { return false; + } return true; } - + } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 9a91db5d..82cb3de3 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -3,29 +3,47 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; - -import java.util.Collections; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @JsonInclude(Include.NON_DEFAULT) public class Personalization { - @JsonProperty("to") private List tos; - @JsonProperty("cc") private List ccs; - @JsonProperty("bcc") private List bccs; - @JsonProperty("subject") private String subject; - @JsonProperty("headers") private Map headers; - @JsonProperty("substitutions") private Map substitutions; - @JsonProperty("custom_args") private Map customArgs; - @JsonProperty("dynamic_template_data") private Map dynamicTemplateData; - @JsonProperty("send_at") private long sendAt; + + @JsonProperty("to") + private List tos; + + @JsonProperty("cc") + private List ccs; + + @JsonProperty("bcc") + private List bccs; + + @JsonProperty("subject") + private String subject; + + @JsonProperty("headers") + private Map headers; + + @JsonProperty("substitutions") + private Map substitutions; + + @JsonProperty("custom_args") + private Map customArgs; + + @JsonProperty("dynamic_template_data") + private Map dynamicTemplateData; + + @JsonProperty("send_at") + private long sendAt; @JsonProperty("to") public List getTos() { - if(tos == null) - return Collections.emptyList(); + if (tos == null) { + return Collections.emptyList(); + } return tos; } @@ -43,8 +61,9 @@ public void addTo(Email email) { @JsonProperty("cc") public List getCcs() { - if(ccs == null) - return Collections.emptyList(); + if (ccs == null) { + return Collections.emptyList(); + } return ccs; } @@ -62,8 +81,9 @@ public void addCc(Email email) { @JsonProperty("bcc") public List getBccs() { - if(bccs == null) - return Collections.emptyList(); + if (bccs == null) { + return Collections.emptyList(); + } return bccs; } @@ -89,15 +109,16 @@ public void setSubject(String subject) { } @JsonProperty("headers") - public Map getHeaders() { - if(headers == null) - return Collections.emptyMap(); + public Map getHeaders() { + if (headers == null) { + return Collections.emptyMap(); + } return headers; } public void addHeader(String key, String value) { if (headers == null) { - headers = new HashMap(); + headers = new HashMap(); headers.put(key, value); } else { headers.put(key, value); @@ -105,15 +126,16 @@ public void addHeader(String key, String value) { } @JsonProperty("substitutions") - public Map getSubstitutions() { - if(substitutions == null) - return Collections.emptyMap(); + public Map getSubstitutions() { + if (substitutions == null) { + return Collections.emptyMap(); + } return substitutions; } public void addSubstitution(String key, String value) { if (substitutions == null) { - substitutions = new HashMap(); + substitutions = new HashMap(); substitutions.put(key, value); } else { substitutions.put(key, value); @@ -121,15 +143,16 @@ public void addSubstitution(String key, String value) { } @JsonProperty("custom_args") - public Map getCustomArgs() { - if(customArgs == null) - return Collections.emptyMap(); + public Map getCustomArgs() { + if (customArgs == null) { + return Collections.emptyMap(); + } return customArgs; } public void addCustomArg(String key, String value) { if (customArgs == null) { - customArgs = new HashMap(); + customArgs = new HashMap(); customArgs.put(key, value); } else { customArgs.put(key, value); @@ -146,14 +169,14 @@ public void setSendAt(long sendAt) { } @JsonProperty("dynamic_template_data") - public Map getDynamicTemplateData() { + public Map getDynamicTemplateData() { return dynamicTemplateData == null - ? Collections.emptyMap() : dynamicTemplateData; + ? Collections.emptyMap() : dynamicTemplateData; } public void addDynamicTemplateData(String key, Object value) { if (dynamicTemplateData == null) { - dynamicTemplateData = new HashMap(); + dynamicTemplateData = new HashMap(); } dynamicTemplateData.put(key, value); } @@ -175,50 +198,68 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Personalization other = (Personalization) obj; if (bccs == null) { - if (other.bccs != null) + if (other.bccs != null) { return false; - } else if (!bccs.equals(other.bccs)) + } + } else if (!bccs.equals(other.bccs)) { return false; + } if (ccs == null) { - if (other.ccs != null) + if (other.ccs != null) { return false; - } else if (!ccs.equals(other.ccs)) + } + } else if (!ccs.equals(other.ccs)) { return false; + } if (customArgs == null) { - if (other.customArgs != null) + if (other.customArgs != null) { return false; - } else if (!customArgs.equals(other.customArgs)) + } + } else if (!customArgs.equals(other.customArgs)) { return false; + } if (headers == null) { - if (other.headers != null) + if (other.headers != null) { return false; - } else if (!headers.equals(other.headers)) + } + } else if (!headers.equals(other.headers)) { return false; - if (sendAt != other.sendAt) + } + if (sendAt != other.sendAt) { return false; + } if (subject == null) { - if (other.subject != null) + if (other.subject != null) { return false; - } else if (!subject.equals(other.subject)) + } + } else if (!subject.equals(other.subject)) { return false; + } if (substitutions == null) { - if (other.substitutions != null) + if (other.substitutions != null) { return false; - } else if (!substitutions.equals(other.substitutions)) + } + } else if (!substitutions.equals(other.substitutions)) { return false; + } if (tos == null) { - if (other.tos != null) + if (other.tos != null) { return false; - } else if (!tos.equals(other.tos)) + } + } else if (!tos.equals(other.tos)) { return false; + } return true; } } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 45bef3bb..84a26b0f 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -6,7 +6,9 @@ @JsonInclude(Include.NON_DEFAULT) public class Setting { - @JsonProperty("enable") private boolean enable; + + @JsonProperty("enable") + private boolean enable; @JsonProperty("enable") public boolean getEnable() { @@ -27,15 +29,19 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Setting other = (Setting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index d2cd79c1..b0939bdb 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -5,38 +5,43 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * A setting object that allows you to test the content of - * your email for spam. + * A setting object that allows you to test the content of your email for spam. */ @JsonInclude(Include.NON_EMPTY) public class SpamCheckSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("threshold") private int spamThreshold; - @JsonProperty("post_to_url") private String postToUrl; + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("threshold") + private int spamThreshold; + + @JsonProperty("post_to_url") + private String postToUrl; @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("threshold") public int getSpamThreshold() { return spamThreshold; } - + public void setSpamThreshold(int spamThreshold) { this.spamThreshold = spamThreshold; } - + @JsonProperty("post_to_url") public String getPostToUrl() { return postToUrl; } - + public void setPostToUrl(String postToUrl) { this.postToUrl = postToUrl; } @@ -53,22 +58,29 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } SpamCheckSetting other = (SpamCheckSetting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; + } if (postToUrl == null) { - if (other.postToUrl != null) + if (other.postToUrl != null) { return false; - } else if (!postToUrl.equals(other.postToUrl)) + } + } else if (!postToUrl.equals(other.postToUrl)) { return false; - if (spamThreshold != other.spamThreshold) + } + if (spamThreshold != other.spamThreshold) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index 6c438cc9..fe0f102e 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -5,50 +5,56 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * A subscription tracking setting object. Subscription tracking - * allows you to insert a subscription management link at the - * bottom of the text and html bodies of your email. If you - * would like to specify the location of the link within your - * email, you may use the substitution_tag. + * A subscription tracking setting object. Subscription tracking allows you to insert a subscription + * management link at the bottom of the text and html bodies of your email. If you would like to + * specify the location of the link within your email, you may use the substitution_tag. */ @JsonInclude(Include.NON_EMPTY) public class SubscriptionTrackingSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("text") private String text; - @JsonProperty("html") private String html; - @JsonProperty("substitution_tag") private String substitutionTag; - + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("text") + private String text; + + @JsonProperty("html") + private String html; + + @JsonProperty("substitution_tag") + private String substitutionTag; + @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("text") public String getText() { return text; } - + public void setText(String text) { this.text = text; } - + @JsonProperty("html") public String getHtml() { return html; - } + } public void setHtml(String html) { this.html = html; } - + @JsonProperty("substitution_tag") public String getSubstitutionTag() { return substitutionTag; - } + } public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; @@ -67,30 +73,40 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } SubscriptionTrackingSetting other = (SubscriptionTrackingSetting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; + } if (html == null) { - if (other.html != null) + if (other.html != null) { return false; - } else if (!html.equals(other.html)) + } + } else if (!html.equals(other.html)) { return false; + } if (substitutionTag == null) { - if (other.substitutionTag != null) + if (other.substitutionTag != null) { return false; - } else if (!substitutionTag.equals(other.substitutionTag)) + } + } else if (!substitutionTag.equals(other.substitutionTag)) { return false; + } if (text == null) { - if (other.text != null) + if (other.text != null) { return false; - } else if (!text.equals(other.text)) + } + } else if (!text.equals(other.text)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java index 981875c8..08a9b411 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java @@ -6,43 +6,52 @@ @JsonInclude(Include.NON_DEFAULT) public class TrackingSettings { - @JsonProperty("click_tracking") private ClickTrackingSetting clickTrackingSetting; - @JsonProperty("open_tracking") private OpenTrackingSetting openTrackingSetting; - @JsonProperty("subscription_tracking") private SubscriptionTrackingSetting subscriptionTrackingSetting; - @JsonProperty("ganalytics") private GoogleAnalyticsSetting googleAnalyticsSetting; + + @JsonProperty("click_tracking") + private ClickTrackingSetting clickTrackingSetting; + + @JsonProperty("open_tracking") + private OpenTrackingSetting openTrackingSetting; + + @JsonProperty("subscription_tracking") + private SubscriptionTrackingSetting subscriptionTrackingSetting; + + @JsonProperty("ganalytics") + private GoogleAnalyticsSetting googleAnalyticsSetting; @JsonProperty("click_tracking") public ClickTrackingSetting getClickTrackingSetting() { return clickTrackingSetting; } - + public void setClickTrackingSetting(ClickTrackingSetting clickTrackingSetting) { this.clickTrackingSetting = clickTrackingSetting; } - + @JsonProperty("open_tracking") public OpenTrackingSetting getOpenTrackingSetting() { return openTrackingSetting; } - + public void setOpenTrackingSetting(OpenTrackingSetting openTrackingSetting) { this.openTrackingSetting = openTrackingSetting; } - + @JsonProperty("subscription_tracking") public SubscriptionTrackingSetting getSubscriptionTrackingSetting() { return subscriptionTrackingSetting; } - - public void setSubscriptionTrackingSetting(SubscriptionTrackingSetting subscriptionTrackingSetting) { + + public void setSubscriptionTrackingSetting( + SubscriptionTrackingSetting subscriptionTrackingSetting) { this.subscriptionTrackingSetting = subscriptionTrackingSetting; } - + @JsonProperty("ganalytics") public GoogleAnalyticsSetting getGoogleAnalyticsSetting() { return googleAnalyticsSetting; } - + public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSetting) { this.googleAnalyticsSetting = googleAnalyticsSetting; } @@ -51,42 +60,56 @@ public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSett public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((clickTrackingSetting == null) ? 0 : clickTrackingSetting.hashCode()); - result = prime * result + ((googleAnalyticsSetting == null) ? 0 : googleAnalyticsSetting.hashCode()); + result = + prime * result + ((clickTrackingSetting == null) ? 0 : clickTrackingSetting.hashCode()); + result = + prime * result + ((googleAnalyticsSetting == null) ? 0 : googleAnalyticsSetting.hashCode()); result = prime * result + ((openTrackingSetting == null) ? 0 : openTrackingSetting.hashCode()); - result = prime * result + ((subscriptionTrackingSetting == null) ? 0 : subscriptionTrackingSetting.hashCode()); + result = prime * result + ((subscriptionTrackingSetting == null) ? 0 + : subscriptionTrackingSetting.hashCode()); return result; } @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } TrackingSettings other = (TrackingSettings) obj; if (clickTrackingSetting == null) { - if (other.clickTrackingSetting != null) + if (other.clickTrackingSetting != null) { return false; - } else if (!clickTrackingSetting.equals(other.clickTrackingSetting)) + } + } else if (!clickTrackingSetting.equals(other.clickTrackingSetting)) { return false; + } if (googleAnalyticsSetting == null) { - if (other.googleAnalyticsSetting != null) + if (other.googleAnalyticsSetting != null) { return false; - } else if (!googleAnalyticsSetting.equals(other.googleAnalyticsSetting)) + } + } else if (!googleAnalyticsSetting.equals(other.googleAnalyticsSetting)) { return false; + } if (openTrackingSetting == null) { - if (other.openTrackingSetting != null) + if (other.openTrackingSetting != null) { return false; - } else if (!openTrackingSetting.equals(other.openTrackingSetting)) + } + } else if (!openTrackingSetting.equals(other.openTrackingSetting)) { return false; + } if (subscriptionTrackingSetting == null) { - if (other.subscriptionTrackingSetting != null) + if (other.subscriptionTrackingSetting != null) { return false; - } else if (!subscriptionTrackingSetting.equals(other.subscriptionTrackingSetting)) + } + } else if (!subscriptionTrackingSetting.equals(other.subscriptionTrackingSetting)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/test/java/com/sendgrid/LicenseTest.java b/src/test/java/com/sendgrid/LicenseTest.java index 493458e6..96bf096c 100644 --- a/src/test/java/com/sendgrid/LicenseTest.java +++ b/src/test/java/com/sendgrid/LicenseTest.java @@ -1,27 +1,28 @@ package com.sendgrid; -import org.junit.Assert; -import org.junit.Test; - import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Calendar; +import org.junit.Assert; +import org.junit.Test; public class LicenseTest { - @Test - public void testLicenseShouldHaveCorrectYear() throws IOException { - String copyrightText = null; - try (BufferedReader br = new BufferedReader(new FileReader("./LICENSE.md"))) { - for (String line; (line = br.readLine()) != null; ) { - if (line.startsWith("Copyright")) { - copyrightText = line; - break; - } - } + @Test + public void testLicenseShouldHaveCorrectYear() throws IOException { + String copyrightText = null; + try (BufferedReader br = new BufferedReader(new FileReader("./LICENSE.md"))) { + for (String line; (line = br.readLine()) != null; ) { + if (line.startsWith("Copyright")) { + copyrightText = line; + break; } - String expectedCopyright = String.format("Copyright (C) %d, Twilio SendGrid, Inc. ", Calendar.getInstance().get(Calendar.YEAR)); - Assert.assertEquals("License has incorrect year", copyrightText, expectedCopyright); + } } + String expectedCopyright = String + .format("Copyright (C) %d, Twilio SendGrid, Inc. ", + Calendar.getInstance().get(Calendar.YEAR)); + Assert.assertEquals("License has incorrect year", copyrightText, expectedCopyright); + } } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 1873be71..d72909e3 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -1,20 +1,21 @@ package com.sendgrid; -import org.junit.Assert; -import org.junit.Test; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import java.io.IOException; import java.util.HashMap; import java.util.Map; -import static org.mockito.Mockito.*; +import org.junit.Assert; +import org.junit.Test; public class SendGridTest { private final String SENDGRID_API_KEY = ""; - public Map buildDefaultHeaders() { + private Map buildDefaultHeaders() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Map requestHeaders = new HashMap(); + Map requestHeaders = new HashMap(); requestHeaders.put("Authorization", "Bearer " + SENDGRID_API_KEY); String USER_AGENT = "sendgrid/" + sg.getLibraryVersion() + ";java"; requestHeaders.put("User-agent", USER_AGENT); @@ -27,7 +28,7 @@ public void testInitialization() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); Assert.assertEquals(sg.getHost(), "api.sendgrid.com"); Assert.assertEquals(sg.getVersion(), "v3"); - Map requestHeaders = buildDefaultHeaders(); + Map requestHeaders = buildDefaultHeaders(); Assert.assertEquals(sg.getRequestHeaders(), requestHeaders); } @@ -56,7 +57,7 @@ public void testVersion() { @Test public void testRequestHeaders() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Map requestHeaders = buildDefaultHeaders(); + Map requestHeaders = buildDefaultHeaders(); sg.addRequestHeader("Test", "one"); requestHeaders.put("Test", "one"); @@ -93,7 +94,7 @@ public void testRateLimitSleep() { public void test_async() { final Object sync = new Object(); SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + if (System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { @@ -111,7 +112,7 @@ public void test_async() { @Override public void error(Exception e) { Assert.fail(); - synchronized(sync) { + synchronized (sync) { sync.notify(); } } @@ -119,17 +120,17 @@ public void error(Exception e) { @Override public void response(Response response) { Assert.assertEquals(200, response.getStatusCode()); - synchronized(sync) { + synchronized (sync) { sync.notify(); } } }); try { - synchronized(sync) { + synchronized (sync) { sync.wait(2000); } - } catch(InterruptedException ex) { + } catch (InterruptedException ex) { Assert.fail(ex.toString()); } } @@ -138,7 +139,7 @@ public void response(Response response) { public void test_async_rate_limit() { final Object sync = new Object(); SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + if (System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { @@ -167,10 +168,10 @@ public void response(Response response) { }); try { - synchronized(sync) { + synchronized (sync) { sync.wait(2000); } - } catch(InterruptedException ex) { + } catch (InterruptedException ex) { Assert.fail(ex.toString()); } } @@ -198,7 +199,8 @@ public void test_access_settings_whitelist_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("access_settings/whitelist"); - request.setBody("{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"); + request.setBody( + "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -265,7 +267,8 @@ public void test_alerts_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("alerts"); - request.setBody("{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"); + request.setBody( + "{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -332,7 +335,8 @@ public void test_api_keys_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("api_keys"); - request.setBody("{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"); + request.setBody( + "{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -360,7 +364,8 @@ public void test_api_keys__api_key_id__put() throws IOException { Request request = new Request(); request.setMethod(Method.PUT); request.setEndpoint("api_keys/{api_key_id}"); - request.setBody("{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"); + request.setBody( + "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -414,7 +419,8 @@ public void test_asm_groups_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("asm/groups"); - request.setBody("{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"); + request.setBody( + "{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -442,7 +448,8 @@ public void test_asm_groups__group_id__patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("asm/groups/{group_id}"); - request.setBody("{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"); + request.setBody( + "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -509,7 +516,8 @@ public void test_asm_groups__group_id__suppressions_search_post() throws IOExcep Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("asm/groups/{group_id}/suppressions/search"); - request.setBody("{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"); + request.setBody( + "{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -621,7 +629,8 @@ public void test_campaigns_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("campaigns"); - request.setBody("{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"); + request.setBody( + "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -650,7 +659,8 @@ public void test_campaigns__campaign_id__patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("campaigns/{campaign_id}"); - request.setBody("{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"); + request.setBody( + "{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -1053,7 +1063,8 @@ public void test_contactdb_recipients_patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("contactdb/recipients"); - request.setBody("[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); + request.setBody( + "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -1067,7 +1078,8 @@ public void test_contactdb_recipients_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("contactdb/recipients"); - request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); + request.setBody( + "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -1202,7 +1214,8 @@ public void test_contactdb_segments_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("contactdb/segments"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); + request.setBody( + "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -1229,7 +1242,8 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("contactdb/segments/{segment_id}"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); + request.setBody( + "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); request.addQueryParam("segment_id", "test_string"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); @@ -1541,7 +1555,8 @@ public void test_mail_send_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"); + request.setBody( + "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"); Response response = sg.api(request); Assert.assertEquals(202, response.getStatusCode()); } @@ -1887,7 +1902,8 @@ public void test_senders_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("senders"); - request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); + request.setBody( + "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -1914,7 +1930,8 @@ public void test_senders__sender_id__patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("senders/{sender_id}"); - request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); + request.setBody( + "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -1985,7 +2002,8 @@ public void test_subusers_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("subusers"); - request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"); + request.setBody( + "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -2217,7 +2235,8 @@ public void test_suppression_blocks_delete() throws IOException { Request request = new Request(); request.setMethod(Method.DELETE); request.setEndpoint("suppression/blocks"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setBody( + "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); Assert.assertEquals(204, response.getStatusCode()); } @@ -2272,7 +2291,8 @@ public void test_suppression_bounces_delete() throws IOException { Request request = new Request(); request.setMethod(Method.DELETE); request.setEndpoint("suppression/bounces"); - request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); + request.setBody( + "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); Response response = sg.api(request); Assert.assertEquals(204, response.getStatusCode()); } @@ -2330,7 +2350,8 @@ public void test_suppression_invalid_emails_delete() throws IOException { Request request = new Request(); request.setMethod(Method.DELETE); request.setEndpoint("suppression/invalid_emails"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setBody( + "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); Assert.assertEquals(204, response.getStatusCode()); } @@ -2413,7 +2434,8 @@ public void test_suppression_spam_reports_delete() throws IOException { Request request = new Request(); request.setMethod(Method.DELETE); request.setEndpoint("suppression/spam_reports"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setBody( + "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); Assert.assertEquals(204, response.getStatusCode()); } @@ -2511,7 +2533,8 @@ public void test_templates__template_id__versions_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("templates/{template_id}/versions"); - request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"); + request.setBody( + "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -2525,7 +2548,8 @@ public void test_templates__template_id__versions__version_id__patch() throws IO Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("templates/{template_id}/versions/{version_id}"); - request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"); + request.setBody( + "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -2557,7 +2581,8 @@ public void test_templates__template_id__versions__version_id__delete() throws I } @Test - public void test_templates__template_id__versions__version_id__activate_post() throws IOException { + public void test_templates__template_id__versions__version_id__activate_post() + throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); @@ -2620,7 +2645,8 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("tracking_settings/google_analytics"); - request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"); + request.setBody( + "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -2674,7 +2700,8 @@ public void test_tracking_settings_subscription_patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("tracking_settings/subscription"); - request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"); + request.setBody( + "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -2916,7 +2943,8 @@ public void test_user_webhooks_event_settings_patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("user/webhooks/event/settings"); - request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); + request.setBody( + "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -2957,7 +2985,8 @@ public void test_user_webhooks_parse_settings_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("user/webhooks/parse/settings"); - request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"); + request.setBody( + "{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -2984,7 +3013,8 @@ public void test_user_webhooks_parse_settings__hostname__patch() throws IOExcept Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("user/webhooks/parse/settings/{hostname}"); - request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); + request + .setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -3042,7 +3072,8 @@ public void test_whitelabel_domains_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); + request.setBody( + "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -3409,7 +3440,7 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { @Test public void test_add_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); } @@ -3417,22 +3448,22 @@ public void test_add_impersonate_subuser() { @Test public void test_remove_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); sg.removeImpersonateSubuser(); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), null); } - + @Test public void test_get_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getImpersonateSubuser(), "subusername"); - + sg.removeImpersonateSubuser(); Assert.assertEquals(sg.getImpersonateSubuser(), null); - } + } } diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index bb5dd46c..62eda186 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -1,94 +1,108 @@ package com.sendgrid; -import org.junit.Test; +import static org.junit.Assert.assertTrue; import java.io.File; - -import static org.junit.Assert.assertTrue; +import org.junit.Test; public class TestRequiredFilesExist { - // ./Docker or docker/Docker - @Test public void checkDockerExists() { - boolean dockerExists = new File("./Dockerfile").exists() || + // ./Docker or docker/Docker + @Test + public void checkDockerExists() { + boolean dockerExists = new File("./Dockerfile").exists() || new File("./docker/Dockerfile").exists(); - assertTrue(dockerExists); - } - - // // ./docker-compose.yml or ./docker/docker-compose.yml - // @Test public void checkDockerComposeExists() { - // boolean dockerComposeExists = new File("./docker-compose.yml").exists() || - // new File("./docker/docker-compose.yml").exists(); - // assertTrue(dockerComposeExists); - // } - - // ./.env_sample - @Test public void checkEnvSampleExists() { - assertTrue(new File("./.env_sample").exists()); - } - - // ./.gitignore - @Test public void checkGitIgnoreExists() { - assertTrue(new File("./.gitignore").exists()); - } - - // ./.travis.yml - @Test public void checkTravisExists() { - assertTrue(new File("./.travis.yml").exists()); - } - - // ./.codeclimate.yml - @Test public void checkCodeClimateExists() { - assertTrue(new File("./.codeclimate.yml").exists()); - } - - // ./CHANGELOG.md - @Test public void checkChangelogExists() { - assertTrue(new File("./CHANGELOG.md").exists()); - } - - // ./CODE_OF_CONDUCT.md - @Test public void checkCodeOfConductExists() { - assertTrue(new File("./CODE_OF_CONDUCT.md").exists()); - } - - // ./CONTRIBUTING.md - @Test public void checkContributingGuideExists() { - assertTrue(new File("./CONTRIBUTING.md").exists()); - } - - // ./ISSUE_TEMPLATE.md - @Test public void checkIssuesTemplateExists() { - assertTrue(new File("./ISSUE_TEMPLATE.md").exists()); - } - - // ./LICENSE.md - @Test public void checkLicenseExists() { - assertTrue(new File("./LICENSE.md").exists()); - } - - // ./PULL_REQUEST_TEMPLATE.md - @Test public void checkPullRequestExists() { - assertTrue(new File("./PULL_REQUEST_TEMPLATE.md").exists()); - } - - // ./README.md - @Test public void checkReadMeExists() { - assertTrue(new File("./README.md").exists()); - } - - // ./TROUBLESHOOTING.md - @Test public void checkTroubleShootingGuideExists() { - assertTrue(new File("./TROUBLESHOOTING.md").exists()); - } - - // ./USAGE.md - @Test public void checkUsageGuideExists() { - assertTrue(new File("./USAGE.md").exists()); - } - - // ./USE_CASES.md - @Test public void checkUseCases() { - assertTrue(new File("./USE_CASES.md").exists()); - } + assertTrue(dockerExists); + } + + // // ./docker-compose.yml or ./docker/docker-compose.yml + // @Test public void checkDockerComposeExists() { + // boolean dockerComposeExists = new File("./docker-compose.yml").exists() || + // new File("./docker/docker-compose.yml").exists(); + // assertTrue(dockerComposeExists); + // } + + // ./.env_sample + @Test + public void checkEnvSampleExists() { + assertTrue(new File("./.env_sample").exists()); + } + + // ./.gitignore + @Test + public void checkGitIgnoreExists() { + assertTrue(new File("./.gitignore").exists()); + } + + // ./.travis.yml + @Test + public void checkTravisExists() { + assertTrue(new File("./.travis.yml").exists()); + } + + // ./.codeclimate.yml + @Test + public void checkCodeClimateExists() { + assertTrue(new File("./.codeclimate.yml").exists()); + } + + // ./CHANGELOG.md + @Test + public void checkChangelogExists() { + assertTrue(new File("./CHANGELOG.md").exists()); + } + + // ./CODE_OF_CONDUCT.md + @Test + public void checkCodeOfConductExists() { + assertTrue(new File("./CODE_OF_CONDUCT.md").exists()); + } + + // ./CONTRIBUTING.md + @Test + public void checkContributingGuideExists() { + assertTrue(new File("./CONTRIBUTING.md").exists()); + } + + // ./ISSUE_TEMPLATE.md + @Test + public void checkIssuesTemplateExists() { + assertTrue(new File("./ISSUE_TEMPLATE.md").exists()); + } + + // ./LICENSE.md + @Test + public void checkLicenseExists() { + assertTrue(new File("./LICENSE.md").exists()); + } + + // ./PULL_REQUEST_TEMPLATE.md + @Test + public void checkPullRequestExists() { + assertTrue(new File("./PULL_REQUEST_TEMPLATE.md").exists()); + } + + // ./README.md + @Test + public void checkReadMeExists() { + assertTrue(new File("./README.md").exists()); + } + + // ./TROUBLESHOOTING.md + @Test + public void checkTroubleShootingGuideExists() { + assertTrue(new File("./TROUBLESHOOTING.md").exists()); + } + + // ./USAGE.md + @Test + public void checkUsageGuideExists() { + assertTrue(new File("./USAGE.md").exists()); + } + + // ./USE_CASES.md + @Test + public void checkUseCases() { + assertTrue(new File("./USE_CASES.md").exists()); + } } From 3712a8fb9fe7cc10ee31a7a0cd0abb77a29a5d7e Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Mon, 24 Feb 2020 10:40:49 -0600 Subject: [PATCH 263/439] chore: fix JDK Travis failures (#610) --- .travis.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8e697df3..60f39a58 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,23 @@ language: java before_install: - - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import || true + - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true matrix: include: - - name: 'OpenJDK 7' - jdk: openjdk7 - - name: 'OpenJDK 8' - jdk: openjdk8 - - name: 'Oracle JDK 7' - jdk: oraclejdk7 - - name: 'Oracle JDK 8' - jdk: oraclejdk8 - - name: 'OpenJDK 11' - jdk: openjdk11 + - jdk: openjdk7 + dist: trusty + - jdk: openjdk8 + dist: xenial + - jdk: openjdk11 + dist: xenial + - jdk: oraclejdk7 + dist: precise + - jdk: oraclejdk8 + dist: trusty + - jdk: oraclejdk11 + dist: trusty allow_failures: - - name: 'Oracle JDK 8' # See https://travis-ci.community/t/expected-feature-release-number-in-range-of-9-to-12-but-got-8-installing-oraclejdk8/1345/14 - - name: 'OpenJDK 7' - - name: 'Oracle JDK 7' - - name: 'OpenJDK 11' + - jdk: openjdk7 + - jdk: oraclejdk7 before_script: - "./scripts/startPrism.sh &" - sleep 20 From d274ed2cad9db4ca8387aba1d2669e1929af7e18 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Mar 2020 19:00:25 +0000 Subject: [PATCH 264/439] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51d5926e..c9ccea9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-03-18] Version 4.4.6 +-------------------------- +**Library - Docs** +- [PR #264](https://github.com/sendgrid/sendgrid-java/pull/264): Overhaul javadocs, using Oracle's styleguide. Thanks to [@jamierocks](https://github.com/jamierocks)! + +**Library - Chore** +- [PR #610](https://github.com/sendgrid/sendgrid-java/pull/610): fix JDK Travis failures. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-02-19] Version 4.4.5 -------------------------- **Library - Docs** From d84a9dde1cd1f45a2e8f8a0b0de87cbe0c113af4 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Mar 2020 19:31:08 +0000 Subject: [PATCH 265/439] Release 4.4.6 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bf38a9d1..fe93aed2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.5/sendgrid-4.4.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.5/sendgrid-4.4.5-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.6/sendgrid-4.4.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.6/sendgrid-4.4.6-jar.jar:. Example ``` diff --git a/README.md b/README.md index 8ccf389a..1b19bb63 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.5' + implementation 'com.sendgrid:sendgrid-java:4.4.6' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.5/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.6/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 84dd9b68..7083e094 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.5 + 4.4.6 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.5 + 4.4.6
    From b476d4ce62eec9bc7164da98a14c3ee00c0fb2d0 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Wed, 18 Mar 2020 17:23:05 -0500 Subject: [PATCH 266/439] fix: correct the serialization of Setting to include non-null values (#612) --- .../java/com/sendgrid/helpers/mail/objects/Setting.java | 4 ++-- .../helpers/mail/objects/SettingsSerializationTest.java | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 45bef3bb..fd21bcb5 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_NULL) public class Setting { @JsonProperty("enable") private boolean enable; @@ -38,4 +38,4 @@ public boolean equals(Object obj) { return false; return true; } -} \ No newline at end of file +} diff --git a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java index 27878162..2f7d47c2 100644 --- a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java +++ b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java @@ -15,6 +15,15 @@ public class SettingsSerializationTest { private ObjectMapper mapper = new ObjectMapper(); + @Test + public void testSettingSerialization() throws Exception { + Setting setting = new Setting(); + setting.setEnable(false); + + String json = mapper.writeValueAsString(setting); + Assert.assertEquals(json, "{\"enable\":false}"); + } + @Test public void testOpenTrackingSettingSerialization() throws Exception { OpenTrackingSetting setting = new OpenTrackingSetting(); From 5741ac8fd9cada32227ddd1e5c39e1e10ce4d021 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Wed, 25 Mar 2020 15:55:34 -0700 Subject: [PATCH 267/439] docs: fix link to jar file (#615) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b19bb63..fbc6943a 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.6/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.6/sendgrid-java.jar) ## Dependencies From 76f5328f2448c21ceb841bcf15dde4e0ac0188db Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 31 Mar 2020 10:08:11 -0500 Subject: [PATCH 268/439] docs: support verbiage for login issues (#617) Added support verbiage for login issues due to several recent github issues being opened. --- TROUBLESHOOTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 452d5c59..ed1090d1 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -1,3 +1,5 @@ +If you have an issue logging into your Twilio SendGrid account, please read this [document](https://sendgrid.com/docs/ui/account-and-settings/troubleshooting-login/). For any questions regarding login issues, please contact our [support team](https://support.sendgrid.com). + If you have a non-library SendGrid issue, please contact our [support team](https://support.sendgrid.com). If you can't find a solution below, please open an [issue](https://github.com/sendgrid/sendgrid-java/issues). From 86a727d317ea15ee9799a42478392f344781af11 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 1 Apr 2020 19:04:48 +0000 Subject: [PATCH 269/439] [Librarian] Version Bump --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9ccea9f..aca526c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-04-01] Version 4.4.7 +-------------------------- +**Library - Docs** +- [PR #617](https://github.com/sendgrid/sendgrid-java/pull/617): support verbiage for login issues. Thanks to [@adamchasetaylor](https://github.com/adamchasetaylor)! +- [PR #615](https://github.com/sendgrid/sendgrid-java/pull/615): fix link to jar file. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + +**Library - Fix** +- [PR #612](https://github.com/sendgrid/sendgrid-java/pull/612): correct the serialization of Setting to include non-null values. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-03-18] Version 4.4.6 -------------------------- **Library - Docs** From 9a2aacb8193b309f5ebd55770c47bd46e351e4cc Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 1 Apr 2020 19:39:10 +0000 Subject: [PATCH 270/439] Release 4.4.7 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fe93aed2..8717c9f8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.6/sendgrid-4.4.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.6/sendgrid-4.4.6-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.7/sendgrid-4.4.7-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.7/sendgrid-4.4.7-jar.jar:. Example ``` diff --git a/README.md b/README.md index fbc6943a..c7a65489 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 40,000 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.4.7 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.6' + implementation 'com.sendgrid:sendgrid-java:4.4.7' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.6/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.7/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 7083e094..ca133ec4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.6 + 4.4.7 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.6 + 4.4.7
    From 46192aa1729cd431d0d96f180fdf50084ae130c4 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Fri, 3 Apr 2020 13:51:20 -0500 Subject: [PATCH 271/439] fix: correct the User-Agent casing (#618) --- src/main/java/com/sendgrid/SendGrid.java | 6 +++--- src/test/java/com/sendgrid/SendGridTest.java | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 3c27b313..e746bcfd 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -79,7 +79,7 @@ public void initializeSendGrid(String apiKey) { this.version = "v3"; this.requestHeaders = new HashMap(); this.requestHeaders.put("Authorization", "Bearer " + apiKey); - this.requestHeaders.put("User-agent", USER_AGENT); + this.requestHeaders.put("User-Agent", USER_AGENT); this.requestHeaders.put("Accept", "application/json"); this.rateLimitRetry = 5; this.rateLimitSleep = 1100; @@ -157,7 +157,7 @@ public void setHost(String host) { } /** - * Get the maximum number of retries on a rate limit response. + * Get the maximum number of retries on a rate limit response. * The default is 5. * @return the number of retries on a rate limit. */ @@ -214,7 +214,7 @@ public void removeImpersonateSubuser() { * @return the impersonated subuser */ public String getImpersonateSubuser() { - return this.subuser; + return this.subuser; } /** diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 1873be71..92c0b4a2 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -17,7 +17,7 @@ public Map buildDefaultHeaders() { Map requestHeaders = new HashMap(); requestHeaders.put("Authorization", "Bearer " + SENDGRID_API_KEY); String USER_AGENT = "sendgrid/" + sg.getLibraryVersion() + ";java"; - requestHeaders.put("User-agent", USER_AGENT); + requestHeaders.put("User-Agent", USER_AGENT); requestHeaders.put("Accept", "application/json"); return requestHeaders; } @@ -3409,7 +3409,7 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { @Test public void test_add_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); } @@ -3417,21 +3417,21 @@ public void test_add_impersonate_subuser() { @Test public void test_remove_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); sg.removeImpersonateSubuser(); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), null); } - + @Test public void test_get_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getImpersonateSubuser(), "subusername"); - + sg.removeImpersonateSubuser(); Assert.assertEquals(sg.getImpersonateSubuser(), null); } From 9c456d105d48868efad2698f847ed2d63fd3cbea Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Fri, 3 Apr 2020 15:27:48 -0500 Subject: [PATCH 272/439] chore: update Travis CI Slack notifications --- .travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.travis.yml b/.travis.yml index 60f39a58..09ee97fb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,3 +31,11 @@ deploy: tags: true jdk: openjdk8 branch: master + +notifications: + slack: + if: branch = master + on_success: never + on_failure: change + rooms: + - secure: q2SEemDXFLu/2G2I7oD02+YsM5Q0G27j+b4P1BcReWqVHhRz9L+iyuYWhIXJ6hW0omL5V2XrZ65uqb4f/SD7b89oXRGToVxfykrBzcas1tqIIp9lldd1u2eMc59zALX4nkTlE0T4UFLwEvoeY8aXoD/dNytSy6M2F5c2nYcmoN0= From d098bfb8f1dc531440512797079045670a7d58ec Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Mon, 6 Apr 2020 11:09:16 -0500 Subject: [PATCH 273/439] Update .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 09ee97fb..db96dad8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,6 +35,7 @@ deploy: notifications: slack: if: branch = master + on_pull_requests: false on_success: never on_failure: change rooms: From 22944b7c0a1b5e15533acad8abc2764b239facf8 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Wed, 8 Apr 2020 16:17:09 -0500 Subject: [PATCH 274/439] docs: cleanup support/help/contact information --- CONTRIBUTING.md | 2 -- README.md | 6 +++--- docker/README.md | 6 ------ docker/USAGE.md | 7 ------- pom.xml | 4 ++-- 5 files changed, 5 insertions(+), 20 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8717c9f8..189c719f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -216,5 +216,3 @@ Please run your code through: ## Code Reviews If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, GitHub has some great information on how to review a Pull Request. - -If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. diff --git a/README.md b/README.md index c7a65489..d3f1c22c 100644 --- a/README.md +++ b/README.md @@ -229,11 +229,11 @@ Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java # About -sendgrid-java is guided and supported by the Twilio Developer Experience Team. +sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. -Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. +If you need help installing or using the library, please check the [Twilio SendGrid Support Help Center](https://support.sendgrid.com). -sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. +If you've instead found a bug in the library or would like new features added, go ahead and open issues or pull requests against this repo! # License diff --git a/docker/README.md b/docker/README.md index db653dd1..dccc98cf 100644 --- a/docker/README.md +++ b/docker/README.md @@ -28,10 +28,4 @@ Due to Oracle's JDK license, you must build this Docker image using the official For more detailed information, see [USAGE.md](https://github.com/sendgrid/sendgrid-java/blob/master/docker/USAGE.md). -# About - -sendgrid-java is guided and supported by the Twilio Developer Experience Team. - -sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. - ![SendGrid Logo](https://github.com/sendgrid/sendgrid-python/raw/master/twilio_sendgrid_logo.png) diff --git a/docker/USAGE.md b/docker/USAGE.md index fe894b24..dab8ed36 100644 --- a/docker/USAGE.md +++ b/docker/USAGE.md @@ -28,12 +28,5 @@ Testing is easy! 2. `cd sendgrid-java` 3. run `./gradlew test` - -# About - -sendgrid-java is guided and supported by the Twilio SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). - -sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. - ![SendGrid Logo](https://github.com/sendgrid/sendgrid-python/raw/master/twilio_sendgrid_logo.png) diff --git a/pom.xml b/pom.xml index ca133ec4..a132c77c 100644 --- a/pom.xml +++ b/pom.xml @@ -265,7 +265,7 @@ thinkingserious Elmer Thomas - dx@sendgrid.com + ethomas@twilio.com https://sendgrid.com @@ -304,4 +304,4 @@ test - \ No newline at end of file + From 8cc09c56aad10da84d79c858e584035bda491b83 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 15 Apr 2020 19:16:06 +0000 Subject: [PATCH 275/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aca526c8..2dc16ffc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-04-15] Version 4.4.8 +-------------------------- +**Library - Fix** +- [PR #618](https://github.com/sendgrid/sendgrid-java/pull/618): correct the User-Agent casing. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-04-01] Version 4.4.7 -------------------------- **Library - Docs** From 2bd232a7d3ce5652dae13b3d5bcc0b02cd77f248 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 15 Apr 2020 19:27:47 +0000 Subject: [PATCH 276/439] Release 4.4.8 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 189c719f..7b6b97a3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.7/sendgrid-4.4.7-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.7/sendgrid-4.4.7-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.8/sendgrid-4.4.8-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.8/sendgrid-4.4.8-jar.jar:. Example ``` diff --git a/README.md b/README.md index d3f1c22c..d5d5e5ff 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.4.7 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.4.8 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.7' + implementation 'com.sendgrid:sendgrid-java:4.4.8' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.7/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.8/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index a132c77c..3463b417 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.7 + 4.4.8 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.7 + 4.4.8 @@ -304,4 +304,4 @@ test - + \ No newline at end of file From 180d408519c626a7fbaf9b1816161c653e96b877 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Tue, 5 May 2020 19:56:52 -0500 Subject: [PATCH 277/439] feat: add support for Twilio Email (#621) --- USE_CASES.md | 83 +++-- src/main/java/com/sendgrid/BaseInterface.java | 343 ++++++++++++++++++ src/main/java/com/sendgrid/SendGrid.java | 296 +-------------- src/main/java/com/sendgrid/SendGridAPI.java | 91 ++--- src/main/java/com/sendgrid/TwilioEmail.java | 50 +++ .../java/com/sendgrid/TwilioEmailTest.java | 29 ++ 6 files changed, 530 insertions(+), 362 deletions(-) create mode 100644 src/main/java/com/sendgrid/BaseInterface.java create mode 100644 src/main/java/com/sendgrid/TwilioEmail.java create mode 100644 src/test/java/com/sendgrid/TwilioEmailTest.java diff --git a/USE_CASES.md b/USE_CASES.md index a77c941e..520825d6 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -5,8 +5,9 @@ This documentation provides examples for specific use cases. Please [open an iss * [Transactional Templates](#transactional-templates) * [Legacy Templates](#legacy-templates) * [How to Setup a Domain Authentication](#domain-authentication) -* [How to View Email Statistics](#email-stats) -* [Send a SMS Message](#sms) +* [How to View Email Statistics](#how-to-view-email-statistics) +* [Send an Email With Twilio Email (Pilot)](#send-an-email-with-twilio-email-pilot) +* [Send an SMS Message](#send-an-sms-message) # Transactional Templates @@ -225,84 +226,92 @@ You can find documentation for how to setup a domain authentication via the UI [ Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). - # How to View Email Statistics You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#stats). Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email. - -# Send a SMS Message +# Send an Email With Twilio Email (Pilot) -Following are the steps to add Twilio SMS to your app: - -## 1. Obtain a Free Twilio Account +### 1. Obtain a Free Twilio Account Sign up for a free Twilio account [here](https://www.twilio.com/try-twilio?source=sendgrid-java). -## 2. Update Your Environment Variables +### 2. Set Up Your Environment Variables + +The Twilio API allows for authentication using with either an API key/secret or your Account SID/Auth Token. You can create an API key [here](https://twil.io/get-api-key) or obtain your Account SID and Auth Token [here](https://twil.io/console). -You can obtain your Account Sid and Auth Token from [twilio.com/console](https://twilio.com/console). +Once you have those, follow the steps below based on your operating system. -### Mac +#### Linux/Mac ```bash +echo "export TWILIO_API_KEY='YOUR_TWILIO_API_KEY'" > twilio.env +echo "export TWILIO_API_SECRET='YOUR_TWILIO_API_SECRET'" >> twilio.env + +# or + echo "export TWILIO_ACCOUNT_SID='YOUR_TWILIO_ACCOUNT_SID'" > twilio.env echo "export TWILIO_AUTH_TOKEN='YOUR_TWILIO_AUTH_TOKEN'" >> twilio.env +``` + +Then: + +```bash echo "twilio.env" >> .gitignore source ./twilio.env ``` -### Windows +#### Windows Temporarily set the environment variable (accessible only during the current CLI session): ```bash +set TWILIO_API_KEY=YOUR_TWILIO_API_KEY +set TWILIO_API_SECRET=YOUR_TWILIO_API_SECRET + +: or + set TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID set TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN ``` -Permanently set the environment variable (accessible in all subsequent CLI sessions): +Or permanently set the environment variable (accessible in all subsequent CLI sessions): ```bash +setx TWILIO_API_KEY "YOUR_TWILIO_API_KEY" +setx TWILIO_API_SECRET "YOUR_TWILIO_API_SECRET" + +: or + setx TWILIO_ACCOUNT_SID "YOUR_TWILIO_ACCOUNT_SID" setx TWILIO_AUTH_TOKEN "YOUR_TWILIO_AUTH_TOKEN" ``` -## 3. Install the Twilio Helper Library +### 3. Initialize the Twilio Email Client -`twilio-java` uses Maven. At present the jars *are* available from a public [maven](http://mvnrepository.com/artifact/com.twilio.sdk/twilio) repository. +```java +TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_API_KEY"), System.getenv("TWILIO_API_SECRET")); -Use the following dependency in your project to grab via Maven: +// or -```xml - - com.twilio.sdk - twilio - 7.X.X - compile - +TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_ACCOUNT_SID"), System.getenv("TWILIO_AUTH_TOKEN")); ``` -or Gradle: -```groovy -compile "com.twilio.sdk:twilio:7.X.X" -```` +This client has the same interface as the `SendGrid` client. -If you want to compile it yourself, here is how: +# Send an SMS Message -```bash -$ git clone git@github.com:twilio/twilio-java -$ cd twilio-java -$ mvn install # Requires maven, download from http://maven.apache.org/download.html -``` +First, follow the above steps for creating a Twilio account and setting up environment variables with the proper credentials. + +Then, install the Twilio Helper Library by following the [installation steps](https://github.com/twilio/twilio-java#installation). -Then, you can execute the following code. +Finally, send a message. ```java -String accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID"); -String authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN"); +String accountSid = System.getenv("TWILIO_ACCOUNT_SID"); +String authToken = System.getenv("TWILIO_AUTH_TOKEN"); Twilio.init(accountSid, authToken); @@ -315,4 +324,4 @@ Message message = Message.creator( System.out.println(message.getSid()); ``` -For more information, please visit the [Twilio SMS Java documentation](https://www.twilio.com/docs/sms/quickstart/java). \ No newline at end of file +For more information, please visit the [Twilio SMS Java documentation](https://www.twilio.com/docs/sms/quickstart/java). diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java new file mode 100644 index 00000000..0b87b528 --- /dev/null +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -0,0 +1,343 @@ +package com.sendgrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * This class is the base interface to the Twilio SendGrid Web API. + */ +public abstract class BaseInterface implements SendGridAPI { + + private static final String VERSION = "3.0.0"; + + private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; + private static final int RATE_LIMIT_RESPONSE_CODE = 429; + private static final int THREAD_POOL_SIZE = 8; + + private ExecutorService pool; + + /** + * The host to which to connect. + */ + private String host; + + /** + * The API version. + */ + private String version; + + /** + * The HTTP client. + */ + private Client client; + + /** + * The request headers container. + */ + private Map requestHeaders; + + /** + * The number of times to try after a rate limit. + */ + private int rateLimitRetry; + + /** + * The number of milliseconds to sleep between retries. + */ + private int rateLimitSleep; + + /** + * The subuser to be impersonated. + */ + private String subuser; + + /** + * Construct a new API wrapper. + */ + public BaseInterface() { + this.client = new Client(); + } + + /** + * Construct a new API wrapper. + * + * @param test is true if you are unit testing + */ + public BaseInterface(final Boolean test) { + this.client = new Client(test); + } + + /** + * Construct a new API wrapper. + * + * @param client the Client to use (allows to customize its configuration) + */ + public BaseInterface(final Client client) { + this.client = client; + } + + /** + * Initialize the client. + * + * @param auth authorization header value + * @param host the base URL for the API + */ + public void initialize(final String auth, final String host) { + this.host = host; + this.version = "v3"; + this.requestHeaders = new HashMap<>(); + this.requestHeaders.put("Authorization", auth); + this.requestHeaders.put("User-Agent", USER_AGENT); + this.requestHeaders.put("Accept", "application/json"); + this.rateLimitRetry = 5; + this.rateLimitSleep = 1100; + + this.pool = Executors.newFixedThreadPool(THREAD_POOL_SIZE); + } + + /** + * Get the current library version. + * + * @return the current version + */ + public String getLibraryVersion() { + return VERSION; + } + + /** + * Get the API version. + * + * @return the current API version + */ + public String getVersion() { + return this.version; + } + + /** + * Set the API version. + * + * @param version the new version + */ + public void setVersion(final String version) { + this.version = version; + } + + /** + * Get the request headers. + * + * @return the request headers + */ + public Map getRequestHeaders() { + return this.requestHeaders; + } + + /** + * Add/update a request header. + * + * @param key the header key + * @param value the header value + * @return the new set of request headers + */ + public Map addRequestHeader(final String key, final String value) { + this.requestHeaders.put(key, value); + return getRequestHeaders(); + } + + /** + * Remove a request header. + * + * @param key the header key to remove + * @return the new set of request headers + */ + public Map removeRequestHeader(final String key) { + this.requestHeaders.remove(key); + return getRequestHeaders(); + } + + /** + * Get the host. + * + * @return the host + */ + public String getHost() { + return this.host; + } + + /** + * Set the host. + * + * @param host the new host + */ + public void setHost(final String host) { + this.host = host; + } + + /** + * Get the maximum number of retries on a rate limit response. + * The default is 5. + * + * @return the number of retries on a rate limit + */ + public int getRateLimitRetry() { + return this.rateLimitRetry; + } + + /** + * Set the maximum number of retries on a rate limit response. + * + * @param rateLimitRetry the maximum retry count + */ + public void setRateLimitRetry(final int rateLimitRetry) { + this.rateLimitRetry = rateLimitRetry; + } + + /** + * Get the duration of time (in milliseconds) to sleep between + * consecutive rate limit retries. The Twilio SendGrid API enforces + * the rate limit to the second. The default value is 1.1 seconds. + * + * @return the sleep duration + */ + public int getRateLimitSleep() { + return this.rateLimitSleep; + } + + /** + * Set the duration of time (in milliseconds) to sleep between + * consecutive rate limit retries. + * + * @param rateLimitSleep the sleep duration + */ + public void setRateLimitSleep(final int rateLimitSleep) { + this.rateLimitSleep = rateLimitSleep; + } + + /** + * Impersonate subuser for subsequent requests + * + * @param subuser the subuser to be impersonated + */ + public void addImpersonateSubuser(final String subuser) { + this.subuser = subuser; + this.addRequestHeader("on-behalf-of", subuser); + } + + /** + * Stop Impersonating the subuser + */ + public void removeImpersonateSubuser() { + this.subuser = null; + this.removeRequestHeader("on-behalf-of"); + } + + /** + * Get the impersonated subuser or null if empty + * + * @return the impersonated subuser + */ + public String getImpersonateSubuser() { + return this.subuser; + } + + /** + * Makes the call to the Twilio SendGrid API, override this method for testing. + * + * @param request the request to make + * @return the response object + * @throws IOException in case of a network error + */ + public Response makeCall(final Request request) throws IOException { + return client.api(request); + } + + /** + * Class api sets up the request to the Twilio SendGrid API, this is main interface. + * + * @param request the request object + * @return the response object + * @throws IOException in case of a network error + */ + public Response api(final Request request) throws IOException { + final Request req = new Request(); + + req.setMethod(request.getMethod()); + req.setBaseUri(this.host); + req.setEndpoint("/" + version + "/" + request.getEndpoint()); + req.setBody(request.getBody()); + + for (final Map.Entry header : this.requestHeaders.entrySet()) { + req.addHeader(header.getKey(), header.getValue()); + } + + for (final Map.Entry queryParam : request.getQueryParams().entrySet()) { + req.addQueryParam(queryParam.getKey(), queryParam.getValue()); + } + + return makeCall(req); + } + + /** + * Attempt an API call. This method executes the API call asynchronously + * on an internal thread pool. If the call is rate limited, the thread + * will retry up to the maximum configured time. + * + * @param request the API request + */ + public void attempt(final Request request) { + this.attempt(request, new APICallback() { + @Override + public void error(final Exception ex) { + } + + public void response(final Response r) { + } + }); + } + + /** + * Attempt an API call. This method executes the API call asynchronously + * on an internal thread pool. If the call is rate limited, the thread + * will retry up to the maximum configured time. The supplied callback + * will be called in the event of an error, or a successful response. + * + * @param request the API request + * @param callback the callback + */ + public void attempt(final Request request, final APICallback callback) { + this.pool.execute(new Runnable() { + @Override + public void run() { + Response response; + + // Retry until the retry limit has been reached. + for (int i = 0; i < rateLimitRetry; ++i) { + try { + response = api(request); + } catch (IOException ex) { + // Stop retrying if there is a network error. + callback.error(ex); + return; + } + + // We have been rate limited. + if (response.getStatusCode() == RATE_LIMIT_RESPONSE_CODE) { + try { + Thread.sleep(rateLimitSleep); + } catch (InterruptedException ex) { + // Can safely ignore this exception and retry. + } + } else { + callback.response(response); + return; + } + } + + // Retries exhausted. Return error. + callback.error(new RateLimitException(request, rateLimitRetry)); + } + }); + } +} diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index e746bcfd..e30a00f2 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -1,311 +1,47 @@ package com.sendgrid; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ExecutorService; - /** - * Class Twilio SendGrid allows for quick and easy access to the Twilio SendGrid API. - */ -public class SendGrid implements SendGridAPI { - - private static final String VERSION = "3.0.0"; - - /** The user agent string to return to Twilio SendGrid. */ - private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; - private static final int RATE_LIMIT_RESPONSE_CODE = 429; - private static final int THREAD_POOL_SIZE = 8; - - private ExecutorService pool; - - /** The Twilio SendGrid host to which to connect. */ - private String host; - - /** The API version. */ - private String version; - - /** The HTTP client. */ - private Client client; - - /** The request headers container. */ - private Map requestHeaders; - - /** The number of times to try after a rate limit. */ - private int rateLimitRetry; - - /** The number of milliseconds to sleep between retries. */ - private int rateLimitSleep; - - /** The subuser to be impersonated. */ - private String subuser; + * Class Twilio SendGrid allows for quick and easy access to the Twilio SendGrid API. + */ +public class SendGrid extends BaseInterface { /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys */ - public SendGrid(String apiKey) { - this.client = new Client(); + public SendGrid(final String apiKey) { initializeSendGrid(apiKey); } /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys - * @param test is true if you are unit testing + * @param test is true if you are unit testing */ - public SendGrid(String apiKey, Boolean test) { - this.client = new Client(test); + public SendGrid(final String apiKey, final Boolean test) { + super(test); initializeSendGrid(apiKey); } /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param client the Client to use (allows to customize its configuration) */ - public SendGrid(String apiKey, Client client) { - this.client = client; + public SendGrid(final String apiKey, final Client client) { + super(client); initializeSendGrid(apiKey); } /** * Initialize the client. - * @param apiKey the user's API key. - */ - public void initializeSendGrid(String apiKey) { - this.host = "api.sendgrid.com"; - this.version = "v3"; - this.requestHeaders = new HashMap(); - this.requestHeaders.put("Authorization", "Bearer " + apiKey); - this.requestHeaders.put("User-Agent", USER_AGENT); - this.requestHeaders.put("Accept", "application/json"); - this.rateLimitRetry = 5; - this.rateLimitSleep = 1100; - - this.pool = Executors.newFixedThreadPool(THREAD_POOL_SIZE); - } - - /** - * Retrieve the current library version. - * @return the current version. - */ - public String getLibraryVersion() { - return this.VERSION; - } - - /** - * Get the API version. - * @return the current API versioin (v3 by default). - */ - public String getVersion() { - return this.version; - } - - /** - * Set the API version. - * @param version the new version. + * + * @param apiKey the user's API key */ - public void setVersion(String version) { - this.version = version; - } - - /** - * Obtain the request headers. - * @return the request headers. - */ - public Map getRequestHeaders() { - return this.requestHeaders; - } - - /** - * Add a new request header. - * @param key the header key. - * @param value the header value. - * @return the new set of request headers. - */ - public Map addRequestHeader(String key, String value) { - this.requestHeaders.put(key, value); - return getRequestHeaders(); - } - - /** - * Remove a request header. - * @param key the header key to remove. - * @return the new set of request headers. - */ - public Map removeRequestHeader(String key) { - this.requestHeaders.remove(key); - return getRequestHeaders(); - } - - /** - * Get the Twilio SendGrid host (api.sendgrid.com by default). - * @return the Twilio SendGrid host. - */ - public String getHost() { - return this.host; - } - - /** - * Set the Twilio SendGrid host. - * @param host the new Twilio SendGrid host. - */ - public void setHost(String host) { - this.host = host; - } - - /** - * Get the maximum number of retries on a rate limit response. - * The default is 5. - * @return the number of retries on a rate limit. - */ - public int getRateLimitRetry() { - return this.rateLimitRetry; - } - - /** - * Set the maximum number of retries on a rate limit response. - * @param rateLimitRetry the maximum retry count. - */ - public void setRateLimitRetry(int rateLimitRetry) { - this.rateLimitRetry = rateLimitRetry; - } - - /** - * Get the duration of time (in milliseconds) to sleep between - * consecutive rate limit retries. The Twilio SendGrid API enforces - * the rate limit to the second. The default value is 1.1 seconds. - * @return the sleep duration. - */ - public int getRateLimitSleep() { - return this.rateLimitSleep; - } - - /** - * Set the duration of time (in milliseconds) to sleep between - * consecutive rate limit retries. - * @param rateLimitSleep the sleep duration. - */ - public void setRateLimitSleep(int rateLimitSleep) { - this.rateLimitSleep = rateLimitSleep; - } - - /** - * Impersonate subuser for subsequent requests - * @param subuser the subuser to be impersonated - */ - public void addImpersonateSubuser(String subuser) { - this.subuser = subuser; - this.addRequestHeader("on-behalf-of", subuser); - } - - /** - * Stop Impersonating the subuser - */ - public void removeImpersonateSubuser() { - this.subuser = null; - this.removeRequestHeader("on-behalf-of"); - } - - /** - * Get the impersonated subuser or null if empty - * @return the impersonated subuser - */ - public String getImpersonateSubuser() { - return this.subuser; - } - - /** - * Makes the call to the Twilio SendGrid API, override this method for testing. - * @param request the request to make. - * @return the response object. - * @throws IOException in case of a network error. - */ - public Response makeCall(Request request) throws IOException { - return client.api(request); - } - - /** - * Class api sets up the request to the Twilio SendGrid API, this is main interface. - * @param request the request object. - * @return the response object. - * @throws IOException in case of a network error. - */ - public Response api(Request request) throws IOException { - Request req = new Request(); - req.setMethod(request.getMethod()); - req.setBaseUri(this.host); - req.setEndpoint("/" + version + "/" + request.getEndpoint()); - req.setBody(request.getBody()); - for (Map.Entry header : this.requestHeaders.entrySet()) { - req.addHeader(header.getKey(), header.getValue()); - } - for (Map.Entry queryParam : request.getQueryParams().entrySet()) { - req.addQueryParam(queryParam.getKey(), queryParam.getValue()); - } - - return makeCall(req); - } - - /** - * Attempt an API call. This method executes the API call asynchronously - * on an internal thread pool. If the call is rate limited, the thread - * will retry up to the maximum configured time. - * @param request the API request. - */ - public void attempt(Request request) { - this.attempt(request, new APICallback() { - @Override - public void error(Exception ex) { - } - - public void response(Response r) { - } - }); - } - - /** - * Attempt an API call. This method executes the API call asynchronously - * on an internal thread pool. If the call is rate limited, the thread - * will retry up to the maximum configured time. The supplied callback - * will be called in the event of an error, or a successful response. - * @param request the API request. - * @param callback the callback. - */ - public void attempt(final Request request, final APICallback callback) { - this.pool.execute(new Runnable() { - @Override - public void run() { - Response response; - - // Retry until the retry limit has been reached. - for (int i = 0; i < rateLimitRetry; ++i) { - try { - response = api(request); - } catch (IOException ex) { - // Stop retrying if there is a network error. - callback.error(ex); - return; - } - - // We have been rate limited. - if (response.getStatusCode() == RATE_LIMIT_RESPONSE_CODE) { - try { - Thread.sleep(rateLimitSleep); - } catch (InterruptedException ex) { - // Can safely ignore this exception and retry. - } - } else { - callback.response(response); - return; - } - } - - // Retries exhausted. Return error. - callback.error(new RateLimitException(request, rateLimitRetry)); - } - }); + public void initializeSendGrid(final String apiKey) { + this.initialize("Bearer " + apiKey, "api.sendgrid.com"); } } diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index aa9583a2..71b2c3cc 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -6,86 +6,87 @@ public interface SendGridAPI { /** - * Initializes Twilio SendGrid - * - * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys + * Initialize the client. + * + * @param auth authorization header value + * @param host the base URL for the API */ - void initializeSendGrid(String apiKey); + void initialize(final String auth, final String host); /** - * Returns the library version - * - * @return the library version. + * Get the current library version. + * + * @return the current version */ String getLibraryVersion(); /** - * Gets the version. + * Get the API version. * - * @return returns the version. + * @return the current API version */ String getVersion(); /** - * Sets the version. - * - * @param version the Twilio SendGrid version. + * Set the API version. + * + * @param version the new version */ - void setVersion(String version); + void setVersion(final String version); /** - * Gets the request headers. - * @return returns a map of request headers. + * Get the request headers. + * + * @return the request headers */ Map getRequestHeaders(); /** - * Adds a request headers. - * - * @param key the key - * @param value the value - * @return returns a map of request headers. + * Add/update a request header. + * + * @param key the header key + * @param value the header value + * @return the new set of request headers */ - Map addRequestHeader(String key, String value); + Map addRequestHeader(final String key, final String value); /** - * Removes a request headers. - * - * @param key the key - * @return returns a map of request headers. + * Remove a request header. + * + * @param key the header key to remove + * @return the new set of request headers */ - Map removeRequestHeader(String key); + Map removeRequestHeader(final String key); /** - * Gets the host. - * - * @return returns the host. + * Get the host. + * + * @return the host */ String getHost(); /** - * Sets the host. - * - * @param host the host to set + * Set the host. + * + * @param host the new host */ - void setHost(String host); + void setHost(final String host); /** - * Class makeCall makes the call to the Twilio SendGrid API, override this method for - * testing. - * - * @param request the request - * @return returns a response. - * @throws IOException in case of network or marshal error. + * Makes the call to the Twilio SendGrid API, override this method for testing. + * + * @param request the request to make + * @return the response object + * @throws IOException in case of a network error */ - Response makeCall(Request request) throws IOException; + Response makeCall(final Request request) throws IOException; /** * Class api sets up the request to the Twilio SendGrid API, this is main interface. - * - * @param request the request - * @return returns a response. - * @throws IOException in case of network or marshal error. + * + * @param request the request object + * @return the response object + * @throws IOException in case of a network error */ - Response api(Request request) throws IOException; + Response api(final Request request) throws IOException; } diff --git a/src/main/java/com/sendgrid/TwilioEmail.java b/src/main/java/com/sendgrid/TwilioEmail.java new file mode 100644 index 00000000..d2c79503 --- /dev/null +++ b/src/main/java/com/sendgrid/TwilioEmail.java @@ -0,0 +1,50 @@ +package com.sendgrid; + +import org.apache.commons.codec.binary.Base64; + +/** + * This class allows you to quickly and easily send emails through Twilio + * SendGrid using Java. + */ +public class TwilioEmail extends BaseInterface { + + /** + * Construct a new Twilio SendGrid API wrapper. + * + * @param username your Twilio Email API key SID or Account SID + * @param password your Twilio Email API key secret or Account Auth Token + */ + public TwilioEmail(final String username, final String password) { + initialize(username, password); + } + + /** + * Construct a new Twilio SendGrid API wrapper. + * + * @param username your Twilio Email API key SID or Account SID + * @param password your Twilio Email API key secret or Account Auth Token + * @param client the Client to use (allows to customize its configuration) + */ + public TwilioEmail(final String username, final String password, final Client client) { + super(client); + initialize(username, password); + } + + /** + * Initialize the client. + * + * @param username your Twilio Email API key SID or Account SID + * @param password your Twilio Email API key secret or Account Auth Token + */ + public void initialize(final String username, final String password) { + super.initialize(getAuthString(username, password), "email.twilio.com"); + } + + private String getAuthString(final String username, final String password) { + final String credentials = username + ":" + password; + final byte[] encodedBytes = Base64.encodeBase64(credentials.getBytes()); + final String encoderString = new String(encodedBytes); + + return "Basic " + encoderString; + } +} diff --git a/src/test/java/com/sendgrid/TwilioEmailTest.java b/src/test/java/com/sendgrid/TwilioEmailTest.java new file mode 100644 index 00000000..e07c2ca5 --- /dev/null +++ b/src/test/java/com/sendgrid/TwilioEmailTest.java @@ -0,0 +1,29 @@ +package com.sendgrid; + +import org.junit.Assert; +import org.junit.Test; + +import java.io.IOException; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class TwilioEmailTest { + + @Test + public void testInitialization() { + final TwilioEmail sg = new TwilioEmail("username", "password"); + Assert.assertEquals("email.twilio.com", sg.getHost()); + Assert.assertEquals("Basic dXNlcm5hbWU6cGFzc3dvcmQ=", sg.getRequestHeaders().get("Authorization")); + } + + @Test + public void testConstructWithClient() throws IOException { + final Client client = mock(Client.class); + final TwilioEmail sg = new TwilioEmail("username", "password", client); + final Request request = new Request(); + + sg.makeCall(request); + verify(client).api(request); + } +} From 2104e0e10021107b76f7d2638e2a74d6f6e1c228 Mon Sep 17 00:00:00 2001 From: Anuj Shah Date: Thu, 7 May 2020 15:06:47 -0700 Subject: [PATCH 278/439] feat: verify signature from event webhook (#622) * signature-verification: verify signature from event webhook * signature-verification: code review * signature-verification: add an example * signature-verification: package renaming and updated examples * signature-verification: code review updates * signature-verification: consistent sample data across SDKs --- examples/helpers/eventwebhook/Example.java | 27 ++++++++ pom.xml | 5 ++ .../helpers/eventwebhook/EventWebhook.java | 68 +++++++++++++++++++ .../eventwebhook/EventWebhookHeader.java | 20 ++++++ .../eventwebhook/EventWebhookTest.java | 27 ++++++++ 5 files changed, 147 insertions(+) create mode 100644 examples/helpers/eventwebhook/Example.java create mode 100644 src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java create mode 100644 src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhookHeader.java create mode 100644 src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java diff --git a/examples/helpers/eventwebhook/Example.java b/examples/helpers/eventwebhook/Example.java new file mode 100644 index 00000000..786d5902 --- /dev/null +++ b/examples/helpers/eventwebhook/Example.java @@ -0,0 +1,27 @@ +import com.sendgrid.helpers.eventwebhook.EventWebhook; +import java.security.PublicKey; +import java.security.Security; +import java.security.interfaces.ECPublicKey; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +public class Example { + + public static void main(String[] args) { + Security.addProvider(new BouncyCastleProvider()); + + try { + String publicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEDr2LjtURuePQzplybdC+u4CwrqDqBaWjcMMsTbhdbcwHBcepxo7yAQGhHPTnlvFYPAZFceEu/1FwCM/QmGUhA=="; + String payload = "{\"category\":\"example_payload\",\"event\":\"test_event\",\"message_id\":\"message_id\"}"; + String signature = "MEUCIQCtIHJeH93Y+qpYeWrySphQgpNGNr/U+UyUlBkU6n7RAwIgJTz2C+8a8xonZGi6BpSzoQsbVRamr2nlxFDWYNH2j/0="; + String timestamp = "1588788367"; + EventWebhook ew = new EventWebhook(); + ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(publicKey); + boolean valid = ew.VerifySignature(ellipticCurvePublicKey, payload, signature, timestamp); + System.out.println("Valid Signature: " + valid); + } catch (Exception exception) { + Logger.getLogger(Example.class.getName()).log(Level.SEVERE, "something went wrong", exception); + } + } +} diff --git a/pom.xml b/pom.xml index 3463b417..c7bb48e2 100644 --- a/pom.xml +++ b/pom.xml @@ -303,5 +303,10 @@ 2.1.0 test + + org.bouncycastle + bcprov-jdk15on + 1.65 + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java new file mode 100644 index 00000000..6e52bd38 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java @@ -0,0 +1,68 @@ +package com.sendgrid.helpers.eventwebhook; + +import java.security.InvalidKeyException; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.Signature; +import java.security.SignatureException; +import java.security.interfaces.ECPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; + +/** + * This class allows you to easily use the Event Webhook feature. Read the docs + * for more details: + * https://sendgrid.com/docs/for-developers/tracking-events/event. + */ +public class EventWebhook { + /** + * Convert the public key string to a ECPublicKey. + * + * @param publicKey: verification key under Mail Settings + * @return a public key using the ECDSA algorithm + * @throws NoSuchAlgorithmException + * @throws NoSuchProviderException + * @throws InvalidKeySpecException + */ + public java.security.interfaces.ECPublicKey ConvertPublicKeyToECDSA(String publicKey) + throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException { + byte[] publicKeyInBytes = Base64.getDecoder().decode(publicKey); + KeyFactory factory = KeyFactory.getInstance("ECDSA", "BC"); + return (ECPublicKey) factory.generatePublic(new X509EncodedKeySpec(publicKeyInBytes)); + } + + /** + * Verify signed event webhook requests. + * + * @param publicKey: elliptic curve public key + * @param payload: event payload in the request body + * @param signature: value obtained from the + * 'X-Twilio-Email-Event-Webhook-Signature' header + * @param timestamp: value obtained from the + * 'X-Twilio-Email-Event-Webhook-Timestamp' header + * @return true or false if signature is valid + * @throws NoSuchAlgorithmException + * @throws NoSuchProviderException + * @throws InvalidKeyException + * @throws SignatureException + */ + public boolean VerifySignature(ECPublicKey publicKey, String payload, String signature, String timestamp) + throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException { + + // prepend the payload with the timestamp + String payloadWithTimestamp = timestamp + payload; + + // create the signature object + Signature signatureObject = Signature.getInstance("SHA256withECDSA", "BC"); + signatureObject.initVerify(publicKey); + signatureObject.update(payloadWithTimestamp.getBytes()); + + // decode the signature + byte[] signatureInBytes = Base64.getDecoder().decode(signature); + + // verify the signature + return signatureObject.verify(signatureInBytes); + } +} diff --git a/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhookHeader.java b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhookHeader.java new file mode 100644 index 00000000..7bdc422c --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhookHeader.java @@ -0,0 +1,20 @@ +package com.sendgrid.helpers.eventwebhook; + +/** + * This enum lists headers that get posted to the webhook. Read the docs for + * more details: https://sendgrid.com/docs/for-developers/tracking-events/event. + */ +public enum EventWebhookHeader { + SIGNATURE("X-Twilio-Email-Event-Webhook-Signature"), TIMESTAMP("X-Twilio-Email-Event-Webhook-Timestamp"); + + public final String name; + + EventWebhookHeader(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java b/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java new file mode 100644 index 00000000..434201bb --- /dev/null +++ b/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java @@ -0,0 +1,27 @@ +package com.sendgrid.helpers.eventwebhook; + +import java.security.Security; +import java.security.interfaces.ECPublicKey; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Assert; +import org.junit.Test; + +public class EventWebhookTest { + @Test + public void testVerifySignature() throws Exception { + + Security.addProvider(new BouncyCastleProvider()); + + String testPublicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEDr2LjtURuePQzplybdC+u4CwrqDqBaWjcMMsTbhdbcwHBcepxo7yAQGhHPTnlvFYPAZFceEu/1FwCM/QmGUhA=="; + String testPayload = "{\"category\":\"example_payload\",\"event\":\"test_event\",\"message_id\":\"message_id\"}"; + String testSignature = "MEUCIQCtIHJeH93Y+qpYeWrySphQgpNGNr/U+UyUlBkU6n7RAwIgJTz2C+8a8xonZGi6BpSzoQsbVRamr2nlxFDWYNH2j/0="; + String testTimestamp = "1588788367"; + + EventWebhook ew = new EventWebhook(); + ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(testPublicKey); + boolean isValidSignature = ew.VerifySignature(ellipticCurvePublicKey, testPayload, testSignature, + testTimestamp); + + Assert.assertTrue(isValidSignature); + } +} From 83e58d36969c40d025d911f8dab5e2e40d1b2aaf Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 13 May 2020 19:45:09 +0000 Subject: [PATCH 279/439] [Librarian] Version Bump --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dc16ffc..342d5a09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-05-13] Version 4.5.0 +-------------------------- +**Library - Feature** +- [PR #622](https://github.com/sendgrid/sendgrid-java/pull/622): verify signature from event webhook. Thanks to [@anujs3](https://github.com/anujs3)! +- [PR #621](https://github.com/sendgrid/sendgrid-java/pull/621): add support for Twilio Email. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-04-15] Version 4.4.8 -------------------------- **Library - Fix** From 810be077e969a038290192f94807a0d35fc4e050 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 13 May 2020 20:09:20 +0000 Subject: [PATCH 280/439] Release 4.5.0 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 14 +++++++------- src/main/java/com/sendgrid/BaseInterface.java | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7b6b97a3..e96c2960 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.8/sendgrid-4.4.8-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.8/sendgrid-4.4.8-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.5.0/sendgrid-4.5.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.5.0/sendgrid-4.5.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index d5d5e5ff..8caf5d24 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.4.8 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.5.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.8' + implementation 'com.sendgrid:sendgrid-java:4.5.0' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.8/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.5.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index c7bb48e2..d0ff2d07 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.8 + 4.5.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.8 + 4.5.0 @@ -303,10 +303,10 @@ 2.1.0 test - - org.bouncycastle - bcprov-jdk15on - 1.65 - + + org.bouncycastle + bcprov-jdk15on + 1.65 + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 0b87b528..d4813ecf 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "3.0.0"; + private static final String VERSION = "4.5.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; From feabd2cde80c9d067f84319e0eb981c112b22649 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 13 May 2020 16:24:52 -0700 Subject: [PATCH 281/439] fix: library version test --- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 92c0b4a2..2045a937 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "3.0.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.5.0"); } @Test From b50129fc9b240113e3cbc5db7a98ecbf1a70682e Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Fri, 29 May 2020 10:03:10 -0500 Subject: [PATCH 282/439] docs: shorten and correct the issue template link --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e96c2960..30240905 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,7 +48,7 @@ Before you decide to create a new issue, please try the following: ### Please use our Bug Report Template -In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/ISSUE_TEMPLATE.md) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. +In order to make the process easier, we've included a [sample bug report template](ISSUE_TEMPLATE.md). ## Improvements to the Codebase From 217e6ed1f0346dfded6f62532301869ff42d7636 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Wed, 3 Jun 2020 13:26:09 -0500 Subject: [PATCH 283/439] feat: add prism Docker setup (#626) --- .gitignore | 1 + .travis.yml | 30 +- CONTRIBUTING.md | 20 +- Dockerfile | 21 + Makefile | 13 +- docker/Dockerfile | 24 - docker/README.md | 31 - docker/USAGE.md | 32 - docker/entrypoint.sh | 31 - scripts/startPrism.sh | 58 -- src/test/java/com/sendgrid/SendGridTest.java | 711 ++++++------------- test/prism.sh | 42 -- 12 files changed, 272 insertions(+), 742 deletions(-) create mode 100644 Dockerfile delete mode 100644 docker/Dockerfile delete mode 100644 docker/README.md delete mode 100644 docker/USAGE.md delete mode 100644 docker/entrypoint.sh delete mode 100755 scripts/startPrism.sh delete mode 100755 test/prism.sh diff --git a/.gitignore b/.gitignore index fa35c4dd..12b0a405 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ examples/Example.java .vscode sendgrid-java.jar dependency-reduced-pom.xml +prism* diff --git a/.travis.yml b/.travis.yml index db96dad8..7becc3f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,35 +1,19 @@ language: java before_install: - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true -matrix: - include: - - jdk: openjdk7 - dist: trusty - - jdk: openjdk8 - dist: xenial - - jdk: openjdk11 - dist: xenial - - jdk: oraclejdk7 - dist: precise - - jdk: oraclejdk8 - dist: trusty - - jdk: oraclejdk11 - dist: trusty - allow_failures: - - jdk: openjdk7 - - jdk: oraclejdk7 -before_script: - - "./scripts/startPrism.sh &" - - sleep 20 -install: - - mvn --settings .maven.xml install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V +env: + - version=8 + - version=11 +script: + - make test-docker + deploy: - provider: script script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease edge: true on: tags: true - jdk: openjdk8 + condition: $version = 8 branch: master notifications: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 30240905..8367539d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -128,25 +128,9 @@ All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tr For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. -1. Download [prism](http://stoplight.io/platform/prism/) for your platform ([Mac OS X](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_darwin_amd64), [Linux](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_linux_amd64), [Windows](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_windows_amd64.exe)) and save the binary to the sendgrid-java directory (or any directory you would like. The sendgrid-java directory is chosen mostly for convenience.) +The integration tests require a Twilio SendGrid mock API in order to execute. We've simplified setting this up using Docker to run the tests. You will just need [Docker Desktop](https://docs.docker.com/get-docker/) and `make`. -1. Add execute permissions - - ```bash - chmod +x prism - ``` - -1. In a separate terminal, cd into the directory you chose for prism and start the sendgrid local server which the tests will use. - - ```bash - ./prism run --mock --list --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json - ``` - -1. Now you can run the test suite from the root of the project - - ```bash - ./gradlew test -i - ``` +Once these are available, simply execute the Docker test target to run all tests: `make test-docker`. This command can also be used to open an interactive shell into the container where this library is installed. To start a *bash* shell for example, use this command: `command=bash make test-docker`. ## Style Guidelines & Naming Conventions diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..6587fff8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +ARG version=latest +FROM openjdk:$version + +# version <= 11 +RUN apt-get update \ + && apt-get install -y make maven || true +COPY prism/prism/nginx/cert.crt /usr/local/share/ca-certificates/cert.crt +RUN update-ca-certificates || true + +# version > 11 +RUN yum update -y \ + && yum install -y make wget || true +RUN wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo \ + && yum install -y maven || true +RUN keytool -import -trustcacerts -cacerts -storepass changeit -noprompt \ + -alias api.sendgrid.com -file /usr/local/share/ca-certificates/cert.crt || true + +WORKDIR /app +COPY . . + +RUN make install diff --git a/Makefile b/Makefile index 36295ba5..a7e6c434 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,20 @@ -.PHONY: install test test-integration clean +.PHONY: install test test-integ test-docker clean VERSION := $(shell mvn help:evaluate -Dexpression=project.version --batch-mode | grep -e '^[^\[]') install: @java -version || (echo "Java is not installed, please install Java >= 7"; exit 1); - mvn clean install -DskipTests=true -Dgpg.skip -B + mvn clean install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B cp target/sendgrid-java-$(VERSION)-shaded.jar sendgrid-java.jar test: mvn test -test-integration: - ./scripts/startPrism.sh & - sleep 5 +test-integ: test + +version ?= latest +test-docker: + curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/prism/prism.sh -o prism.sh + version=$(version) bash ./prism.sh clean: mvn clean diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index cc4ce776..00000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM store/oracle/serverjre:8 - -ENV OAI_SPEC_URL="https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json" - -RUN yum install -y git - -WORKDIR /root - -# install Prism -ADD https://raw.githubusercontent.com/stoplightio/prism/master/install install.sh -RUN chmod +x ./install.sh && \ - ./install.sh && \ - rm ./install.sh - -# Set up default Twilio SendGrid env -WORKDIR /root/sources -RUN git clone https://github.com/sendgrid/sendgrid-java.git -WORKDIR /root -RUN ln -s /root/sources/sendgrid-java - -COPY entrypoint.sh entrypoint.sh -RUN chmod +x entrypoint.sh -ENTRYPOINT ["./entrypoint.sh"] -CMD ["--mock"] diff --git a/docker/README.md b/docker/README.md deleted file mode 100644 index dccc98cf..00000000 --- a/docker/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Supported tags and respective `Dockerfile` links - - `v1.0.0`, `latest` [(Dockerfile)](https://github.com/sendgrid/sendgrid-java/blob/master/docker/Dockerfile) - -# Quick reference -Due to Oracle's JDK license, you must build this Docker image using the official Oracle image located in the Docker Store. You will need a Docker store account. Once you have an account, you must accept the Oracle license [here](https://store.docker.com/images/oracle-serverjre-8). On the command line, type `docker login` and provide your credentials. You may then build the image using this command `docker build -t sendgrid/sendgrid-java -f Dockerfile .` - - - **Where to get help:** - [Contact Twilio SendGrid Support](https://support.sendgrid.com/hc/en-us) - - - **Where to file issues:** - https://github.com/sendgrid/sendgrid-java/issues - - - **Where to get more info:** - [USAGE.md](https://github.com/sendgrid/sendgrid-java/blob/master/docker/USAGE.md) - - - **Maintained by:** - [Twilio SendGrid Inc.](https://sendgrid.com) - -# Usage examples - - Most recent version: `docker run -it sendgrid/sendgrid-java`. - - Your own fork: - ```sh-session - $ git clone https://github.com/you/cool-sendgrid-java.git - $ realpath cool-sendgrid-java - /path/to/cool-sendgrid-java - $ docker run -it -v /path/to/cool-sendgrid-java:/mnt/sendgrid-java sendgrid/sendgrid-java - ``` - -For more detailed information, see [USAGE.md](https://github.com/sendgrid/sendgrid-java/blob/master/docker/USAGE.md). - -![SendGrid Logo](https://github.com/sendgrid/sendgrid-python/raw/master/twilio_sendgrid_logo.png) diff --git a/docker/USAGE.md b/docker/USAGE.md deleted file mode 100644 index dab8ed36..00000000 --- a/docker/USAGE.md +++ /dev/null @@ -1,32 +0,0 @@ -You can use Docker to easily try out or test sendgrid-java. - - -# Quickstart - -1. Install Docker on your machine. -2. If you have not done so, create a Docker Store account [here](https://store.docker.com/signup?next=%2F) -3. Navigate [here](https://store.docker.com/images/oracle-serverjre-8) and click the "Proceed to Checkout" link (don't worry, it's free). -4. On the command line, execute `docker login` and provide your credentials. -5. Build the Docker image using the command `docker build -t sendgrid/sendgrid-java -f Dockerfile .` -6. Run `docker run -it sendgrid/sendgrid-java`. - - -# Info - -This Docker image contains - - `sendgrid-java` - - Stoplight's Prism, which lets you try out the API without actually sending email - -Run it in interactive mode with `-it`. - -You can mount repositories in the `/mnt/sendgrid-java` and `/mnt/java-http-client` directories to use them instead of the default Twilio SendGrid libraries. Read on for more info. - - -# Testing -Testing is easy! -1. Run the container: `docker run -it sendgrid/sendgrid-java` -2. `cd sendgrid-java` -3. run `./gradlew test` - -![SendGrid Logo](https://github.com/sendgrid/sendgrid-python/raw/master/twilio_sendgrid_logo.png) - diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh deleted file mode 100644 index 556d85bd..00000000 --- a/docker/entrypoint.sh +++ /dev/null @@ -1,31 +0,0 @@ -#! /bin/bash -clear - -# check for + link mounted libraries: -if [ -d /mnt/sendgrid-java ] -then - rm /root/sendgrid - ln -s /mnt/sendgrid-java/sendgrid - echo "Linked mounted sendgrid-java's code to /root/sendgrid" -fi - -SENDGRID_JAVA_VERSION="1.0.0" -echo "Welcome to sendgrid-java docker v${SENDGRID_JAVA_VERSION}." -echo - -if [ "$1" != "--no-mock" ] -then - echo "Starting Prism in mock mode. Calls made to Prism will not actually send emails." - echo "Disable this by running this container with --no-mock." - prism run --mock --spec $OAI_SPEC_URL 2> /dev/null & -else - echo "Starting Prism in live (--no-mock) mode. Calls made to Prism will send emails." - prism run --spec $OAI_SPEC_URL 2> /dev/null & -fi -echo "To use Prism, make API calls to localhost:4010. For example," -echo " sg = sendgrid.SendGridAPIClient(" -echo " host='http://localhost:4010/'," -echo " api_key=os.environ.get('SENDGRID_API_KEY_CAMPAIGNS'))" -echo "To stop Prism, run \"kill $!\" from the shell." - -bash \ No newline at end of file diff --git a/scripts/startPrism.sh b/scripts/startPrism.sh deleted file mode 100755 index 53923593..00000000 --- a/scripts/startPrism.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash - -set -eu - -install () { - -echo "Installing Prism..." - -UNAME=$(uname) -ARCH=$(uname -m) -if [ "$UNAME" != "Linux" ] && [ "$UNAME" != "Darwin" ] && [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i686" ]; then - echo "Sorry, OS/Architecture not supported: ${UNAME}/${ARCH}. Download binary from https://github.com/stoplightio/prism/releases" - exit 1 -fi - -if [ "$UNAME" = "Darwin" ] ; then - OSX_ARCH=$(uname -m) - if [ "${OSX_ARCH}" = "x86_64" ] ; then - PLATFORM="darwin_amd64" - fi -elif [ "$UNAME" = "Linux" ] ; then - LINUX_ARCH=$(uname -m) - if [ "${LINUX_ARCH}" = "i686" ] ; then - PLATFORM="linux_386" - elif [ "${LINUX_ARCH}" = "x86_64" ] ; then - PLATFORM="linux_amd64" - fi -fi - -mkdir -p ../prism/bin -#LATEST=$(curl -s https://api.github.com/repos/stoplightio/prism/tags | grep -Eo '"name":.*?[^\\]",' | head -n 1 | sed 's/[," ]//g' | cut -d ':' -f 2) -LATEST="v0.6.21" -URL="https://github.com/stoplightio/prism/releases/download/$LATEST/prism_$PLATFORM" -DEST=../prism/bin/prism - -if [ -z $LATEST ] ; then - echo "Error requesting. Download binary from ${URL}" - exit 1 -else - curl -L $URL -o $DEST - chmod +x $DEST -fi -} - -run () { - echo "Running prism..." - cd ../prism/bin - ./prism run --mock --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json -} - -if [ -f ../prism/bin/prism ]; then - echo "Prism is already installed." - run -else - echo "Prism is not installed." - install - run -fi diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 2045a937..0dc2a86e 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -92,14 +92,7 @@ public void testRateLimitSleep() { @Test public void test_async() { final Object sync = new Object(); - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -137,14 +130,7 @@ public void response(Response response) { @Test public void test_async_rate_limit() { final Object sync = new Object(); - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "429"); Request request = new Request(); @@ -177,8 +163,7 @@ public void response(Response response) { @Test public void test_access_settings_activity_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -191,8 +176,7 @@ public void test_access_settings_activity_get() throws IOException { @Test public void test_access_settings_whitelist_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -205,8 +189,7 @@ public void test_access_settings_whitelist_post() throws IOException { @Test public void test_access_settings_whitelist_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -218,8 +201,7 @@ public void test_access_settings_whitelist_get() throws IOException { @Test public void test_access_settings_whitelist_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -232,8 +214,7 @@ public void test_access_settings_whitelist_delete() throws IOException { @Test public void test_access_settings_whitelist__rule_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -245,8 +226,7 @@ public void test_access_settings_whitelist__rule_id__get() throws IOException { @Test public void test_access_settings_whitelist__rule_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -258,8 +238,7 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException @Test public void test_alerts_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -272,8 +251,7 @@ public void test_alerts_post() throws IOException { @Test public void test_alerts_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -285,8 +263,7 @@ public void test_alerts_get() throws IOException { @Test public void test_alerts__alert_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -299,8 +276,7 @@ public void test_alerts__alert_id__patch() throws IOException { @Test public void test_alerts__alert_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -312,8 +288,7 @@ public void test_alerts__alert_id__get() throws IOException { @Test public void test_alerts__alert_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -325,8 +300,7 @@ public void test_alerts__alert_id__delete() throws IOException { @Test public void test_api_keys_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -339,8 +313,7 @@ public void test_api_keys_post() throws IOException { @Test public void test_api_keys_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -353,8 +326,7 @@ public void test_api_keys_get() throws IOException { @Test public void test_api_keys__api_key_id__put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -367,8 +339,7 @@ public void test_api_keys__api_key_id__put() throws IOException { @Test public void test_api_keys__api_key_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -381,8 +352,7 @@ public void test_api_keys__api_key_id__patch() throws IOException { @Test public void test_api_keys__api_key_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -394,8 +364,7 @@ public void test_api_keys__api_key_id__get() throws IOException { @Test public void test_api_keys__api_key_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -407,8 +376,7 @@ public void test_api_keys__api_key_id__delete() throws IOException { @Test public void test_asm_groups_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -421,8 +389,7 @@ public void test_asm_groups_post() throws IOException { @Test public void test_asm_groups_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -435,8 +402,7 @@ public void test_asm_groups_get() throws IOException { @Test public void test_asm_groups__group_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -449,8 +415,7 @@ public void test_asm_groups__group_id__patch() throws IOException { @Test public void test_asm_groups__group_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -462,8 +427,7 @@ public void test_asm_groups__group_id__get() throws IOException { @Test public void test_asm_groups__group_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -475,8 +439,7 @@ public void test_asm_groups__group_id__delete() throws IOException { @Test public void test_asm_groups__group_id__suppressions_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -489,8 +452,7 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { @Test public void test_asm_groups__group_id__suppressions_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -502,8 +464,7 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { @Test public void test_asm_groups__group_id__suppressions_search_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -516,8 +477,7 @@ public void test_asm_groups__group_id__suppressions_search_post() throws IOExcep @Test public void test_asm_groups__group_id__suppressions__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -529,8 +489,7 @@ public void test_asm_groups__group_id__suppressions__email__delete() throws IOEx @Test public void test_asm_suppressions_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -542,8 +501,7 @@ public void test_asm_suppressions_get() throws IOException { @Test public void test_asm_suppressions_global_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -556,8 +514,7 @@ public void test_asm_suppressions_global_post() throws IOException { @Test public void test_asm_suppressions_global__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -569,8 +526,7 @@ public void test_asm_suppressions_global__email__get() throws IOException { @Test public void test_asm_suppressions_global__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -582,8 +538,7 @@ public void test_asm_suppressions_global__email__delete() throws IOException { @Test public void test_asm_suppressions__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -595,8 +550,7 @@ public void test_asm_suppressions__email__get() throws IOException { @Test public void test_browsers_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -614,8 +568,7 @@ public void test_browsers_stats_get() throws IOException { @Test public void test_campaigns_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -628,8 +581,7 @@ public void test_campaigns_post() throws IOException { @Test public void test_campaigns_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -643,8 +595,7 @@ public void test_campaigns_get() throws IOException { @Test public void test_campaigns__campaign_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -657,8 +608,7 @@ public void test_campaigns__campaign_id__patch() throws IOException { @Test public void test_campaigns__campaign_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -670,8 +620,7 @@ public void test_campaigns__campaign_id__get() throws IOException { @Test public void test_campaigns__campaign_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -683,8 +632,7 @@ public void test_campaigns__campaign_id__delete() throws IOException { @Test public void test_campaigns__campaign_id__schedules_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -697,8 +645,7 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { @Test public void test_campaigns__campaign_id__schedules_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -711,8 +658,7 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { @Test public void test_campaigns__campaign_id__schedules_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -724,8 +670,7 @@ public void test_campaigns__campaign_id__schedules_get() throws IOException { @Test public void test_campaigns__campaign_id__schedules_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -737,8 +682,7 @@ public void test_campaigns__campaign_id__schedules_delete() throws IOException { @Test public void test_campaigns__campaign_id__schedules_now_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -750,8 +694,7 @@ public void test_campaigns__campaign_id__schedules_now_post() throws IOException @Test public void test_campaigns__campaign_id__schedules_test_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -764,8 +707,7 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio @Test public void test_categories_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -780,8 +722,7 @@ public void test_categories_get() throws IOException { @Test public void test_categories_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -799,8 +740,7 @@ public void test_categories_stats_get() throws IOException { @Test public void test_categories_stats_sums_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -819,8 +759,7 @@ public void test_categories_stats_sums_get() throws IOException { @Test public void test_clients_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -835,8 +774,7 @@ public void test_clients_stats_get() throws IOException { @Test public void test_clients__client_type__stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -851,8 +789,7 @@ public void test_clients__client_type__stats_get() throws IOException { @Test public void test_contactdb_custom_fields_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -865,8 +802,7 @@ public void test_contactdb_custom_fields_post() throws IOException { @Test public void test_contactdb_custom_fields_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -878,8 +814,7 @@ public void test_contactdb_custom_fields_get() throws IOException { @Test public void test_contactdb_custom_fields__custom_field_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -891,8 +826,7 @@ public void test_contactdb_custom_fields__custom_field_id__get() throws IOExcept @Test public void test_contactdb_custom_fields__custom_field_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -904,8 +838,7 @@ public void test_contactdb_custom_fields__custom_field_id__delete() throws IOExc @Test public void test_contactdb_lists_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -918,8 +851,7 @@ public void test_contactdb_lists_post() throws IOException { @Test public void test_contactdb_lists_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -931,8 +863,7 @@ public void test_contactdb_lists_get() throws IOException { @Test public void test_contactdb_lists_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -945,8 +876,7 @@ public void test_contactdb_lists_delete() throws IOException { @Test public void test_contactdb_lists__list_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -960,8 +890,7 @@ public void test_contactdb_lists__list_id__patch() throws IOException { @Test public void test_contactdb_lists__list_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -974,8 +903,7 @@ public void test_contactdb_lists__list_id__get() throws IOException { @Test public void test_contactdb_lists__list_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -988,8 +916,7 @@ public void test_contactdb_lists__list_id__delete() throws IOException { @Test public void test_contactdb_lists__list_id__recipients_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1002,8 +929,7 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException @Test public void test_contactdb_lists__list_id__recipients_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1018,8 +944,7 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { @Test public void test_contactdb_lists__list_id__recipients__recipient_id__post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1031,8 +956,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__post() thro @Test public void test_contactdb_lists__list_id__recipients__recipient_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1046,8 +970,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th @Test public void test_contactdb_recipients_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1060,8 +983,7 @@ public void test_contactdb_recipients_patch() throws IOException { @Test public void test_contactdb_recipients_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1074,8 +996,7 @@ public void test_contactdb_recipients_post() throws IOException { @Test public void test_contactdb_recipients_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1089,8 +1010,7 @@ public void test_contactdb_recipients_get() throws IOException { @Test public void test_contactdb_recipients_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1103,8 +1023,7 @@ public void test_contactdb_recipients_delete() throws IOException { @Test public void test_contactdb_recipients_billable_count_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1116,8 +1035,7 @@ public void test_contactdb_recipients_billable_count_get() throws IOException { @Test public void test_contactdb_recipients_count_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1129,8 +1047,7 @@ public void test_contactdb_recipients_count_get() throws IOException { @Test public void test_contactdb_recipients_search_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1143,8 +1060,7 @@ public void test_contactdb_recipients_search_get() throws IOException { @Test public void test_contactdb_recipients__recipient_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1156,8 +1072,7 @@ public void test_contactdb_recipients__recipient_id__get() throws IOException { @Test public void test_contactdb_recipients__recipient_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1169,8 +1084,7 @@ public void test_contactdb_recipients__recipient_id__delete() throws IOException @Test public void test_contactdb_recipients__recipient_id__lists_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1182,8 +1096,7 @@ public void test_contactdb_recipients__recipient_id__lists_get() throws IOExcept @Test public void test_contactdb_reserved_fields_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1195,8 +1108,7 @@ public void test_contactdb_reserved_fields_get() throws IOException { @Test public void test_contactdb_segments_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1209,8 +1121,7 @@ public void test_contactdb_segments_post() throws IOException { @Test public void test_contactdb_segments_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1222,8 +1133,7 @@ public void test_contactdb_segments_get() throws IOException { @Test public void test_contactdb_segments__segment_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1237,8 +1147,7 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { @Test public void test_contactdb_segments__segment_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1251,8 +1160,7 @@ public void test_contactdb_segments__segment_id__get() throws IOException { @Test public void test_contactdb_segments__segment_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1265,8 +1173,7 @@ public void test_contactdb_segments__segment_id__delete() throws IOException { @Test public void test_contactdb_segments__segment_id__recipients_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1280,8 +1187,7 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep @Test public void test_devices_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1298,8 +1204,7 @@ public void test_devices_stats_get() throws IOException { @Test public void test_geo_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1317,8 +1222,7 @@ public void test_geo_stats_get() throws IOException { @Test public void test_ips_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1335,8 +1239,7 @@ public void test_ips_get() throws IOException { @Test public void test_ips_assigned_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1348,8 +1251,7 @@ public void test_ips_assigned_get() throws IOException { @Test public void test_ips_pools_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1362,8 +1264,7 @@ public void test_ips_pools_post() throws IOException { @Test public void test_ips_pools_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1375,8 +1276,7 @@ public void test_ips_pools_get() throws IOException { @Test public void test_ips_pools__pool_name__put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1389,8 +1289,7 @@ public void test_ips_pools__pool_name__put() throws IOException { @Test public void test_ips_pools__pool_name__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1402,8 +1301,7 @@ public void test_ips_pools__pool_name__get() throws IOException { @Test public void test_ips_pools__pool_name__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1415,8 +1313,7 @@ public void test_ips_pools__pool_name__delete() throws IOException { @Test public void test_ips_pools__pool_name__ips_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1429,8 +1326,7 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { @Test public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1442,8 +1338,7 @@ public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { @Test public void test_ips_warmup_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1456,8 +1351,7 @@ public void test_ips_warmup_post() throws IOException { @Test public void test_ips_warmup_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1469,8 +1363,7 @@ public void test_ips_warmup_get() throws IOException { @Test public void test_ips_warmup__ip_address__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1482,8 +1375,7 @@ public void test_ips_warmup__ip_address__get() throws IOException { @Test public void test_ips_warmup__ip_address__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1495,8 +1387,7 @@ public void test_ips_warmup__ip_address__delete() throws IOException { @Test public void test_ips__ip_address__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1508,8 +1399,7 @@ public void test_ips__ip_address__get() throws IOException { @Test public void test_mail_batch_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1521,8 +1411,7 @@ public void test_mail_batch_post() throws IOException { @Test public void test_mail_batch__batch_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1534,8 +1423,7 @@ public void test_mail_batch__batch_id__get() throws IOException { @Test public void test_mail_send_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -1548,8 +1436,7 @@ public void test_mail_send_post() throws IOException { @Test public void test_mail_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1563,8 +1450,7 @@ public void test_mail_settings_get() throws IOException { @Test public void test_mail_settings_address_whitelist_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1577,8 +1463,7 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { @Test public void test_mail_settings_address_whitelist_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1590,8 +1475,7 @@ public void test_mail_settings_address_whitelist_get() throws IOException { @Test public void test_mail_settings_bcc_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1604,8 +1488,7 @@ public void test_mail_settings_bcc_patch() throws IOException { @Test public void test_mail_settings_bcc_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1617,8 +1500,7 @@ public void test_mail_settings_bcc_get() throws IOException { @Test public void test_mail_settings_bounce_purge_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1631,8 +1513,7 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { @Test public void test_mail_settings_bounce_purge_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1644,8 +1525,7 @@ public void test_mail_settings_bounce_purge_get() throws IOException { @Test public void test_mail_settings_footer_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1658,8 +1538,7 @@ public void test_mail_settings_footer_patch() throws IOException { @Test public void test_mail_settings_footer_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1671,8 +1550,7 @@ public void test_mail_settings_footer_get() throws IOException { @Test public void test_mail_settings_forward_bounce_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1685,8 +1563,7 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { @Test public void test_mail_settings_forward_bounce_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1698,8 +1575,7 @@ public void test_mail_settings_forward_bounce_get() throws IOException { @Test public void test_mail_settings_forward_spam_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1712,8 +1588,7 @@ public void test_mail_settings_forward_spam_patch() throws IOException { @Test public void test_mail_settings_forward_spam_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1725,8 +1600,7 @@ public void test_mail_settings_forward_spam_get() throws IOException { @Test public void test_mail_settings_plain_content_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1739,8 +1613,7 @@ public void test_mail_settings_plain_content_patch() throws IOException { @Test public void test_mail_settings_plain_content_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1752,8 +1625,7 @@ public void test_mail_settings_plain_content_get() throws IOException { @Test public void test_mail_settings_spam_check_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1766,8 +1638,7 @@ public void test_mail_settings_spam_check_patch() throws IOException { @Test public void test_mail_settings_spam_check_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1779,8 +1650,7 @@ public void test_mail_settings_spam_check_get() throws IOException { @Test public void test_mail_settings_template_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1793,8 +1663,7 @@ public void test_mail_settings_template_patch() throws IOException { @Test public void test_mail_settings_template_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1806,8 +1675,7 @@ public void test_mail_settings_template_get() throws IOException { @Test public void test_mailbox_providers_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1825,8 +1693,7 @@ public void test_mailbox_providers_stats_get() throws IOException { @Test public void test_partner_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1840,8 +1707,7 @@ public void test_partner_settings_get() throws IOException { @Test public void test_partner_settings_new_relic_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1854,8 +1720,7 @@ public void test_partner_settings_new_relic_patch() throws IOException { @Test public void test_partner_settings_new_relic_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1867,8 +1732,7 @@ public void test_partner_settings_new_relic_get() throws IOException { @Test public void test_scopes_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1880,8 +1744,7 @@ public void test_scopes_get() throws IOException { @Test public void test_senders_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1894,8 +1757,7 @@ public void test_senders_post() throws IOException { @Test public void test_senders_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1907,8 +1769,7 @@ public void test_senders_get() throws IOException { @Test public void test_senders__sender_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1921,8 +1782,7 @@ public void test_senders__sender_id__patch() throws IOException { @Test public void test_senders__sender_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1934,8 +1794,7 @@ public void test_senders__sender_id__get() throws IOException { @Test public void test_senders__sender_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1947,8 +1806,7 @@ public void test_senders__sender_id__delete() throws IOException { @Test public void test_senders__sender_id__resend_verification_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1960,8 +1818,7 @@ public void test_senders__sender_id__resend_verification_post() throws IOExcepti @Test public void test_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1978,8 +1835,7 @@ public void test_stats_get() throws IOException { @Test public void test_subusers_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1992,8 +1848,7 @@ public void test_subusers_post() throws IOException { @Test public void test_subusers_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2008,8 +1863,7 @@ public void test_subusers_get() throws IOException { @Test public void test_subusers_reputations_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2022,8 +1876,7 @@ public void test_subusers_reputations_get() throws IOException { @Test public void test_subusers_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2041,8 +1894,7 @@ public void test_subusers_stats_get() throws IOException { @Test public void test_subusers_stats_monthly_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2060,8 +1912,7 @@ public void test_subusers_stats_monthly_get() throws IOException { @Test public void test_subusers_stats_sums_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2080,8 +1931,7 @@ public void test_subusers_stats_sums_get() throws IOException { @Test public void test_subusers__subuser_name__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2094,8 +1944,7 @@ public void test_subusers__subuser_name__patch() throws IOException { @Test public void test_subusers__subuser_name__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2107,8 +1956,7 @@ public void test_subusers__subuser_name__delete() throws IOException { @Test public void test_subusers__subuser_name__ips_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2121,8 +1969,7 @@ public void test_subusers__subuser_name__ips_put() throws IOException { @Test public void test_subusers__subuser_name__monitor_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2135,8 +1982,7 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { @Test public void test_subusers__subuser_name__monitor_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2149,8 +1995,7 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { @Test public void test_subusers__subuser_name__monitor_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2162,8 +2007,7 @@ public void test_subusers__subuser_name__monitor_get() throws IOException { @Test public void test_subusers__subuser_name__monitor_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2175,8 +2019,7 @@ public void test_subusers__subuser_name__monitor_delete() throws IOException { @Test public void test_subusers__subuser_name__stats_monthly_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2193,8 +2036,7 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException @Test public void test_suppression_blocks_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2210,8 +2052,7 @@ public void test_suppression_blocks_get() throws IOException { @Test public void test_suppression_blocks_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2224,8 +2065,7 @@ public void test_suppression_blocks_delete() throws IOException { @Test public void test_suppression_blocks__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2237,8 +2077,7 @@ public void test_suppression_blocks__email__get() throws IOException { @Test public void test_suppression_blocks__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2250,8 +2089,7 @@ public void test_suppression_blocks__email__delete() throws IOException { @Test public void test_suppression_bounces_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2265,8 +2103,7 @@ public void test_suppression_bounces_get() throws IOException { @Test public void test_suppression_bounces_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2279,8 +2116,7 @@ public void test_suppression_bounces_delete() throws IOException { @Test public void test_suppression_bounces__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2292,8 +2128,7 @@ public void test_suppression_bounces__email__get() throws IOException { @Test public void test_suppression_bounces__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2306,8 +2141,7 @@ public void test_suppression_bounces__email__delete() throws IOException { @Test public void test_suppression_invalid_emails_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2323,8 +2157,7 @@ public void test_suppression_invalid_emails_get() throws IOException { @Test public void test_suppression_invalid_emails_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2337,8 +2170,7 @@ public void test_suppression_invalid_emails_delete() throws IOException { @Test public void test_suppression_invalid_emails__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2350,8 +2182,7 @@ public void test_suppression_invalid_emails__email__get() throws IOException { @Test public void test_suppression_invalid_emails__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2363,8 +2194,7 @@ public void test_suppression_invalid_emails__email__delete() throws IOException @Test public void test_suppression_spam_report__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2376,8 +2206,7 @@ public void test_suppression_spam_report__email__get() throws IOException { @Test public void test_suppression_spam_report__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2389,8 +2218,7 @@ public void test_suppression_spam_report__email__delete() throws IOException { @Test public void test_suppression_spam_reports_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2406,8 +2234,7 @@ public void test_suppression_spam_reports_get() throws IOException { @Test public void test_suppression_spam_reports_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2420,8 +2247,7 @@ public void test_suppression_spam_reports_delete() throws IOException { @Test public void test_suppression_unsubscribes_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2437,8 +2263,7 @@ public void test_suppression_unsubscribes_get() throws IOException { @Test public void test_templates_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -2451,8 +2276,7 @@ public void test_templates_post() throws IOException { @Test public void test_templates_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2464,8 +2288,7 @@ public void test_templates_get() throws IOException { @Test public void test_templates__template_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2478,8 +2301,7 @@ public void test_templates__template_id__patch() throws IOException { @Test public void test_templates__template_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2491,8 +2313,7 @@ public void test_templates__template_id__get() throws IOException { @Test public void test_templates__template_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2504,8 +2325,7 @@ public void test_templates__template_id__delete() throws IOException { @Test public void test_templates__template_id__versions_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -2518,8 +2338,7 @@ public void test_templates__template_id__versions_post() throws IOException { @Test public void test_templates__template_id__versions__version_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2532,8 +2351,7 @@ public void test_templates__template_id__versions__version_id__patch() throws IO @Test public void test_templates__template_id__versions__version_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2545,8 +2363,7 @@ public void test_templates__template_id__versions__version_id__get() throws IOEx @Test public void test_templates__template_id__versions__version_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2558,8 +2375,7 @@ public void test_templates__template_id__versions__version_id__delete() throws I @Test public void test_templates__template_id__versions__version_id__activate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2571,8 +2387,7 @@ public void test_templates__template_id__versions__version_id__activate_post() t @Test public void test_tracking_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2586,8 +2401,7 @@ public void test_tracking_settings_get() throws IOException { @Test public void test_tracking_settings_click_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2600,8 +2414,7 @@ public void test_tracking_settings_click_patch() throws IOException { @Test public void test_tracking_settings_click_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2613,8 +2426,7 @@ public void test_tracking_settings_click_get() throws IOException { @Test public void test_tracking_settings_google_analytics_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2627,8 +2439,7 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { @Test public void test_tracking_settings_google_analytics_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2640,8 +2451,7 @@ public void test_tracking_settings_google_analytics_get() throws IOException { @Test public void test_tracking_settings_open_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2654,8 +2464,7 @@ public void test_tracking_settings_open_patch() throws IOException { @Test public void test_tracking_settings_open_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2667,8 +2476,7 @@ public void test_tracking_settings_open_get() throws IOException { @Test public void test_tracking_settings_subscription_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2681,8 +2489,7 @@ public void test_tracking_settings_subscription_patch() throws IOException { @Test public void test_tracking_settings_subscription_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2694,8 +2501,7 @@ public void test_tracking_settings_subscription_get() throws IOException { @Test public void test_user_account_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2707,8 +2513,7 @@ public void test_user_account_get() throws IOException { @Test public void test_user_credits_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2720,8 +2525,7 @@ public void test_user_credits_get() throws IOException { @Test public void test_user_email_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2734,8 +2538,7 @@ public void test_user_email_put() throws IOException { @Test public void test_user_email_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2747,8 +2550,7 @@ public void test_user_email_get() throws IOException { @Test public void test_user_password_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2761,8 +2563,7 @@ public void test_user_password_put() throws IOException { @Test public void test_user_profile_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2775,8 +2576,7 @@ public void test_user_profile_patch() throws IOException { @Test public void test_user_profile_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2788,8 +2588,7 @@ public void test_user_profile_get() throws IOException { @Test public void test_user_scheduled_sends_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -2802,8 +2601,7 @@ public void test_user_scheduled_sends_post() throws IOException { @Test public void test_user_scheduled_sends_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2815,8 +2613,7 @@ public void test_user_scheduled_sends_get() throws IOException { @Test public void test_user_scheduled_sends__batch_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2829,8 +2626,7 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { @Test public void test_user_scheduled_sends__batch_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2842,8 +2638,7 @@ public void test_user_scheduled_sends__batch_id__get() throws IOException { @Test public void test_user_scheduled_sends__batch_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2855,8 +2650,7 @@ public void test_user_scheduled_sends__batch_id__delete() throws IOException { @Test public void test_user_settings_enforced_tls_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2869,8 +2663,7 @@ public void test_user_settings_enforced_tls_patch() throws IOException { @Test public void test_user_settings_enforced_tls_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2882,8 +2675,7 @@ public void test_user_settings_enforced_tls_get() throws IOException { @Test public void test_user_username_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2896,8 +2688,7 @@ public void test_user_username_put() throws IOException { @Test public void test_user_username_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2909,8 +2700,7 @@ public void test_user_username_get() throws IOException { @Test public void test_user_webhooks_event_settings_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2923,8 +2713,7 @@ public void test_user_webhooks_event_settings_patch() throws IOException { @Test public void test_user_webhooks_event_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2936,8 +2725,7 @@ public void test_user_webhooks_event_settings_get() throws IOException { @Test public void test_user_webhooks_event_test_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2950,8 +2738,7 @@ public void test_user_webhooks_event_test_post() throws IOException { @Test public void test_user_webhooks_parse_settings_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -2964,8 +2751,7 @@ public void test_user_webhooks_parse_settings_post() throws IOException { @Test public void test_user_webhooks_parse_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2977,8 +2763,7 @@ public void test_user_webhooks_parse_settings_get() throws IOException { @Test public void test_user_webhooks_parse_settings__hostname__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2991,8 +2776,7 @@ public void test_user_webhooks_parse_settings__hostname__patch() throws IOExcept @Test public void test_user_webhooks_parse_settings__hostname__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3004,8 +2788,7 @@ public void test_user_webhooks_parse_settings__hostname__get() throws IOExceptio @Test public void test_user_webhooks_parse_settings__hostname__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3017,8 +2800,7 @@ public void test_user_webhooks_parse_settings__hostname__delete() throws IOExcep @Test public void test_user_webhooks_parse_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3035,8 +2817,7 @@ public void test_user_webhooks_parse_stats_get() throws IOException { @Test public void test_whitelabel_domains_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3049,8 +2830,7 @@ public void test_whitelabel_domains_post() throws IOException { @Test public void test_whitelabel_domains_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3067,8 +2847,7 @@ public void test_whitelabel_domains_get() throws IOException { @Test public void test_whitelabel_domains_default_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3080,8 +2859,7 @@ public void test_whitelabel_domains_default_get() throws IOException { @Test public void test_whitelabel_domains_subuser_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3093,8 +2871,7 @@ public void test_whitelabel_domains_subuser_get() throws IOException { @Test public void test_whitelabel_domains_subuser_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3106,8 +2883,7 @@ public void test_whitelabel_domains_subuser_delete() throws IOException { @Test public void test_whitelabel_domains__domain_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3120,8 +2896,7 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { @Test public void test_whitelabel_domains__domain_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3133,8 +2908,7 @@ public void test_whitelabel_domains__domain_id__get() throws IOException { @Test public void test_whitelabel_domains__domain_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3146,8 +2920,7 @@ public void test_whitelabel_domains__domain_id__delete() throws IOException { @Test public void test_whitelabel_domains__domain_id__subuser_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3160,8 +2933,7 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio @Test public void test_whitelabel_domains__id__ips_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3174,8 +2946,7 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { @Test public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3187,8 +2958,7 @@ public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { @Test public void test_whitelabel_domains__id__validate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3200,8 +2970,7 @@ public void test_whitelabel_domains__id__validate_post() throws IOException { @Test public void test_whitelabel_ips_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3214,8 +2983,7 @@ public void test_whitelabel_ips_post() throws IOException { @Test public void test_whitelabel_ips_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3230,8 +2998,7 @@ public void test_whitelabel_ips_get() throws IOException { @Test public void test_whitelabel_ips__id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3243,8 +3010,7 @@ public void test_whitelabel_ips__id__get() throws IOException { @Test public void test_whitelabel_ips__id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3256,8 +3022,7 @@ public void test_whitelabel_ips__id__delete() throws IOException { @Test public void test_whitelabel_ips__id__validate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3269,8 +3034,7 @@ public void test_whitelabel_ips__id__validate_post() throws IOException { @Test public void test_whitelabel_links_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3285,8 +3049,7 @@ public void test_whitelabel_links_post() throws IOException { @Test public void test_whitelabel_links_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3299,8 +3062,7 @@ public void test_whitelabel_links_get() throws IOException { @Test public void test_whitelabel_links_default_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3313,8 +3075,7 @@ public void test_whitelabel_links_default_get() throws IOException { @Test public void test_whitelabel_links_subuser_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3327,8 +3088,7 @@ public void test_whitelabel_links_subuser_get() throws IOException { @Test public void test_whitelabel_links_subuser_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3341,8 +3101,7 @@ public void test_whitelabel_links_subuser_delete() throws IOException { @Test public void test_whitelabel_links__id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3355,8 +3114,7 @@ public void test_whitelabel_links__id__patch() throws IOException { @Test public void test_whitelabel_links__id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3368,8 +3126,7 @@ public void test_whitelabel_links__id__get() throws IOException { @Test public void test_whitelabel_links__id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3381,8 +3138,7 @@ public void test_whitelabel_links__id__delete() throws IOException { @Test public void test_whitelabel_links__id__validate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3394,8 +3150,7 @@ public void test_whitelabel_links__id__validate_post() throws IOException { @Test public void test_whitelabel_links__link_id__subuser_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); diff --git a/test/prism.sh b/test/prism.sh deleted file mode 100755 index d6e0f251..00000000 --- a/test/prism.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -install () { - -set -eu - -UNAME=$(uname) -ARCH=$(uname -m) -if [ "$UNAME" != "Linux" ] && [ "$UNAME" != "Darwin" ] && [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i686" ]; then - echo "Sorry, OS/Architecture not supported: ${UNAME}/${ARCH}. Download binary from https://github.com/stoplightio/prism/releases" - exit 1 -fi - -if [ "$UNAME" = "Darwin" ] ; then - OSX_ARCH=$(uname -m) - if [ "${OSX_ARCH}" = "x86_64" ] ; then - PLATFORM="darwin_amd64" - fi -elif [ "$UNAME" = "Linux" ] ; then - LINUX_ARCH=$(uname -m) - if [ "${LINUX_ARCH}" = "i686" ] ; then - PLATFORM="linux_386" - elif [ "${LINUX_ARCH}" = "x86_64" ] ; then - PLATFORM="linux_amd64" - fi -fi - -#LATEST=$(curl -s https://api.github.com/repos/stoplightio/prism/tags | grep -Eo '"name":.*?[^\\]",' | head -n 1 | sed 's/[," ]//g' | cut -d ':' -f 2) -LATEST="v0.1.5" -URL="https://github.com/stoplightio/prism/releases/download/$LATEST/prism_$PLATFORM" -DEST=./prism/bin/prism - -if [ -z $LATEST ] ; then - echo "Error requesting. Download binary from ${URL}" - exit 1 -else - curl -L $URL -o $DEST - chmod +x $DEST -fi -} - -install From 07b57b75b49191132d9670b23dae5725f7043be0 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 10 Jun 2020 19:37:20 +0000 Subject: [PATCH 284/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 342d5a09..e7ade9f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-06-10] Version 4.6.0 +-------------------------- +**Library - Feature** +- [PR #626](https://github.com/sendgrid/sendgrid-java/pull/626): add prism Docker setup. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-05-13] Version 4.5.0 -------------------------- **Library - Feature** From eabee46c82995606ba312563b381f2efa0401c2e Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 10 Jun 2020 19:52:22 +0000 Subject: [PATCH 285/439] Release 4.6.0 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8367539d..43d8d8ea 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.5.0/sendgrid-4.5.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.5.0/sendgrid-4.5.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.0/sendgrid-4.6.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.0/sendgrid-4.6.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 8caf5d24..20fa177f 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.5.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.5.0' + implementation 'com.sendgrid:sendgrid-java:4.6.0' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.5.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index d0ff2d07..432908f1 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.5.0 + 4.6.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.5.0 + 4.6.0 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index d4813ecf..fad02bb7 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.5.0"; + private static final String VERSION = "4.6.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 0dc2a86e..c00cc776 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.5.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.0"); } @Test From 3aa96eb05b4c3b94e20ae053cad500125d4e775f Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Wed, 10 Jun 2020 15:58:18 -0500 Subject: [PATCH 286/439] fix: run with openjdk8 in TravisCI --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 7becc3f3..7b7c65a3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: java +jdk: openjdk8 before_install: - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true env: From 3239e86640055dc4475763257e9c4e9f50314f8f Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Thu, 2 Jul 2020 16:06:51 -0500 Subject: [PATCH 287/439] fix: don't use dependency version ranges (#635) Using a version range like this results in maven attempting to get SNAPSHOT information for the dependency since it's possible a SNAPSHOT release would match the version range. It's not a big deal, but there are better approaches. The idea was we want to pick up the latest 4.X version of java-http-client, but even a version range does not guarantee this. It only guarantees that a 4.X version will be used (not necessarily the latest release). What we really want is the latest non-snapshot, minor version release for all dependencies, not just java-http-client. Also note that Maven version ranges perform basic string comparison so even it they were capable of getting the latest release for a dependency, it might not actually be the latest release if proper semver is used. --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 432908f1..081690eb 100644 --- a/pom.xml +++ b/pom.xml @@ -274,7 +274,7 @@ com.sendgrid java-http-client - [4.2,5.0) + 4.3.3 com.fasterxml.jackson.core @@ -300,7 +300,7 @@ org.mockito mockito-core - 2.1.0 + 2.28.2 test @@ -309,4 +309,4 @@ 1.65 - \ No newline at end of file + From ee6fad6e83a8ec508ac1ba50b14871d77347de1f Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 8 Jul 2020 19:51:47 +0000 Subject: [PATCH 288/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7ade9f9..3e767f0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-07-08] Version 4.6.1 +-------------------------- +**Library - Fix** +- [PR #635](https://github.com/sendgrid/sendgrid-java/pull/635): don't use dependency version ranges. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-06-10] Version 4.6.0 -------------------------- **Library - Feature** From 88b85cb8cbc886b1481fb33c18d0346a3b44ed94 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 8 Jul 2020 19:57:39 +0000 Subject: [PATCH 289/439] Release 4.6.1 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 8 ++++---- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 43d8d8ea..dbdcf01f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.0/sendgrid-4.6.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.0/sendgrid-4.6.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.1/sendgrid-4.6.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.1/sendgrid-4.6.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 20fa177f..955ceadd 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.1 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.0' + implementation 'com.sendgrid:sendgrid-java:4.6.1' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.1/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 081690eb..561d291e 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.0 + 4.6.1 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.0 + 4.6.1 @@ -306,7 +306,7 @@ org.bouncycastle bcprov-jdk15on - 1.65 + 1.66 - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index fad02bb7..776888d2 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.0"; + private static final String VERSION = "4.6.1"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index c00cc776..87e2fede 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.1"); } @Test From d9f4413707c38cd7c702d04574b207da56343002 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Wed, 8 Jul 2020 13:30:14 -0700 Subject: [PATCH 290/439] fix: bouncycastle artifact ID --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 561d291e..378bdea1 100644 --- a/pom.xml +++ b/pom.xml @@ -305,8 +305,8 @@ org.bouncycastle - bcprov-jdk15on - 1.66 + bcprov-jdk15to18 + 1.65 - \ No newline at end of file + From c6e63611735c0ff23885b2eae30d3bb2f88a3505 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Wed, 15 Jul 2020 09:04:50 -0500 Subject: [PATCH 291/439] docs: fix the kitchen sink example and link to it in the use cases doc (#637) The "Kitchen Sink" example and other mail-send examples were out-of-date. This change updates them to use the latest package version. --- USE_CASES.md | 5 +- .../DeleteIPFromAccessSettings.java | 30 +- examples/helpers/mail/Example.java | 102 +- examples/ips/RetrieveAllPools.java | 3 +- examples/temp.txt | 1917 ----------------- examples/temp2.txt | 1917 ----------------- 6 files changed, 48 insertions(+), 3926 deletions(-) delete mode 100644 examples/temp.txt delete mode 100644 examples/temp2.txt diff --git a/USE_CASES.md b/USE_CASES.md index 520825d6..4bea0387 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -1,7 +1,8 @@ This documentation provides examples for specific use cases. Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues) or make a pull request for any use cases you would like us to document here. Thank you! -# Table of Contents +# Use Cases +* [Send Mail Examples](examples/helpers/mail/Example.java) * [Transactional Templates](#transactional-templates) * [Legacy Templates](#legacy-templates) * [How to Setup a Domain Authentication](#domain-authentication) @@ -9,7 +10,6 @@ This documentation provides examples for specific use cases. Please [open an iss * [Send an Email With Twilio Email (Pilot)](#send-an-email-with-twilio-email-pilot) * [Send an SMS Message](#send-an-sms-message) - # Transactional Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. @@ -110,7 +110,6 @@ public class Example { } ``` - # Legacy Templates For this example, we assume you have created a [legacy template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. diff --git a/examples/accesssettings/DeleteIPFromAccessSettings.java b/examples/accesssettings/DeleteIPFromAccessSettings.java index d084c99c..ce9eeb0c 100644 --- a/examples/accesssettings/DeleteIPFromAccessSettings.java +++ b/examples/accesssettings/DeleteIPFromAccessSettings.java @@ -10,20 +10,20 @@ */ public class DeleteIPFromAccessSettings extends Example { - - private void run() throws IOException { - try { - String endPoint = "access_settings/whitelist"; - String body = "{\"ids\":[1,2,3]}"; - Request request = createRequest(Method.DELETE, endPoint, body); - Response response = execute(request); - printResponseInfo(response); - } catch (IOException ex) { - throw ex; - } + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; } + } - public static void main(String[] args) throws IOException { - DeleteIPFromAccessSettings deleteIPFromAccessSettings = new DeleteIPFromAccessSettings(); - deleteIPFromAccessSettings.run(); -} \ No newline at end of file + public static void main(String[] args) throws IOException { + DeleteIPFromAccessSettings deleteIPFromAccessSettings = new DeleteIPFromAccessSettings(); + deleteIPFromAccessSettings.run(); + } +} diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index a74cdbd5..8ff7ed42 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -1,33 +1,16 @@ -import com.sendgrid.ASM; -import com.sendgrid.Attachments; -import com.sendgrid.BccSettings; -import com.sendgrid.ClickTrackingSetting; -import com.sendgrid.Client; -import com.sendgrid.Content; -import com.sendgrid.Email; -import com.sendgrid.FooterSetting; -import com.sendgrid.GoogleAnalyticsSetting; -import com.sendgrid.Mail; -import com.sendgrid.MailSettings; import com.sendgrid.Method; -import com.sendgrid.OpenTrackingSetting; -import com.sendgrid.Personalization; import com.sendgrid.Request; import com.sendgrid.Response; import com.sendgrid.SendGrid; -import com.sendgrid.Setting; -import com.sendgrid.SpamCheckSetting; -import com.sendgrid.SubscriptionTrackingSetting; -import com.sendgrid.TrackingSettings; +import com.sendgrid.helpers.mail.Mail; +import com.sendgrid.helpers.mail.objects.*; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; public class Example { // Fully populated Mail object - public static Mail buildKitchenSink() throws IOException { + public static Mail buildKitchenSink() { Mail mail = new Mail(); Email fromEmail = new Email(); @@ -143,7 +126,7 @@ public static Mail buildKitchenSink() throws IOException { ASM asm = new ASM(); asm.setGroupId(99); - asm.setGroupsToDisplay(new int[] {4,5,6,7,8}); + asm.setGroupsToDisplay(new int[]{4, 5, 6, 7, 8}); mail.setASM(asm); // This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) to work @@ -208,7 +191,7 @@ public static Mail buildKitchenSink() throws IOException { } // API V3 Dynamic Template implementation - public static Mail buildDynamicTemplate() throws IOException { + public static Mail buildDynamicTemplate() { Mail mail = new Mail(); Email fromEmail = new Email(); @@ -223,12 +206,12 @@ public static Mail buildDynamicTemplate() throws IOException { personalization.addDynamicTemplateData("city", "Denver"); personalization.addTo(new Email("test@example.com")); mail.addPersonalization(personalization); - + return mail; } // Minimum required to send an email - public static Mail buildHelloEmail() throws IOException { + public static Mail buildHelloEmail() { Email from = new Email("test@example.com"); String subject = "Hello World from the Twilio SendGrid Java Library"; Email to = new Email("test@example.com"); @@ -244,65 +227,38 @@ public static Mail buildHelloEmail() throws IOException { } public static void baselineExample() throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.addRequestHeader("X-Mock", "true"); - - Request request = new Request(); - Mail helloWorld = buildHelloEmail(); - try { - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody(helloWorld.build()); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } + final Mail helloWorld = buildHelloEmail(); + send(helloWorld); } public static void kitchenSinkExample() throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.addRequestHeader("X-Mock", "true"); - - Request request = new Request(); - Mail kitchenSink = buildKitchenSink(); - try { - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody(kitchenSink.build()); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } + final Mail kitchenSink = buildKitchenSink(); + send(kitchenSink); } public static void dynamicTemplateExample() throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + final Mail dynamicTemplate = buildDynamicTemplate(); + send(dynamicTemplate); + } + + private static void send(final Mail mail) throws IOException { + final SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); sg.addRequestHeader("X-Mock", "true"); - Request request = new Request(); - Mail dynamicTemplate = buildDynamicTemplate(); - try { - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody(dynamicTemplate.build()); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } + final Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + + final Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } public static void main(String[] args) throws IOException { - // baselineExample(); - // kitchenSinkExample(); + baselineExample(); + kitchenSinkExample(); dynamicTemplateExample(); } -} \ No newline at end of file +} diff --git a/examples/ips/RetrieveAllPools.java b/examples/ips/RetrieveAllPools.java index a4362ce0..93bf78ec 100644 --- a/examples/ips/RetrieveAllPools.java +++ b/examples/ips/RetrieveAllPools.java @@ -27,4 +27,5 @@ public static void main(String[] args) throws IOException { } catch (IOException ex) { throw ex; } - } \ No newline at end of file + } +} diff --git a/examples/temp.txt b/examples/temp.txt deleted file mode 100644 index 83556ad8..00000000 --- a/examples/temp.txt +++ /dev/null @@ -1,1917 +0,0 @@ -META-INF/ -META-INF/MANIFEST.MF -LICENSE.md -com/ -com/sendgrid/ -com/sendgrid/SendGridAPI.class -com/sendgrid/SendGrid$1.class -com/sendgrid/APICallback.class -com/sendgrid/SendGrid$2.class -com/sendgrid/SendGrid.class -com/sendgrid/SpamCheckSetting.class -com/sendgrid/Attachments$Builder.class -com/sendgrid/OpenTrackingSetting.class -com/sendgrid/Setting.class -com/sendgrid/GoogleAnalyticsSetting.class -com/sendgrid/ASM.class -com/sendgrid/FooterSetting.class -com/sendgrid/Personalization.class -com/sendgrid/Email.class -com/sendgrid/MailSettings.class -com/sendgrid/BccSettings.class -com/sendgrid/Content.class -com/sendgrid/TrackingSettings.class -com/sendgrid/ClickTrackingSetting.class -com/sendgrid/Attachments.class -com/sendgrid/ContentVerifier.class -com/sendgrid/SubscriptionTrackingSetting.class -com/sendgrid/Mail.class -com/sendgrid/RateLimitException.class -META-INF/maven/ -META-INF/maven/com.sendgrid/ -META-INF/maven/com.sendgrid/sendgrid-java/ -META-INF/maven/com.sendgrid/sendgrid-java/pom.xml -META-INF/maven/com.sendgrid/sendgrid-java/pom.properties -com/sendgrid/Client$1.class -com/sendgrid/Client.class -com/sendgrid/HttpDeleteWithBody.class -com/sendgrid/Method.class -com/sendgrid/Request.class -com/sendgrid/Response.class -com/sendgrid/SendGridResponseHandler.class -org/ -org/apache/ -org/apache/http/ -org/apache/http/message/ -org/apache/http/message/BasicHeaderElementIterator.class -org/apache/http/message/LineParser.class -org/apache/http/message/BasicHttpEntityEnclosingRequest.class -org/apache/http/message/HeaderValueFormatter.class -org/apache/http/message/BasicLineFormatter.class -org/apache/http/message/BasicLineParser.class -org/apache/http/message/HeaderGroup.class -org/apache/http/message/BasicNameValuePair.class -org/apache/http/message/BufferedHeader.class -org/apache/http/message/BasicListHeaderIterator.class -org/apache/http/message/BasicHeader.class -org/apache/http/message/LineFormatter.class -org/apache/http/message/BasicHttpResponse.class -org/apache/http/message/BasicTokenIterator.class -org/apache/http/message/BasicRequestLine.class -org/apache/http/message/ParserCursor.class -org/apache/http/message/BasicHeaderValueParser.class -org/apache/http/message/BasicHeaderValueFormatter.class -org/apache/http/message/BasicHttpRequest.class -org/apache/http/message/HeaderValueParser.class -org/apache/http/message/AbstractHttpMessage.class -org/apache/http/message/TokenParser.class -org/apache/http/message/BasicHeaderIterator.class -org/apache/http/message/BasicHeaderElement.class -org/apache/http/message/BasicStatusLine.class -org/apache/http/concurrent/ -org/apache/http/concurrent/BasicFuture.class -org/apache/http/concurrent/Cancellable.class -org/apache/http/concurrent/FutureCallback.class -org/apache/http/HeaderElement.class -org/apache/http/TruncatedChunkException.class -org/apache/http/ExceptionLogger$1.class -org/apache/http/version.properties -org/apache/http/HeaderElementIterator.class -org/apache/http/ProtocolVersion.class -org/apache/http/ExceptionLogger.class -org/apache/http/HttpRequestFactory.class -org/apache/http/HttpConnection.class -org/apache/http/HttpRequestInterceptor.class -org/apache/http/ContentTooLongException.class -org/apache/http/UnsupportedHttpVersionException.class -org/apache/http/HttpResponseInterceptor.class -org/apache/http/HttpInetConnection.class -org/apache/http/HttpEntity.class -org/apache/http/HttpException.class -org/apache/http/annotation/ -org/apache/http/annotation/Obsolete.class -org/apache/http/annotation/Experimental.class -org/apache/http/annotation/NotThreadSafe.class -org/apache/http/annotation/Immutable.class -org/apache/http/annotation/ThreadSafe.class -org/apache/http/annotation/GuardedBy.class -org/apache/http/Consts.class -org/apache/http/HttpConnectionMetrics.class -org/apache/http/HttpMessage.class -org/apache/http/MethodNotSupportedException.class -org/apache/http/ParseException.class -org/apache/http/params/ -org/apache/http/params/CoreProtocolPNames.class -org/apache/http/params/SyncBasicHttpParams.class -org/apache/http/params/DefaultedHttpParams.class -org/apache/http/params/HttpParams.class -org/apache/http/params/AbstractHttpParams.class -org/apache/http/params/HttpAbstractParamBean.class -org/apache/http/params/HttpConnectionParams.class -org/apache/http/params/BasicHttpParams.class -org/apache/http/params/HttpConnectionParamBean.class -org/apache/http/params/CoreConnectionPNames.class -org/apache/http/params/HttpParamConfig.class -org/apache/http/params/HttpProtocolParamBean.class -org/apache/http/params/HttpProtocolParams.class -org/apache/http/params/HttpParamsNames.class -org/apache/http/ReasonPhraseCatalog.class -org/apache/http/MalformedChunkCodingException.class -org/apache/http/FormattedHeader.class -org/apache/http/HttpResponse.class -org/apache/http/HeaderIterator.class -org/apache/http/HttpHeaders.class -org/apache/http/HttpClientConnection.class -org/apache/http/HttpHost.class -org/apache/http/protocol/ -org/apache/http/protocol/ResponseDate.class -org/apache/http/protocol/ChainBuilder.class -org/apache/http/protocol/HttpDateGenerator.class -org/apache/http/protocol/HttpRequestHandlerMapper.class -org/apache/http/protocol/HTTP.class -org/apache/http/protocol/SyncBasicHttpContext.class -org/apache/http/protocol/HttpService$HttpRequestHandlerResolverAdapter.class -org/apache/http/protocol/ImmutableHttpProcessor.class -org/apache/http/protocol/BasicHttpContext.class -org/apache/http/protocol/HttpProcessorBuilder.class -org/apache/http/protocol/RequestTargetHost.class -org/apache/http/protocol/ResponseConnControl.class -org/apache/http/protocol/HttpRequestInterceptorList.class -org/apache/http/protocol/HttpRequestExecutor.class -org/apache/http/protocol/RequestUserAgent.class -org/apache/http/protocol/HttpRequestHandlerResolver.class -org/apache/http/protocol/BasicHttpProcessor.class -org/apache/http/protocol/ResponseServer.class -org/apache/http/protocol/ResponseContent.class -org/apache/http/protocol/RequestDate.class -org/apache/http/protocol/HttpService.class -org/apache/http/protocol/HttpContext.class -org/apache/http/protocol/RequestConnControl.class -org/apache/http/protocol/UriHttpRequestHandlerMapper.class -org/apache/http/protocol/UriPatternMatcher.class -org/apache/http/protocol/HttpCoreContext.class -org/apache/http/protocol/HttpProcessor.class -org/apache/http/protocol/RequestExpectContinue.class -org/apache/http/protocol/HttpExpectationVerifier.class -org/apache/http/protocol/HttpRequestHandlerRegistry.class -org/apache/http/protocol/HttpResponseInterceptorList.class -org/apache/http/protocol/HttpRequestHandler.class -org/apache/http/protocol/ExecutionContext.class -org/apache/http/protocol/RequestContent.class -org/apache/http/protocol/DefaultedHttpContext.class -org/apache/http/HttpStatus.class -org/apache/http/TokenIterator.class -org/apache/http/ssl/ -org/apache/http/ssl/SSLContextBuilder$TrustManagerDelegate.class -org/apache/http/ssl/TrustStrategy.class -org/apache/http/ssl/PrivateKeyStrategy.class -org/apache/http/ssl/SSLContextBuilder$KeyManagerDelegate.class -org/apache/http/ssl/SSLContexts.class -org/apache/http/ssl/SSLContextBuilder.class -org/apache/http/ssl/SSLInitializationException.class -org/apache/http/ssl/PrivateKeyDetails.class -org/apache/http/ConnectionReuseStrategy.class -org/apache/http/pool/ -org/apache/http/pool/AbstractConnPool$4.class -org/apache/http/pool/AbstractConnPool$2.class -org/apache/http/pool/PoolEntry.class -org/apache/http/pool/ConnFactory.class -org/apache/http/pool/RouteSpecificPool.class -org/apache/http/pool/AbstractConnPool$3.class -org/apache/http/pool/PoolEntryCallback.class -org/apache/http/pool/AbstractConnPool.class -org/apache/http/pool/ConnPoolControl.class -org/apache/http/pool/PoolStats.class -org/apache/http/pool/AbstractConnPool$1.class -org/apache/http/pool/ConnPool.class -org/apache/http/pool/PoolEntryFuture.class -org/apache/http/config/ -org/apache/http/config/MessageConstraints$Builder.class -org/apache/http/config/ConnectionConfig.class -org/apache/http/config/SocketConfig.class -org/apache/http/config/Registry.class -org/apache/http/config/ConnectionConfig$Builder.class -org/apache/http/config/RegistryBuilder.class -org/apache/http/config/SocketConfig$Builder.class -org/apache/http/config/MessageConstraints.class -org/apache/http/config/Lookup.class -org/apache/http/HttpResponseFactory.class -org/apache/http/HttpRequest.class -org/apache/http/RequestLine.class -org/apache/http/HttpServerConnection.class -org/apache/http/NameValuePair.class -org/apache/http/util/ -org/apache/http/util/LangUtils.class -org/apache/http/util/NetUtils.class -org/apache/http/util/EntityUtils.class -org/apache/http/util/EncodingUtils.class -org/apache/http/util/TextUtils.class -org/apache/http/util/CharsetUtils.class -org/apache/http/util/CharArrayBuffer.class -org/apache/http/util/ByteArrayBuffer.class -org/apache/http/util/Asserts.class -org/apache/http/util/ExceptionUtils.class -org/apache/http/util/Args.class -org/apache/http/util/VersionInfo.class -org/apache/http/HttpVersion.class -org/apache/http/HttpConnectionFactory.class -org/apache/http/impl/ -org/apache/http/impl/DefaultHttpRequestFactory.class -org/apache/http/impl/SocketHttpClientConnection.class -org/apache/http/impl/bootstrap/ -org/apache/http/impl/bootstrap/SSLServerSetupHandler.class -org/apache/http/impl/bootstrap/HttpServer$Status.class -org/apache/http/impl/bootstrap/ThreadFactoryImpl.class -org/apache/http/impl/bootstrap/Worker.class -org/apache/http/impl/bootstrap/RequestListener.class -org/apache/http/impl/bootstrap/ServerBootstrap.class -org/apache/http/impl/bootstrap/HttpServer.class -org/apache/http/impl/SocketHttpServerConnection.class -org/apache/http/impl/BHttpConnectionBase.class -org/apache/http/impl/DefaultConnectionReuseStrategy.class -org/apache/http/impl/DefaultHttpServerConnection.class -org/apache/http/impl/AbstractHttpClientConnection.class -org/apache/http/impl/EnglishReasonPhraseCatalog.class -org/apache/http/impl/DefaultBHttpServerConnection.class -org/apache/http/impl/DefaultHttpClientConnection.class -org/apache/http/impl/pool/ -org/apache/http/impl/pool/BasicConnPool.class -org/apache/http/impl/pool/BasicConnFactory.class -org/apache/http/impl/pool/BasicPoolEntry.class -org/apache/http/impl/DefaultBHttpClientConnectionFactory.class -org/apache/http/impl/DefaultBHttpClientConnection.class -org/apache/http/impl/AbstractHttpServerConnection.class -org/apache/http/impl/io/ -org/apache/http/impl/io/HttpResponseWriter.class -org/apache/http/impl/io/HttpTransportMetricsImpl.class -org/apache/http/impl/io/AbstractSessionInputBuffer.class -org/apache/http/impl/io/DefaultHttpRequestWriter.class -org/apache/http/impl/io/SessionInputBufferImpl.class -org/apache/http/impl/io/ContentLengthOutputStream.class -org/apache/http/impl/io/SocketInputBuffer.class -org/apache/http/impl/io/DefaultHttpResponseWriterFactory.class -org/apache/http/impl/io/DefaultHttpRequestWriterFactory.class -org/apache/http/impl/io/IdentityOutputStream.class -org/apache/http/impl/io/IdentityInputStream.class -org/apache/http/impl/io/SocketOutputBuffer.class -org/apache/http/impl/io/ChunkedOutputStream.class -org/apache/http/impl/io/DefaultHttpResponseParserFactory.class -org/apache/http/impl/io/ContentLengthInputStream.class -org/apache/http/impl/io/HttpRequestWriter.class -org/apache/http/impl/io/DefaultHttpResponseWriter.class -org/apache/http/impl/io/DefaultHttpRequestParserFactory.class -org/apache/http/impl/io/AbstractMessageParser.class -org/apache/http/impl/io/EmptyInputStream.class -org/apache/http/impl/io/DefaultHttpRequestParser.class -org/apache/http/impl/io/SessionOutputBufferImpl.class -org/apache/http/impl/io/HttpRequestParser.class -org/apache/http/impl/io/AbstractSessionOutputBuffer.class -org/apache/http/impl/io/DefaultHttpResponseParser.class -org/apache/http/impl/io/ChunkedInputStream.class -org/apache/http/impl/io/AbstractMessageWriter.class -org/apache/http/impl/io/HttpResponseParser.class -org/apache/http/impl/entity/ -org/apache/http/impl/entity/DisallowIdentityContentLengthStrategy.class -org/apache/http/impl/entity/LaxContentLengthStrategy.class -org/apache/http/impl/entity/StrictContentLengthStrategy.class -org/apache/http/impl/entity/EntityDeserializer.class -org/apache/http/impl/entity/EntitySerializer.class -org/apache/http/impl/DefaultHttpResponseFactory.class -org/apache/http/impl/DefaultBHttpServerConnectionFactory.class -org/apache/http/impl/HttpConnectionMetricsImpl.class -org/apache/http/impl/ConnSupport.class -org/apache/http/impl/NoConnectionReuseStrategy.class -org/apache/http/ConnectionClosedException.class -org/apache/http/StatusLine.class -org/apache/http/io/ -org/apache/http/io/HttpMessageWriterFactory.class -org/apache/http/io/BufferInfo.class -org/apache/http/io/HttpMessageParserFactory.class -org/apache/http/io/HttpTransportMetrics.class -org/apache/http/io/SessionOutputBuffer.class -org/apache/http/io/HttpMessageParser.class -org/apache/http/io/EofSensor.class -org/apache/http/io/HttpMessageWriter.class -org/apache/http/io/SessionInputBuffer.class -org/apache/http/NoHttpResponseException.class -org/apache/http/HttpEntityEnclosingRequest.class -org/apache/http/entity/ -org/apache/http/entity/ContentLengthStrategy.class -org/apache/http/entity/FileEntity.class -org/apache/http/entity/InputStreamEntity.class -org/apache/http/entity/SerializableEntity.class -org/apache/http/entity/StringEntity.class -org/apache/http/entity/HttpEntityWrapper.class -org/apache/http/entity/ContentProducer.class -org/apache/http/entity/BufferedHttpEntity.class -org/apache/http/entity/ByteArrayEntity.class -org/apache/http/entity/EntityTemplate.class -org/apache/http/entity/BasicHttpEntity.class -org/apache/http/entity/ContentType.class -org/apache/http/entity/AbstractHttpEntity.class -org/apache/http/ProtocolException.class -org/apache/http/MessageConstraintException.class -org/apache/http/ExceptionLogger$2.class -org/apache/http/Header.class -META-INF/DEPENDENCIES -META-INF/NOTICE -META-INF/LICENSE -META-INF/maven/org.apache.httpcomponents/ -META-INF/maven/org.apache.httpcomponents/httpcore/ -META-INF/maven/org.apache.httpcomponents/httpcore/pom.xml -META-INF/maven/org.apache.httpcomponents/httpcore/pom.properties -org/apache/http/auth/ -org/apache/http/auth/KerberosCredentials.class -org/apache/http/auth/AuthSchemeRegistry.class -org/apache/http/auth/ChallengeState.class -org/apache/http/auth/NTUserPrincipal.class -org/apache/http/auth/InvalidCredentialsException.class -org/apache/http/auth/AuthSchemeRegistry$1.class -org/apache/http/auth/NTCredentials.class -org/apache/http/auth/AuthScheme.class -org/apache/http/auth/AuthenticationException.class -org/apache/http/auth/params/ -org/apache/http/auth/params/AuthParams.class -org/apache/http/auth/params/AuthParamBean.class -org/apache/http/auth/params/AuthPNames.class -org/apache/http/auth/BasicUserPrincipal.class -org/apache/http/auth/AuthSchemeProvider.class -org/apache/http/auth/ContextAwareAuthScheme.class -org/apache/http/auth/AuthProtocolState.class -org/apache/http/auth/AuthScope.class -org/apache/http/auth/AuthSchemeFactory.class -org/apache/http/auth/AUTH.class -org/apache/http/auth/Credentials.class -org/apache/http/auth/UsernamePasswordCredentials.class -org/apache/http/auth/AuthOption.class -org/apache/http/auth/MalformedChallengeException.class -org/apache/http/auth/AuthState.class -org/apache/http/cookie/ -org/apache/http/cookie/CookieSpecRegistry.class -org/apache/http/cookie/CookieSpec.class -org/apache/http/cookie/CookieRestrictionViolationException.class -org/apache/http/cookie/CookieIdentityComparator.class -org/apache/http/cookie/SM.class -org/apache/http/cookie/CookieOrigin.class -org/apache/http/cookie/CookieAttributeHandler.class -org/apache/http/cookie/SetCookie2.class -org/apache/http/cookie/params/ -org/apache/http/cookie/params/CookieSpecParamBean.class -org/apache/http/cookie/params/CookieSpecPNames.class -org/apache/http/cookie/MalformedCookieException.class -org/apache/http/cookie/ClientCookie.class -org/apache/http/cookie/CommonCookieAttributeHandler.class -org/apache/http/cookie/CookieSpecRegistry$1.class -org/apache/http/cookie/CookiePathComparator.class -org/apache/http/cookie/SetCookie.class -org/apache/http/cookie/Cookie.class -org/apache/http/cookie/CookieSpecProvider.class -org/apache/http/cookie/CookiePriorityComparator.class -org/apache/http/cookie/CookieSpecFactory.class -org/apache/http/client/ -org/apache/http/client/RedirectStrategy.class -org/apache/http/client/ConnectionBackoffStrategy.class -org/apache/http/client/version.properties -org/apache/http/client/AuthenticationStrategy.class -org/apache/http/client/HttpClient.class -org/apache/http/client/methods/ -org/apache/http/client/methods/HttpOptions.class -org/apache/http/client/methods/AbortableHttpRequest.class -org/apache/http/client/methods/HttpRequestBase.class -org/apache/http/client/methods/AbstractExecutionAwareRequest$2.class -org/apache/http/client/methods/RequestBuilder.class -org/apache/http/client/methods/HttpGet.class -org/apache/http/client/methods/HttpPatch.class -org/apache/http/client/methods/HttpDelete.class -org/apache/http/client/methods/HttpUriRequest.class -org/apache/http/client/methods/CloseableHttpResponse.class -org/apache/http/client/methods/HttpRequestWrapper$1.class -org/apache/http/client/methods/RequestBuilder$InternalEntityEclosingRequest.class -org/apache/http/client/methods/HttpRequestWrapper$HttpEntityEnclosingRequestWrapper.class -org/apache/http/client/methods/RequestBuilder$InternalRequest.class -org/apache/http/client/methods/HttpRequestWrapper.class -org/apache/http/client/methods/HttpHead.class -org/apache/http/client/methods/HttpExecutionAware.class -org/apache/http/client/methods/AbstractExecutionAwareRequest.class -org/apache/http/client/methods/Configurable.class -org/apache/http/client/methods/AbstractExecutionAwareRequest$1.class -org/apache/http/client/methods/HttpPost.class -org/apache/http/client/methods/HttpEntityEnclosingRequestBase.class -org/apache/http/client/methods/HttpTrace.class -org/apache/http/client/methods/HttpPut.class -org/apache/http/client/CredentialsProvider.class -org/apache/http/client/UserTokenHandler.class -org/apache/http/client/CookieStore.class -org/apache/http/client/HttpResponseException.class -org/apache/http/client/ClientProtocolException.class -org/apache/http/client/AuthenticationHandler.class -org/apache/http/client/params/ -org/apache/http/client/params/HttpClientParams.class -org/apache/http/client/params/ClientPNames.class -org/apache/http/client/params/ClientParamBean.class -org/apache/http/client/params/CookiePolicy.class -org/apache/http/client/params/AuthPolicy.class -org/apache/http/client/params/HttpClientParamConfig.class -org/apache/http/client/params/AllClientPNames.class -org/apache/http/client/CircularRedirectException.class -org/apache/http/client/utils/ -org/apache/http/client/utils/Punycode.class -org/apache/http/client/utils/Idn.class -org/apache/http/client/utils/HttpClientUtils.class -org/apache/http/client/utils/URIBuilder.class -org/apache/http/client/utils/URIUtils.class -org/apache/http/client/utils/DateUtils$DateFormatHolder.class -org/apache/http/client/utils/URLEncodedUtils.class -org/apache/http/client/utils/JdkIdn.class -org/apache/http/client/utils/CloneUtils.class -org/apache/http/client/utils/DateUtils.class -org/apache/http/client/utils/Rfc3492Idn.class -org/apache/http/client/protocol/ -org/apache/http/client/protocol/RequestAcceptEncoding.class -org/apache/http/client/protocol/ResponseProcessCookies.class -org/apache/http/client/protocol/RequestDefaultHeaders.class -org/apache/http/client/protocol/ResponseContentEncoding$2.class -org/apache/http/client/protocol/ClientContext.class -org/apache/http/client/protocol/ResponseAuthCache.class -org/apache/http/client/protocol/RequestAuthenticationBase$1.class -org/apache/http/client/protocol/RequestTargetAuthentication.class -org/apache/http/client/protocol/RequestProxyAuthentication.class -org/apache/http/client/protocol/RequestClientConnControl.class -org/apache/http/client/protocol/ResponseAuthCache$1.class -org/apache/http/client/protocol/RequestAddCookies.class -org/apache/http/client/protocol/RequestAuthCache.class -org/apache/http/client/protocol/ClientContextConfigurer.class -org/apache/http/client/protocol/ResponseContentEncoding$1.class -org/apache/http/client/protocol/RequestExpectContinue.class -org/apache/http/client/protocol/ResponseContentEncoding.class -org/apache/http/client/protocol/RequestAuthenticationBase.class -org/apache/http/client/protocol/HttpClientContext.class -org/apache/http/client/BackoffManager.class -org/apache/http/client/config/ -org/apache/http/client/config/RequestConfig$Builder.class -org/apache/http/client/config/RequestConfig.class -org/apache/http/client/config/CookieSpecs.class -org/apache/http/client/config/AuthSchemes.class -org/apache/http/client/AuthCache.class -org/apache/http/client/ResponseHandler.class -org/apache/http/client/RedirectException.class -org/apache/http/client/RedirectHandler.class -org/apache/http/client/NonRepeatableRequestException.class -org/apache/http/client/entity/ -org/apache/http/client/entity/DeflateInputStream.class -org/apache/http/client/entity/InputStreamFactory.class -org/apache/http/client/entity/UrlEncodedFormEntity.class -org/apache/http/client/entity/DeflateInputStream$DeflateStream.class -org/apache/http/client/entity/GzipCompressingEntity.class -org/apache/http/client/entity/EntityBuilder.class -org/apache/http/client/entity/LazyDecompressingInputStream.class -org/apache/http/client/entity/DecompressingEntity.class -org/apache/http/client/entity/GzipDecompressingEntity$1.class -org/apache/http/client/entity/DeflateDecompressingEntity$1.class -org/apache/http/client/entity/GzipDecompressingEntity.class -org/apache/http/client/entity/DeflateDecompressingEntity.class -org/apache/http/client/HttpRequestRetryHandler.class -org/apache/http/client/RequestDirector.class -org/apache/http/client/ServiceUnavailableRetryStrategy.class -org/apache/http/conn/ -org/apache/http/conn/OperatedClientConnection.class -org/apache/http/conn/ManagedClientConnection.class -org/apache/http/conn/ConnectionRequest.class -org/apache/http/conn/EofSensorInputStream.class -org/apache/http/conn/ClientConnectionOperator.class -org/apache/http/conn/HttpClientConnectionOperator.class -org/apache/http/conn/BasicManagedEntity.class -org/apache/http/conn/ConnectionKeepAliveStrategy.class -org/apache/http/conn/ManagedHttpClientConnection.class -org/apache/http/conn/BasicEofSensorWatcher.class -org/apache/http/conn/HttpClientConnectionManager.class -org/apache/http/conn/HttpRoutedConnection.class -org/apache/http/conn/EofSensorWatcher.class -org/apache/http/conn/routing/ -org/apache/http/conn/routing/BasicRouteDirector.class -org/apache/http/conn/routing/RouteInfo$LayerType.class -org/apache/http/conn/routing/RouteInfo.class -org/apache/http/conn/routing/RouteTracker.class -org/apache/http/conn/routing/HttpRouteDirector.class -org/apache/http/conn/routing/HttpRoutePlanner.class -org/apache/http/conn/routing/RouteInfo$TunnelType.class -org/apache/http/conn/routing/HttpRoute.class -org/apache/http/conn/SchemePortResolver.class -org/apache/http/conn/ClientConnectionManager.class -org/apache/http/conn/params/ -org/apache/http/conn/params/ConnManagerParamBean.class -org/apache/http/conn/params/ConnRouteParamBean.class -org/apache/http/conn/params/ConnManagerParams$1.class -org/apache/http/conn/params/ConnManagerPNames.class -org/apache/http/conn/params/ConnConnectionParamBean.class -org/apache/http/conn/params/ConnManagerParams.class -org/apache/http/conn/params/ConnPerRouteBean.class -org/apache/http/conn/params/ConnConnectionPNames.class -org/apache/http/conn/params/ConnPerRoute.class -org/apache/http/conn/params/ConnRoutePNames.class -org/apache/http/conn/params/ConnRouteParams.class -org/apache/http/conn/socket/ -org/apache/http/conn/socket/PlainConnectionSocketFactory.class -org/apache/http/conn/socket/ConnectionSocketFactory.class -org/apache/http/conn/socket/LayeredConnectionSocketFactory.class -org/apache/http/conn/ClientConnectionRequest.class -org/apache/http/conn/ssl/ -org/apache/http/conn/ssl/TrustSelfSignedStrategy.class -org/apache/http/conn/ssl/SSLContextBuilder$TrustManagerDelegate.class -org/apache/http/conn/ssl/DefaultHostnameVerifier$1.class -org/apache/http/conn/ssl/DefaultHostnameVerifier$TYPE.class -org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.class -org/apache/http/conn/ssl/TrustStrategy.class -org/apache/http/conn/ssl/PrivateKeyStrategy.class -org/apache/http/conn/ssl/SSLContextBuilder$KeyManagerDelegate.class -org/apache/http/conn/ssl/X509HostnameVerifier.class -org/apache/http/conn/ssl/AbstractVerifier.class -org/apache/http/conn/ssl/SSLSocketFactory.class -org/apache/http/conn/ssl/SSLConnectionSocketFactory.class -org/apache/http/conn/ssl/SSLContexts.class -org/apache/http/conn/ssl/AllowAllHostnameVerifier.class -org/apache/http/conn/ssl/StrictHostnameVerifier.class -org/apache/http/conn/ssl/SSLContextBuilder.class -org/apache/http/conn/ssl/DefaultHostnameVerifier.class -org/apache/http/conn/ssl/SSLInitializationException.class -org/apache/http/conn/ssl/PrivateKeyDetails.class -org/apache/http/conn/ssl/NoopHostnameVerifier.class -org/apache/http/conn/ConnectionPoolTimeoutException.class -org/apache/http/conn/ConnectionReleaseTrigger.class -org/apache/http/conn/ClientConnectionManagerFactory.class -org/apache/http/conn/scheme/ -org/apache/http/conn/scheme/SchemeSocketFactoryAdaptor.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactory.class -org/apache/http/conn/scheme/PlainSocketFactory.class -org/apache/http/conn/scheme/LayeredSocketFactoryAdaptor.class -org/apache/http/conn/scheme/Scheme.class -org/apache/http/conn/scheme/HostNameResolver.class -org/apache/http/conn/scheme/SchemeRegistry.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor2.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor.class -org/apache/http/conn/scheme/SocketFactory.class -org/apache/http/conn/scheme/SchemeSocketFactory.class -org/apache/http/conn/scheme/SocketFactoryAdaptor.class -org/apache/http/conn/scheme/LayeredSchemeSocketFactory.class -org/apache/http/conn/scheme/LayeredSocketFactory.class -org/apache/http/conn/ConnectTimeoutException.class -org/apache/http/conn/util/ -org/apache/http/conn/util/DomainType.class -org/apache/http/conn/util/InetAddressUtils.class -org/apache/http/conn/util/PublicSuffixList.class -org/apache/http/conn/util/PublicSuffixMatcher.class -org/apache/http/conn/util/PublicSuffixListParser.class -org/apache/http/conn/util/PublicSuffixMatcherLoader.class -org/apache/http/conn/HttpInetSocketAddress.class -org/apache/http/conn/HttpConnectionFactory.class -org/apache/http/conn/HttpHostConnectException.class -org/apache/http/conn/DnsResolver.class -org/apache/http/conn/MultihomePlainSocketFactory.class -org/apache/http/conn/UnsupportedSchemeException.class -org/apache/http/impl/auth/ -org/apache/http/impl/auth/NTLMEngineImpl$CipherGen.class -org/apache/http/impl/auth/NTLMScheme$State.class -org/apache/http/impl/auth/GGSSchemeBase$1.class -org/apache/http/impl/auth/NTLMEngineException.class -org/apache/http/impl/auth/KerberosSchemeFactory.class -org/apache/http/impl/auth/RFC2617Scheme.class -org/apache/http/impl/auth/NTLMScheme.class -org/apache/http/impl/auth/KerberosScheme.class -org/apache/http/impl/auth/HttpEntityDigester.class -org/apache/http/impl/auth/SPNegoScheme.class -org/apache/http/impl/auth/BasicSchemeFactory.class -org/apache/http/impl/auth/NegotiateScheme.class -org/apache/http/impl/auth/NTLMSchemeFactory.class -org/apache/http/impl/auth/NTLMEngineImpl$NTLMMessage.class -org/apache/http/impl/auth/GGSSchemeBase.class -org/apache/http/impl/auth/HttpAuthenticator$1.class -org/apache/http/impl/auth/NTLMEngine.class -org/apache/http/impl/auth/DigestScheme.class -org/apache/http/impl/auth/NTLMEngineImpl.class -org/apache/http/impl/auth/AuthSchemeBase.class -org/apache/http/impl/auth/NTLMEngineImpl$Type3Message.class -org/apache/http/impl/auth/NegotiateSchemeFactory.class -org/apache/http/impl/auth/SpnegoTokenGenerator.class -org/apache/http/impl/auth/NTLMEngineImpl$HMACMD5.class -org/apache/http/impl/auth/HttpAuthenticator.class -org/apache/http/impl/auth/GGSSchemeBase$State.class -org/apache/http/impl/auth/NTLMEngineImpl$MD4.class -org/apache/http/impl/auth/NTLMEngineImpl$Type2Message.class -org/apache/http/impl/auth/DigestSchemeFactory.class -org/apache/http/impl/auth/SPNegoSchemeFactory.class -org/apache/http/impl/auth/NTLMEngineImpl$Type1Message.class -org/apache/http/impl/auth/BasicScheme.class -org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.class -org/apache/http/impl/cookie/ -org/apache/http/impl/cookie/BestMatchSpec.class -org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider$CompatibilityLevel.class -org/apache/http/impl/cookie/BasicClientCookie2.class -org/apache/http/impl/cookie/BasicSecureHandler.class -org/apache/http/impl/cookie/RFC2109Spec.class -org/apache/http/impl/cookie/RFC2965Spec.class -org/apache/http/impl/cookie/PublicSuffixFilter.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$2.class -org/apache/http/impl/cookie/BasicDomainHandler.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider.class -org/apache/http/impl/cookie/RFC2109VersionHandler.class -org/apache/http/impl/cookie/RFC2109DomainHandler.class -org/apache/http/impl/cookie/BasicMaxAgeHandler.class -org/apache/http/impl/cookie/NetscapeDraftSpec.class -org/apache/http/impl/cookie/LaxExpiresHandler.class -org/apache/http/impl/cookie/BasicExpiresHandler.class -org/apache/http/impl/cookie/BrowserCompatSpec.class -org/apache/http/impl/cookie/RFC2965SpecFactory.class -org/apache/http/impl/cookie/DefaultCookieSpec.class -org/apache/http/impl/cookie/BrowserCompatSpec$1.class -org/apache/http/impl/cookie/BrowserCompatVersionAttributeHandler.class -org/apache/http/impl/cookie/IgnoreSpec.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider.class -org/apache/http/impl/cookie/BestMatchSpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$CompatibilityLevel.class -org/apache/http/impl/cookie/RFC6265StrictSpec.class -org/apache/http/impl/cookie/RFC2965PortAttributeHandler.class -org/apache/http/impl/cookie/IgnoreSpecProvider.class -org/apache/http/impl/cookie/BasicClientCookie.class -org/apache/http/impl/cookie/NetscapeDraftHeaderParser.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider$1.class -org/apache/http/impl/cookie/BasicPathHandler.class -org/apache/http/impl/cookie/LaxMaxAgeHandler.class -org/apache/http/impl/cookie/RFC6265CookieSpecBase.class -org/apache/http/impl/cookie/RFC2965SpecProvider.class -org/apache/http/impl/cookie/NetscapeDomainHandler.class -org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.class -org/apache/http/impl/cookie/PublicSuffixDomainFilter.class -org/apache/http/impl/cookie/IgnoreSpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$1.class -org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.class -org/apache/http/impl/cookie/AbstractCookieAttributeHandler.class -org/apache/http/impl/cookie/BrowserCompatSpecFactory.class -org/apache/http/impl/cookie/RFC2109SpecProvider.class -org/apache/http/impl/cookie/BrowserCompatSpecFactory$SecurityLevel.class -org/apache/http/impl/cookie/NetscapeDraftSpecFactory.class -org/apache/http/impl/cookie/CookieSpecBase.class -org/apache/http/impl/cookie/RFC6265LaxSpec.class -org/apache/http/impl/cookie/DateParseException.class -org/apache/http/impl/cookie/RFC2109SpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpec.class -org/apache/http/impl/cookie/PublicSuffixListParser.class -org/apache/http/impl/cookie/AbstractCookieSpec.class -org/apache/http/impl/cookie/BasicCommentHandler.class -org/apache/http/impl/cookie/DateUtils.class -org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.class -org/apache/http/impl/cookie/NetscapeDraftSpecProvider.class -org/apache/http/impl/client/ -org/apache/http/impl/client/TargetAuthenticationStrategy.class -org/apache/http/impl/client/LaxRedirectStrategy.class -org/apache/http/impl/client/NoopUserTokenHandler.class -org/apache/http/impl/client/RoutedRequest.class -org/apache/http/impl/client/AuthenticationStrategyImpl.class -org/apache/http/impl/client/MinimalHttpClient$1.class -org/apache/http/impl/client/CloseableHttpResponseProxy.class -org/apache/http/impl/client/DefaultProxyAuthenticationHandler.class -org/apache/http/impl/client/DefaultRedirectStrategy.class -org/apache/http/impl/client/FutureRequestExecutionService.class -org/apache/http/impl/client/FutureRequestExecutionMetrics$DurationCounter.class -org/apache/http/impl/client/HttpClientBuilder.class -org/apache/http/impl/client/AutoRetryHttpClient.class -org/apache/http/impl/client/BasicCredentialsProvider.class -org/apache/http/impl/client/AbstractResponseHandler.class -org/apache/http/impl/client/IdleConnectionEvictor$DefaultThreadFactory.class -org/apache/http/impl/client/RequestWrapper.class -org/apache/http/impl/client/HttpRequestFutureTask.class -org/apache/http/impl/client/ProxyClient.class -org/apache/http/impl/client/ContentEncodingHttpClient.class -org/apache/http/impl/client/RedirectLocations.class -org/apache/http/impl/client/DefaultHttpRequestRetryHandler.class -org/apache/http/impl/client/HttpRequestTaskCallable.class -org/apache/http/impl/client/StandardHttpRequestRetryHandler.class -org/apache/http/impl/client/AIMDBackoffManager.class -org/apache/http/impl/client/AbstractAuthenticationHandler.class -org/apache/http/impl/client/DecompressingHttpClient.class -org/apache/http/impl/client/SystemClock.class -org/apache/http/impl/client/DefaultRedirectStrategyAdaptor.class -org/apache/http/impl/client/EntityEnclosingRequestWrapper$EntityWrapper.class -org/apache/http/impl/client/AbstractHttpClient.class -org/apache/http/impl/client/Clock.class -org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.class -org/apache/http/impl/client/InternalHttpClient$1.class -org/apache/http/impl/client/SystemDefaultHttpClient.class -org/apache/http/impl/client/AuthenticationStrategyAdaptor.class -org/apache/http/impl/client/IdleConnectionEvictor.class -org/apache/http/impl/client/SystemDefaultCredentialsProvider.class -org/apache/http/impl/client/FutureRequestExecutionMetrics.class -org/apache/http/impl/client/InternalHttpClient.class -org/apache/http/impl/client/HttpClientBuilder$2.class -org/apache/http/impl/client/NullBackoffStrategy.class -org/apache/http/impl/client/DefaultBackoffStrategy.class -org/apache/http/impl/client/HttpAuthenticator.class -org/apache/http/impl/client/BasicCookieStore.class -org/apache/http/impl/client/EntityEnclosingRequestWrapper.class -org/apache/http/impl/client/CookieSpecRegistries.class -org/apache/http/impl/client/DefaultClientConnectionReuseStrategy.class -org/apache/http/impl/client/DefaultServiceUnavailableRetryStrategy.class -org/apache/http/impl/client/DefaultRedirectHandler.class -org/apache/http/impl/client/HttpClients.class -org/apache/http/impl/client/CloseableHttpClient.class -org/apache/http/impl/client/TunnelRefusedException.class -org/apache/http/impl/client/MinimalHttpClient.class -org/apache/http/impl/client/BasicAuthCache.class -org/apache/http/impl/client/BasicResponseHandler.class -org/apache/http/impl/client/DefaultUserTokenHandler.class -org/apache/http/impl/client/HttpClientBuilder$1.class -org/apache/http/impl/client/ClientParamsStack.class -org/apache/http/impl/client/DefaultRequestDirector.class -org/apache/http/impl/client/DefaultTargetAuthenticationHandler.class -org/apache/http/impl/client/IdleConnectionEvictor$1.class -org/apache/http/impl/client/DefaultHttpClient.class -org/apache/http/impl/client/ProxyAuthenticationStrategy.class -org/apache/http/impl/execchain/ -org/apache/http/impl/execchain/ServiceUnavailableRetryExec.class -org/apache/http/impl/execchain/RequestEntityProxy.class -org/apache/http/impl/execchain/ProtocolExec.class -org/apache/http/impl/execchain/MinimalClientExec.class -org/apache/http/impl/execchain/MainClientExec.class -org/apache/http/impl/execchain/RedirectExec.class -org/apache/http/impl/execchain/ClientExecChain.class -org/apache/http/impl/execchain/ConnectionHolder.class -org/apache/http/impl/execchain/HttpResponseProxy.class -org/apache/http/impl/execchain/RetryExec.class -org/apache/http/impl/execchain/TunnelRefusedException.class -org/apache/http/impl/execchain/RequestAbortedException.class -org/apache/http/impl/execchain/ResponseEntityProxy.class -org/apache/http/impl/execchain/BackoffStrategyExec.class -org/apache/http/impl/conn/ -org/apache/http/impl/conn/HttpPoolEntry.class -org/apache/http/impl/conn/DefaultClientConnection.class -org/apache/http/impl/conn/CPool.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager.class -org/apache/http/impl/conn/Wire.class -org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.class -org/apache/http/impl/conn/IdleConnectionHandler.class -org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.class -org/apache/http/impl/conn/SystemDefaultRoutePlanner$1.class -org/apache/http/impl/conn/CPoolProxy.class -org/apache/http/impl/conn/DefaultHttpRoutePlanner.class -org/apache/http/impl/conn/PoolingClientConnectionManager.class -org/apache/http/impl/conn/DefaultManagedHttpClientConnection.class -org/apache/http/impl/conn/LoggingSessionInputBuffer.class -org/apache/http/impl/conn/ConnectionShutdownException.class -org/apache/http/impl/conn/LoggingOutputStream.class -org/apache/http/impl/conn/ManagedClientConnectionImpl.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$ConfigData.class -org/apache/http/impl/conn/DefaultResponseParser.class -org/apache/http/impl/conn/LoggingInputStream.class -org/apache/http/impl/conn/AbstractClientConnAdapter.class -org/apache/http/impl/conn/SystemDefaultRoutePlanner.class -org/apache/http/impl/conn/tsccm/ -org/apache/http/impl/conn/tsccm/ConnPoolByRoute.class -org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1.class -org/apache/http/impl/conn/tsccm/RouteSpecificPool.class -org/apache/http/impl/conn/tsccm/ConnPoolByRoute$1.class -org/apache/http/impl/conn/tsccm/PoolEntryRequest.class -org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.class -org/apache/http/impl/conn/tsccm/WaitingThread.class -org/apache/http/impl/conn/tsccm/WaitingThreadAborter.class -org/apache/http/impl/conn/tsccm/RouteSpecificPool$1.class -org/apache/http/impl/conn/tsccm/AbstractConnPool.class -org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.class -org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.class -org/apache/http/impl/conn/tsccm/BasicPoolEntry.class -org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$InternalConnectionFactory.class -org/apache/http/impl/conn/DefaultHttpResponseParserFactory.class -org/apache/http/impl/conn/AbstractPoolEntry.class -org/apache/http/impl/conn/ProxySelectorRoutePlanner$1.class -org/apache/http/impl/conn/AbstractPooledConnAdapter.class -org/apache/http/impl/conn/SingleClientConnManager$PoolEntry.class -org/apache/http/impl/conn/HttpConnPool$InternalConnFactory.class -org/apache/http/impl/conn/SchemeRegistryFactory.class -org/apache/http/impl/conn/DefaultClientConnectionOperator.class -org/apache/http/impl/conn/LoggingManagedHttpClientConnection.class -org/apache/http/impl/conn/LoggingSessionOutputBuffer.class -org/apache/http/impl/conn/BasicHttpClientConnectionManager$1.class -org/apache/http/impl/conn/DefaultProxyRoutePlanner.class -org/apache/http/impl/conn/BasicClientConnectionManager$1.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$1.class -org/apache/http/impl/conn/BasicHttpClientConnectionManager.class -org/apache/http/impl/conn/PoolingClientConnectionManager$1.class -org/apache/http/impl/conn/IdleConnectionHandler$TimeValues.class -org/apache/http/impl/conn/CPoolEntry.class -org/apache/http/impl/conn/DefaultSchemePortResolver.class -org/apache/http/impl/conn/SingleClientConnManager.class -org/apache/http/impl/conn/DefaultRoutePlanner.class -org/apache/http/impl/conn/InMemoryDnsResolver.class -org/apache/http/impl/conn/DefaultHttpResponseParser.class -org/apache/http/impl/conn/HttpConnPool.class -org/apache/http/impl/conn/BasicClientConnectionManager.class -org/apache/http/impl/conn/SingleClientConnManager$1.class -org/apache/http/impl/conn/ProxySelectorRoutePlanner.class -org/apache/http/impl/conn/SystemDefaultDnsResolver.class -mozilla/ -mozilla/public-suffix-list.txt -META-INF/maven/org.apache.httpcomponents/httpclient/ -META-INF/maven/org.apache.httpcomponents/httpclient/pom.xml -META-INF/maven/org.apache.httpcomponents/httpclient/pom.properties -META-INF/NOTICE.txt -META-INF/LICENSE.txt -org/apache/commons/ -org/apache/commons/logging/ -org/apache/commons/logging/impl/ -org/apache/commons/logging/impl/AvalonLogger.class -org/apache/commons/logging/impl/SimpleLog.class -org/apache/commons/logging/impl/Log4JLogger.class -org/apache/commons/logging/impl/WeakHashtable.class -org/apache/commons/logging/impl/WeakHashtable$1.class -org/apache/commons/logging/impl/Jdk14Logger.class -org/apache/commons/logging/impl/ServletContextCleaner.class -org/apache/commons/logging/impl/WeakHashtable$WeakKey.class -org/apache/commons/logging/impl/NoOpLog.class -org/apache/commons/logging/impl/LogKitLogger.class -org/apache/commons/logging/impl/LogFactoryImpl$3.class -org/apache/commons/logging/impl/LogFactoryImpl$1.class -org/apache/commons/logging/impl/WeakHashtable$Referenced.class -org/apache/commons/logging/impl/SimpleLog$1.class -org/apache/commons/logging/impl/Jdk13LumberjackLogger.class -org/apache/commons/logging/impl/LogFactoryImpl.class -org/apache/commons/logging/impl/LogFactoryImpl$2.class -org/apache/commons/logging/impl/WeakHashtable$Entry.class -org/apache/commons/logging/LogSource.class -org/apache/commons/logging/LogFactory$4.class -org/apache/commons/logging/LogFactory$3.class -org/apache/commons/logging/LogFactory$6.class -org/apache/commons/logging/LogConfigurationException.class -org/apache/commons/logging/LogFactory.class -org/apache/commons/logging/LogFactory$5.class -org/apache/commons/logging/LogFactory$1.class -org/apache/commons/logging/LogFactory$2.class -org/apache/commons/logging/Log.class -META-INF/maven/commons-logging/ -META-INF/maven/commons-logging/commons-logging/ -META-INF/maven/commons-logging/commons-logging/pom.xml -META-INF/maven/commons-logging/commons-logging/pom.properties -org/apache/commons/codec/ -org/apache/commons/codec/binary/ -org/apache/commons/codec/binary/Base32.class -org/apache/commons/codec/binary/Base32InputStream.class -org/apache/commons/codec/binary/Base32OutputStream.class -org/apache/commons/codec/binary/Base64.class -org/apache/commons/codec/binary/Base64InputStream.class -org/apache/commons/codec/binary/Base64OutputStream.class -org/apache/commons/codec/binary/BaseNCodec$Context.class -org/apache/commons/codec/binary/BaseNCodec.class -org/apache/commons/codec/binary/BaseNCodecInputStream.class -org/apache/commons/codec/binary/BaseNCodecOutputStream.class -org/apache/commons/codec/binary/BinaryCodec.class -org/apache/commons/codec/binary/Hex.class -org/apache/commons/codec/binary/StringUtils.class -org/apache/commons/codec/BinaryDecoder.class -org/apache/commons/codec/BinaryEncoder.class -org/apache/commons/codec/CharEncoding.class -org/apache/commons/codec/Charsets.class -org/apache/commons/codec/Decoder.class -org/apache/commons/codec/DecoderException.class -org/apache/commons/codec/digest/ -org/apache/commons/codec/digest/B64.class -org/apache/commons/codec/digest/Crypt.class -org/apache/commons/codec/digest/DigestUtils.class -org/apache/commons/codec/digest/Md5Crypt.class -org/apache/commons/codec/digest/MessageDigestAlgorithms.class -org/apache/commons/codec/digest/Sha2Crypt.class -org/apache/commons/codec/digest/UnixCrypt.class -org/apache/commons/codec/Encoder.class -org/apache/commons/codec/EncoderException.class -org/apache/commons/codec/language/ -org/apache/commons/codec/language/AbstractCaverphone.class -org/apache/commons/codec/language/bm/ -org/apache/commons/codec/language/bm/ash_approx_any.txt -org/apache/commons/codec/language/bm/ash_approx_common.txt -org/apache/commons/codec/language/bm/ash_approx_cyrillic.txt -org/apache/commons/codec/language/bm/ash_approx_english.txt -org/apache/commons/codec/language/bm/ash_approx_french.txt -org/apache/commons/codec/language/bm/ash_approx_german.txt -org/apache/commons/codec/language/bm/ash_approx_hebrew.txt -org/apache/commons/codec/language/bm/ash_approx_hungarian.txt -org/apache/commons/codec/language/bm/ash_approx_polish.txt -org/apache/commons/codec/language/bm/ash_approx_romanian.txt -org/apache/commons/codec/language/bm/ash_approx_russian.txt -org/apache/commons/codec/language/bm/ash_approx_spanish.txt -org/apache/commons/codec/language/bm/ash_exact_any.txt -org/apache/commons/codec/language/bm/ash_exact_approx_common.txt -org/apache/commons/codec/language/bm/ash_exact_common.txt -org/apache/commons/codec/language/bm/ash_exact_cyrillic.txt -org/apache/commons/codec/language/bm/ash_exact_english.txt -org/apache/commons/codec/language/bm/ash_exact_french.txt -org/apache/commons/codec/language/bm/ash_exact_german.txt -org/apache/commons/codec/language/bm/ash_exact_hebrew.txt -org/apache/commons/codec/language/bm/ash_exact_hungarian.txt -org/apache/commons/codec/language/bm/ash_exact_polish.txt -org/apache/commons/codec/language/bm/ash_exact_romanian.txt -org/apache/commons/codec/language/bm/ash_exact_russian.txt -org/apache/commons/codec/language/bm/ash_exact_spanish.txt -org/apache/commons/codec/language/bm/ash_hebrew_common.txt -org/apache/commons/codec/language/bm/ash_languages.txt -org/apache/commons/codec/language/bm/ash_rules_any.txt -org/apache/commons/codec/language/bm/ash_rules_cyrillic.txt -org/apache/commons/codec/language/bm/ash_rules_english.txt -org/apache/commons/codec/language/bm/ash_rules_french.txt -org/apache/commons/codec/language/bm/ash_rules_german.txt -org/apache/commons/codec/language/bm/ash_rules_hebrew.txt -org/apache/commons/codec/language/bm/ash_rules_hungarian.txt -org/apache/commons/codec/language/bm/ash_rules_polish.txt -org/apache/commons/codec/language/bm/ash_rules_romanian.txt -org/apache/commons/codec/language/bm/ash_rules_russian.txt -org/apache/commons/codec/language/bm/ash_rules_spanish.txt -org/apache/commons/codec/language/bm/BeiderMorseEncoder.class -org/apache/commons/codec/language/bm/gen_approx_any.txt -org/apache/commons/codec/language/bm/gen_approx_arabic.txt -org/apache/commons/codec/language/bm/gen_approx_common.txt -org/apache/commons/codec/language/bm/gen_approx_cyrillic.txt -org/apache/commons/codec/language/bm/gen_approx_czech.txt -org/apache/commons/codec/language/bm/gen_approx_dutch.txt -org/apache/commons/codec/language/bm/gen_approx_english.txt -org/apache/commons/codec/language/bm/gen_approx_french.txt -org/apache/commons/codec/language/bm/gen_approx_german.txt -org/apache/commons/codec/language/bm/gen_approx_greek.txt -org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt -org/apache/commons/codec/language/bm/gen_approx_hebrew.txt -org/apache/commons/codec/language/bm/gen_approx_hungarian.txt -org/apache/commons/codec/language/bm/gen_approx_italian.txt -org/apache/commons/codec/language/bm/gen_approx_polish.txt -org/apache/commons/codec/language/bm/gen_approx_portuguese.txt -org/apache/commons/codec/language/bm/gen_approx_romanian.txt -org/apache/commons/codec/language/bm/gen_approx_russian.txt -org/apache/commons/codec/language/bm/gen_approx_spanish.txt -org/apache/commons/codec/language/bm/gen_approx_turkish.txt -org/apache/commons/codec/language/bm/gen_exact_any.txt -org/apache/commons/codec/language/bm/gen_exact_approx_common.txt -org/apache/commons/codec/language/bm/gen_exact_arabic.txt -org/apache/commons/codec/language/bm/gen_exact_common.txt -org/apache/commons/codec/language/bm/gen_exact_cyrillic.txt -org/apache/commons/codec/language/bm/gen_exact_czech.txt -org/apache/commons/codec/language/bm/gen_exact_dutch.txt -org/apache/commons/codec/language/bm/gen_exact_english.txt -org/apache/commons/codec/language/bm/gen_exact_french.txt -org/apache/commons/codec/language/bm/gen_exact_german.txt -org/apache/commons/codec/language/bm/gen_exact_greek.txt -org/apache/commons/codec/language/bm/gen_exact_greeklatin.txt -org/apache/commons/codec/language/bm/gen_exact_hebrew.txt -org/apache/commons/codec/language/bm/gen_exact_hungarian.txt -org/apache/commons/codec/language/bm/gen_exact_italian.txt -org/apache/commons/codec/language/bm/gen_exact_polish.txt -org/apache/commons/codec/language/bm/gen_exact_portuguese.txt -org/apache/commons/codec/language/bm/gen_exact_romanian.txt -org/apache/commons/codec/language/bm/gen_exact_russian.txt -org/apache/commons/codec/language/bm/gen_exact_spanish.txt -org/apache/commons/codec/language/bm/gen_exact_turkish.txt -org/apache/commons/codec/language/bm/gen_hebrew_common.txt -org/apache/commons/codec/language/bm/gen_languages.txt -org/apache/commons/codec/language/bm/gen_rules_any.txt -org/apache/commons/codec/language/bm/gen_rules_arabic.txt -org/apache/commons/codec/language/bm/gen_rules_cyrillic.txt -org/apache/commons/codec/language/bm/gen_rules_czech.txt -org/apache/commons/codec/language/bm/gen_rules_dutch.txt -org/apache/commons/codec/language/bm/gen_rules_english.txt -org/apache/commons/codec/language/bm/gen_rules_french.txt -org/apache/commons/codec/language/bm/gen_rules_german.txt -org/apache/commons/codec/language/bm/gen_rules_greek.txt -org/apache/commons/codec/language/bm/gen_rules_greeklatin.txt -org/apache/commons/codec/language/bm/gen_rules_hebrew.txt -org/apache/commons/codec/language/bm/gen_rules_hungarian.txt -org/apache/commons/codec/language/bm/gen_rules_italian.txt -org/apache/commons/codec/language/bm/gen_rules_polish.txt -org/apache/commons/codec/language/bm/gen_rules_portuguese.txt -org/apache/commons/codec/language/bm/gen_rules_romanian.txt -org/apache/commons/codec/language/bm/gen_rules_russian.txt -org/apache/commons/codec/language/bm/gen_rules_spanish.txt -org/apache/commons/codec/language/bm/gen_rules_turkish.txt -org/apache/commons/codec/language/bm/Lang$1.class -org/apache/commons/codec/language/bm/Lang$LangRule.class -org/apache/commons/codec/language/bm/Lang.class -org/apache/commons/codec/language/bm/lang.txt -org/apache/commons/codec/language/bm/Languages$1.class -org/apache/commons/codec/language/bm/Languages$2.class -org/apache/commons/codec/language/bm/Languages$LanguageSet.class -org/apache/commons/codec/language/bm/Languages$SomeLanguages.class -org/apache/commons/codec/language/bm/Languages.class -org/apache/commons/codec/language/bm/NameType.class -org/apache/commons/codec/language/bm/PhoneticEngine$1.class -org/apache/commons/codec/language/bm/PhoneticEngine$PhonemeBuilder.class -org/apache/commons/codec/language/bm/PhoneticEngine$RulesApplication.class -org/apache/commons/codec/language/bm/PhoneticEngine.class -org/apache/commons/codec/language/bm/ResourceConstants.class -org/apache/commons/codec/language/bm/Rule$1.class -org/apache/commons/codec/language/bm/Rule$10.class -org/apache/commons/codec/language/bm/Rule$2.class -org/apache/commons/codec/language/bm/Rule$3.class -org/apache/commons/codec/language/bm/Rule$4.class -org/apache/commons/codec/language/bm/Rule$5.class -org/apache/commons/codec/language/bm/Rule$6.class -org/apache/commons/codec/language/bm/Rule$7.class -org/apache/commons/codec/language/bm/Rule$8.class -org/apache/commons/codec/language/bm/Rule$9.class -org/apache/commons/codec/language/bm/Rule$Phoneme$1.class -org/apache/commons/codec/language/bm/Rule$Phoneme.class -org/apache/commons/codec/language/bm/Rule$PhonemeExpr.class -org/apache/commons/codec/language/bm/Rule$PhonemeList.class -org/apache/commons/codec/language/bm/Rule$RPattern.class -org/apache/commons/codec/language/bm/Rule.class -org/apache/commons/codec/language/bm/RuleType.class -org/apache/commons/codec/language/bm/sep_approx_any.txt -org/apache/commons/codec/language/bm/sep_approx_common.txt -org/apache/commons/codec/language/bm/sep_approx_french.txt -org/apache/commons/codec/language/bm/sep_approx_hebrew.txt -org/apache/commons/codec/language/bm/sep_approx_italian.txt -org/apache/commons/codec/language/bm/sep_approx_portuguese.txt -org/apache/commons/codec/language/bm/sep_approx_spanish.txt -org/apache/commons/codec/language/bm/sep_exact_any.txt -org/apache/commons/codec/language/bm/sep_exact_approx_common.txt -org/apache/commons/codec/language/bm/sep_exact_common.txt -org/apache/commons/codec/language/bm/sep_exact_french.txt -org/apache/commons/codec/language/bm/sep_exact_hebrew.txt -org/apache/commons/codec/language/bm/sep_exact_italian.txt -org/apache/commons/codec/language/bm/sep_exact_portuguese.txt -org/apache/commons/codec/language/bm/sep_exact_spanish.txt -org/apache/commons/codec/language/bm/sep_hebrew_common.txt -org/apache/commons/codec/language/bm/sep_languages.txt -org/apache/commons/codec/language/bm/sep_rules_any.txt -org/apache/commons/codec/language/bm/sep_rules_french.txt -org/apache/commons/codec/language/bm/sep_rules_hebrew.txt -org/apache/commons/codec/language/bm/sep_rules_italian.txt -org/apache/commons/codec/language/bm/sep_rules_portuguese.txt -org/apache/commons/codec/language/bm/sep_rules_spanish.txt -org/apache/commons/codec/language/Caverphone.class -org/apache/commons/codec/language/Caverphone1.class -org/apache/commons/codec/language/Caverphone2.class -org/apache/commons/codec/language/ColognePhonetic$CologneBuffer.class -org/apache/commons/codec/language/ColognePhonetic$CologneInputBuffer.class -org/apache/commons/codec/language/ColognePhonetic$CologneOutputBuffer.class -org/apache/commons/codec/language/ColognePhonetic.class -org/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult.class -org/apache/commons/codec/language/DoubleMetaphone.class -org/apache/commons/codec/language/MatchRatingApproachEncoder.class -org/apache/commons/codec/language/Metaphone.class -org/apache/commons/codec/language/Nysiis.class -org/apache/commons/codec/language/RefinedSoundex.class -org/apache/commons/codec/language/Soundex.class -org/apache/commons/codec/language/SoundexUtils.class -org/apache/commons/codec/net/ -org/apache/commons/codec/net/BCodec.class -org/apache/commons/codec/net/QCodec.class -org/apache/commons/codec/net/QuotedPrintableCodec.class -org/apache/commons/codec/net/RFC1522Codec.class -org/apache/commons/codec/net/URLCodec.class -org/apache/commons/codec/net/Utils.class -org/apache/commons/codec/StringDecoder.class -org/apache/commons/codec/StringEncoder.class -org/apache/commons/codec/StringEncoderComparator.class -META-INF/maven/commons-codec/ -META-INF/maven/commons-codec/commons-codec/ -META-INF/maven/commons-codec/commons-codec/pom.xml -META-INF/maven/commons-codec/commons-codec/pom.properties -META-INF/maven/com.fasterxml.jackson.core/ -META-INF/maven/com.fasterxml.jackson.core/jackson-core/ -META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml -META-INF/services/ -META-INF/services/com.fasterxml.jackson.core.JsonFactory -com/fasterxml/ -com/fasterxml/jackson/ -com/fasterxml/jackson/core/ -com/fasterxml/jackson/core/Base64Variant.class -com/fasterxml/jackson/core/Base64Variants.class -com/fasterxml/jackson/core/FormatFeature.class -com/fasterxml/jackson/core/FormatSchema.class -com/fasterxml/jackson/core/JsonEncoding.class -com/fasterxml/jackson/core/JsonFactory$Feature.class -com/fasterxml/jackson/core/JsonFactory.class -com/fasterxml/jackson/core/JsonGenerationException.class -com/fasterxml/jackson/core/JsonGenerator$1.class -com/fasterxml/jackson/core/JsonGenerator$Feature.class -com/fasterxml/jackson/core/JsonGenerator.class -com/fasterxml/jackson/core/JsonLocation.class -com/fasterxml/jackson/core/JsonParseException.class -com/fasterxml/jackson/core/JsonParser$Feature.class -com/fasterxml/jackson/core/JsonParser$NumberType.class -com/fasterxml/jackson/core/JsonParser.class -com/fasterxml/jackson/core/JsonPointer.class -com/fasterxml/jackson/core/JsonProcessingException.class -com/fasterxml/jackson/core/JsonStreamContext.class -com/fasterxml/jackson/core/JsonToken.class -com/fasterxml/jackson/core/JsonTokenId.class -com/fasterxml/jackson/core/JsonpCharacterEscapes.class -com/fasterxml/jackson/core/ObjectCodec.class -com/fasterxml/jackson/core/PrettyPrinter.class -com/fasterxml/jackson/core/SerializableString.class -com/fasterxml/jackson/core/TreeCodec.class -com/fasterxml/jackson/core/TreeNode.class -com/fasterxml/jackson/core/Version.class -com/fasterxml/jackson/core/Versioned.class -com/fasterxml/jackson/core/async/ -com/fasterxml/jackson/core/async/ByteArrayFeeder.class -com/fasterxml/jackson/core/async/ByteBufferFeeder.class -com/fasterxml/jackson/core/async/NonBlockingInputFeeder.class -com/fasterxml/jackson/core/base/ -com/fasterxml/jackson/core/base/GeneratorBase.class -com/fasterxml/jackson/core/base/ParserBase.class -com/fasterxml/jackson/core/base/ParserMinimalBase.class -com/fasterxml/jackson/core/filter/ -com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.class -com/fasterxml/jackson/core/filter/FilteringParserDelegate.class -com/fasterxml/jackson/core/filter/JsonPointerBasedFilter.class -com/fasterxml/jackson/core/filter/TokenFilter.class -com/fasterxml/jackson/core/filter/TokenFilterContext.class -com/fasterxml/jackson/core/format/ -com/fasterxml/jackson/core/format/DataFormatDetector.class -com/fasterxml/jackson/core/format/DataFormatMatcher.class -com/fasterxml/jackson/core/format/InputAccessor$Std.class -com/fasterxml/jackson/core/format/InputAccessor.class -com/fasterxml/jackson/core/format/MatchStrength.class -com/fasterxml/jackson/core/io/ -com/fasterxml/jackson/core/io/CharTypes.class -com/fasterxml/jackson/core/io/CharacterEscapes.class -com/fasterxml/jackson/core/io/DataOutputAsStream.class -com/fasterxml/jackson/core/io/IOContext.class -com/fasterxml/jackson/core/io/InputDecorator.class -com/fasterxml/jackson/core/io/JsonEOFException.class -com/fasterxml/jackson/core/io/JsonStringEncoder.class -com/fasterxml/jackson/core/io/MergedStream.class -com/fasterxml/jackson/core/io/NumberInput.class -com/fasterxml/jackson/core/io/NumberOutput.class -com/fasterxml/jackson/core/io/OutputDecorator.class -com/fasterxml/jackson/core/io/SegmentedStringWriter.class -com/fasterxml/jackson/core/io/SerializedString.class -com/fasterxml/jackson/core/io/UTF32Reader.class -com/fasterxml/jackson/core/io/UTF8Writer.class -com/fasterxml/jackson/core/json/ -com/fasterxml/jackson/core/json/ByteSourceJsonBootstrapper.class -com/fasterxml/jackson/core/json/DupDetector.class -com/fasterxml/jackson/core/json/JsonGeneratorImpl.class -com/fasterxml/jackson/core/json/JsonReadContext.class -com/fasterxml/jackson/core/json/JsonWriteContext.class -com/fasterxml/jackson/core/json/PackageVersion.class -com/fasterxml/jackson/core/json/ReaderBasedJsonParser.class -com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.class -com/fasterxml/jackson/core/json/UTF8JsonGenerator.class -com/fasterxml/jackson/core/json/UTF8StreamJsonParser.class -com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.class -com/fasterxml/jackson/core/json/async/ -com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.class -com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.class -com/fasterxml/jackson/core/sym/ -com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer$TableInfo.class -com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$Bucket.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$TableInfo.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer.class -com/fasterxml/jackson/core/sym/Name.class -com/fasterxml/jackson/core/sym/Name1.class -com/fasterxml/jackson/core/sym/Name2.class -com/fasterxml/jackson/core/sym/Name3.class -com/fasterxml/jackson/core/sym/NameN.class -com/fasterxml/jackson/core/type/ -com/fasterxml/jackson/core/type/ResolvedType.class -com/fasterxml/jackson/core/type/TypeReference.class -com/fasterxml/jackson/core/type/WritableTypeId$Inclusion.class -com/fasterxml/jackson/core/type/WritableTypeId.class -com/fasterxml/jackson/core/util/ -com/fasterxml/jackson/core/util/BufferRecycler.class -com/fasterxml/jackson/core/util/BufferRecyclers.class -com/fasterxml/jackson/core/util/ByteArrayBuilder.class -com/fasterxml/jackson/core/util/DefaultIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$FixedSpaceIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$Indenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$NopIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter.class -com/fasterxml/jackson/core/util/Instantiatable.class -com/fasterxml/jackson/core/util/InternCache.class -com/fasterxml/jackson/core/util/JsonGeneratorDelegate.class -com/fasterxml/jackson/core/util/JsonParserDelegate.class -com/fasterxml/jackson/core/util/JsonParserSequence.class -com/fasterxml/jackson/core/util/MinimalPrettyPrinter.class -com/fasterxml/jackson/core/util/RequestPayload.class -com/fasterxml/jackson/core/util/Separators.class -com/fasterxml/jackson/core/util/TextBuffer.class -com/fasterxml/jackson/core/util/ThreadLocalBufferManager$ThreadLocalBufferManagerHolder.class -com/fasterxml/jackson/core/util/ThreadLocalBufferManager.class -com/fasterxml/jackson/core/util/VersionUtil.class -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/ -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml -com/fasterxml/jackson/annotation/ -com/fasterxml/jackson/annotation/JacksonAnnotation.class -com/fasterxml/jackson/annotation/JacksonAnnotationValue.class -com/fasterxml/jackson/annotation/JacksonAnnotationsInside.class -com/fasterxml/jackson/annotation/JacksonInject$Value.class -com/fasterxml/jackson/annotation/JacksonInject.class -com/fasterxml/jackson/annotation/JsonAlias.class -com/fasterxml/jackson/annotation/JsonAnyGetter.class -com/fasterxml/jackson/annotation/JsonAnySetter.class -com/fasterxml/jackson/annotation/JsonAutoDetect$1.class -com/fasterxml/jackson/annotation/JsonAutoDetect$Value.class -com/fasterxml/jackson/annotation/JsonAutoDetect$Visibility.class -com/fasterxml/jackson/annotation/JsonAutoDetect.class -com/fasterxml/jackson/annotation/JsonBackReference.class -com/fasterxml/jackson/annotation/JsonClassDescription.class -com/fasterxml/jackson/annotation/JsonCreator$Mode.class -com/fasterxml/jackson/annotation/JsonCreator.class -com/fasterxml/jackson/annotation/JsonEnumDefaultValue.class -com/fasterxml/jackson/annotation/JsonFilter.class -com/fasterxml/jackson/annotation/JsonFormat$Feature.class -com/fasterxml/jackson/annotation/JsonFormat$Features.class -com/fasterxml/jackson/annotation/JsonFormat$Shape.class -com/fasterxml/jackson/annotation/JsonFormat$Value.class -com/fasterxml/jackson/annotation/JsonFormat.class -com/fasterxml/jackson/annotation/JsonGetter.class -com/fasterxml/jackson/annotation/JsonIdentityInfo.class -com/fasterxml/jackson/annotation/JsonIdentityReference.class -com/fasterxml/jackson/annotation/JsonIgnore.class -com/fasterxml/jackson/annotation/JsonIgnoreProperties$Value.class -com/fasterxml/jackson/annotation/JsonIgnoreProperties.class -com/fasterxml/jackson/annotation/JsonIgnoreType.class -com/fasterxml/jackson/annotation/JsonInclude$Include.class -com/fasterxml/jackson/annotation/JsonInclude$Value.class -com/fasterxml/jackson/annotation/JsonInclude.class -com/fasterxml/jackson/annotation/JsonManagedReference.class -com/fasterxml/jackson/annotation/JsonMerge.class -com/fasterxml/jackson/annotation/JsonProperty$Access.class -com/fasterxml/jackson/annotation/JsonProperty.class -com/fasterxml/jackson/annotation/JsonPropertyDescription.class -com/fasterxml/jackson/annotation/JsonPropertyOrder.class -com/fasterxml/jackson/annotation/JsonRawValue.class -com/fasterxml/jackson/annotation/JsonRootName.class -com/fasterxml/jackson/annotation/JsonSetter$Value.class -com/fasterxml/jackson/annotation/JsonSetter.class -com/fasterxml/jackson/annotation/JsonSubTypes$Type.class -com/fasterxml/jackson/annotation/JsonSubTypes.class -com/fasterxml/jackson/annotation/JsonTypeId.class -com/fasterxml/jackson/annotation/JsonTypeInfo$As.class -com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class -com/fasterxml/jackson/annotation/JsonTypeInfo$None.class -com/fasterxml/jackson/annotation/JsonTypeInfo.class -com/fasterxml/jackson/annotation/JsonTypeName.class -com/fasterxml/jackson/annotation/JsonUnwrapped.class -com/fasterxml/jackson/annotation/JsonValue.class -com/fasterxml/jackson/annotation/JsonView.class -com/fasterxml/jackson/annotation/Nulls.class -com/fasterxml/jackson/annotation/ObjectIdGenerator$IdKey.class -com/fasterxml/jackson/annotation/ObjectIdGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$Base.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$IntSequenceGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$None.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$PropertyGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$StringIdGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$UUIDGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators.class -com/fasterxml/jackson/annotation/ObjectIdResolver.class -com/fasterxml/jackson/annotation/OptBoolean.class -com/fasterxml/jackson/annotation/PropertyAccessor.class -com/fasterxml/jackson/annotation/SimpleObjectIdResolver.class -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/ -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml -META-INF/services/com.fasterxml.jackson.core.ObjectCodec -com/fasterxml/jackson/databind/ -com/fasterxml/jackson/databind/AbstractTypeResolver.class -com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty$Type.class -com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty.class -com/fasterxml/jackson/databind/AnnotationIntrospector.class -com/fasterxml/jackson/databind/BeanDescription.class -com/fasterxml/jackson/databind/BeanProperty$Bogus.class -com/fasterxml/jackson/databind/BeanProperty$Std.class -com/fasterxml/jackson/databind/BeanProperty.class -com/fasterxml/jackson/databind/DatabindContext.class -com/fasterxml/jackson/databind/DeserializationConfig.class -com/fasterxml/jackson/databind/DeserializationContext.class -com/fasterxml/jackson/databind/DeserializationFeature.class -com/fasterxml/jackson/databind/InjectableValues$Std.class -com/fasterxml/jackson/databind/InjectableValues.class -com/fasterxml/jackson/databind/JavaType.class -com/fasterxml/jackson/databind/JsonDeserializer$None.class -com/fasterxml/jackson/databind/JsonDeserializer.class -com/fasterxml/jackson/databind/JsonMappingException$Reference.class -com/fasterxml/jackson/databind/JsonMappingException.class -com/fasterxml/jackson/databind/JsonNode$1.class -com/fasterxml/jackson/databind/JsonNode.class -com/fasterxml/jackson/databind/JsonSerializable$Base.class -com/fasterxml/jackson/databind/JsonSerializable.class -com/fasterxml/jackson/databind/JsonSerializer$None.class -com/fasterxml/jackson/databind/JsonSerializer.class -com/fasterxml/jackson/databind/KeyDeserializer$None.class -com/fasterxml/jackson/databind/KeyDeserializer.class -com/fasterxml/jackson/databind/MapperFeature.class -com/fasterxml/jackson/databind/MappingIterator.class -com/fasterxml/jackson/databind/MappingJsonFactory.class -com/fasterxml/jackson/databind/Module$SetupContext.class -com/fasterxml/jackson/databind/Module.class -com/fasterxml/jackson/databind/ObjectMapper$1.class -com/fasterxml/jackson/databind/ObjectMapper$2.class -com/fasterxml/jackson/databind/ObjectMapper$3.class -com/fasterxml/jackson/databind/ObjectMapper$DefaultTypeResolverBuilder.class -com/fasterxml/jackson/databind/ObjectMapper$DefaultTyping.class -com/fasterxml/jackson/databind/ObjectMapper.class -com/fasterxml/jackson/databind/ObjectReader.class -com/fasterxml/jackson/databind/ObjectWriter$GeneratorSettings.class -com/fasterxml/jackson/databind/ObjectWriter$Prefetch.class -com/fasterxml/jackson/databind/ObjectWriter.class -com/fasterxml/jackson/databind/PropertyMetadata$MergeInfo.class -com/fasterxml/jackson/databind/PropertyMetadata.class -com/fasterxml/jackson/databind/PropertyName.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$KebabCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseWithUnderscoresStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$PascalCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$PropertyNamingStrategyBase.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$SnakeCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$UpperCamelCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy.class -com/fasterxml/jackson/databind/RuntimeJsonMappingException.class -com/fasterxml/jackson/databind/SequenceWriter.class -com/fasterxml/jackson/databind/SerializationConfig.class -com/fasterxml/jackson/databind/SerializationFeature.class -com/fasterxml/jackson/databind/SerializerProvider.class -com/fasterxml/jackson/databind/annotation/ -com/fasterxml/jackson/databind/annotation/JacksonStdImpl.class -com/fasterxml/jackson/databind/annotation/JsonAppend$Attr.class -com/fasterxml/jackson/databind/annotation/JsonAppend$Prop.class -com/fasterxml/jackson/databind/annotation/JsonAppend.class -com/fasterxml/jackson/databind/annotation/JsonDeserialize.class -com/fasterxml/jackson/databind/annotation/JsonNaming.class -com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder$Value.class -com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder.class -com/fasterxml/jackson/databind/annotation/JsonSerialize$Inclusion.class -com/fasterxml/jackson/databind/annotation/JsonSerialize$Typing.class -com/fasterxml/jackson/databind/annotation/JsonSerialize.class -com/fasterxml/jackson/databind/annotation/JsonTypeIdResolver.class -com/fasterxml/jackson/databind/annotation/JsonTypeResolver.class -com/fasterxml/jackson/databind/annotation/JsonValueInstantiator.class -com/fasterxml/jackson/databind/annotation/NoClass.class -com/fasterxml/jackson/databind/cfg/ -com/fasterxml/jackson/databind/cfg/BaseSettings.class -com/fasterxml/jackson/databind/cfg/ConfigFeature.class -com/fasterxml/jackson/databind/cfg/ConfigOverride$Empty.class -com/fasterxml/jackson/databind/cfg/ConfigOverride.class -com/fasterxml/jackson/databind/cfg/ConfigOverrides.class -com/fasterxml/jackson/databind/cfg/ContextAttributes$Impl.class -com/fasterxml/jackson/databind/cfg/ContextAttributes.class -com/fasterxml/jackson/databind/cfg/DeserializerFactoryConfig.class -com/fasterxml/jackson/databind/cfg/HandlerInstantiator.class -com/fasterxml/jackson/databind/cfg/MapperConfig.class -com/fasterxml/jackson/databind/cfg/MapperConfigBase.class -com/fasterxml/jackson/databind/cfg/MutableConfigOverride.class -com/fasterxml/jackson/databind/cfg/PackageVersion.class -com/fasterxml/jackson/databind/cfg/SerializerFactoryConfig.class -com/fasterxml/jackson/databind/deser/ -com/fasterxml/jackson/databind/deser/AbstractDeserializer.class -com/fasterxml/jackson/databind/deser/BasicDeserializerFactory$1.class -com/fasterxml/jackson/databind/deser/BasicDeserializerFactory.class -com/fasterxml/jackson/databind/deser/BeanDeserializer$1.class -com/fasterxml/jackson/databind/deser/BeanDeserializer$BeanReferring.class -com/fasterxml/jackson/databind/deser/BeanDeserializer.class -com/fasterxml/jackson/databind/deser/BeanDeserializerBase.class -com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.class -com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.class -com/fasterxml/jackson/databind/deser/BeanDeserializerModifier.class -com/fasterxml/jackson/databind/deser/BuilderBasedDeserializer.class -com/fasterxml/jackson/databind/deser/ContextualDeserializer.class -com/fasterxml/jackson/databind/deser/ContextualKeyDeserializer.class -com/fasterxml/jackson/databind/deser/CreatorProperty.class -com/fasterxml/jackson/databind/deser/DataFormatReaders$AccessorForReader.class -com/fasterxml/jackson/databind/deser/DataFormatReaders$Match.class -com/fasterxml/jackson/databind/deser/DataFormatReaders.class -com/fasterxml/jackson/databind/deser/DefaultDeserializationContext$Impl.class -com/fasterxml/jackson/databind/deser/DefaultDeserializationContext.class -com/fasterxml/jackson/databind/deser/DeserializationProblemHandler.class -com/fasterxml/jackson/databind/deser/DeserializerCache.class -com/fasterxml/jackson/databind/deser/DeserializerFactory.class -com/fasterxml/jackson/databind/deser/Deserializers$Base.class -com/fasterxml/jackson/databind/deser/Deserializers.class -com/fasterxml/jackson/databind/deser/KeyDeserializers.class -com/fasterxml/jackson/databind/deser/NullValueProvider.class -com/fasterxml/jackson/databind/deser/ResolvableDeserializer.class -com/fasterxml/jackson/databind/deser/SettableAnyProperty$AnySetterReferring.class -com/fasterxml/jackson/databind/deser/SettableAnyProperty.class -com/fasterxml/jackson/databind/deser/SettableBeanProperty$Delegating.class -com/fasterxml/jackson/databind/deser/SettableBeanProperty.class -com/fasterxml/jackson/databind/deser/UnresolvedForwardReference.class -com/fasterxml/jackson/databind/deser/UnresolvedId.class -com/fasterxml/jackson/databind/deser/ValueInstantiator$Base.class -com/fasterxml/jackson/databind/deser/ValueInstantiator$Gettable.class -com/fasterxml/jackson/databind/deser/ValueInstantiator.class -com/fasterxml/jackson/databind/deser/ValueInstantiators$Base.class -com/fasterxml/jackson/databind/deser/ValueInstantiators.class -com/fasterxml/jackson/databind/deser/impl/ -com/fasterxml/jackson/databind/deser/impl/BeanAsArrayBuilderDeserializer.class -com/fasterxml/jackson/databind/deser/impl/BeanAsArrayDeserializer.class -com/fasterxml/jackson/databind/deser/impl/BeanPropertyMap.class -com/fasterxml/jackson/databind/deser/impl/CreatorCandidate$Param.class -com/fasterxml/jackson/databind/deser/impl/CreatorCandidate.class -com/fasterxml/jackson/databind/deser/impl/CreatorCollector$StdTypeConstructor.class -com/fasterxml/jackson/databind/deser/impl/CreatorCollector.class -com/fasterxml/jackson/databind/deser/impl/ErrorThrowingDeserializer.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$Builder.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$ExtTypedProperty.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler.class -com/fasterxml/jackson/databind/deser/impl/FailingDeserializer.class -com/fasterxml/jackson/databind/deser/impl/FieldProperty.class -com/fasterxml/jackson/databind/deser/impl/InnerClassProperty.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$1.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$JavaUtilCollectionsConverter.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers.class -com/fasterxml/jackson/databind/deser/impl/ManagedReferenceProperty.class -com/fasterxml/jackson/databind/deser/impl/MergingSettableBeanProperty.class -com/fasterxml/jackson/databind/deser/impl/MethodProperty.class -com/fasterxml/jackson/databind/deser/impl/NullsAsEmptyProvider.class -com/fasterxml/jackson/databind/deser/impl/NullsConstantProvider.class -com/fasterxml/jackson/databind/deser/impl/NullsFailProvider.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReader.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty$PropertyReferring.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator$CaseInsensitiveMap.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedObjectIdGenerator.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Any.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Map.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Regular.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue.class -com/fasterxml/jackson/databind/deser/impl/PropertyValueBuffer.class -com/fasterxml/jackson/databind/deser/impl/ReadableObjectId$Referring.class -com/fasterxml/jackson/databind/deser/impl/ReadableObjectId.class -com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.class -com/fasterxml/jackson/databind/deser/impl/TypeWrappedDeserializer.class -com/fasterxml/jackson/databind/deser/impl/UnwrappedPropertyHandler.class -com/fasterxml/jackson/databind/deser/impl/ValueInjector.class -com/fasterxml/jackson/databind/deser/std/ -com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.class -com/fasterxml/jackson/databind/deser/std/AtomicBooleanDeserializer.class -com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.class -com/fasterxml/jackson/databind/deser/std/BaseNodeDeserializer.class -com/fasterxml/jackson/databind/deser/std/ByteBufferDeserializer.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferring.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferringAccumulator.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer.class -com/fasterxml/jackson/databind/deser/std/ContainerDeserializerBase.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$CalendarDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateBasedDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$SqlDateDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$TimestampDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers.class -com/fasterxml/jackson/databind/deser/std/DelegatingDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumMapDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumSetDeserializer.class -com/fasterxml/jackson/databind/deser/std/FactoryBasedEnumDeserializer.class -com/fasterxml/jackson/databind/deser/std/FromStringDeserializer$Std.class -com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.class -com/fasterxml/jackson/databind/deser/std/JdkDeserializers.class -com/fasterxml/jackson/databind/deser/std/JsonLocationInstantiator.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ObjectDeserializer.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferring.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferringAccumulator.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer.class -com/fasterxml/jackson/databind/deser/std/MapEntryDeserializer.class -com/fasterxml/jackson/databind/deser/std/NullifyingDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$1.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigDecimalDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigIntegerDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BooleanDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ByteDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$CharacterDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$DoubleDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$FloatDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$IntegerDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$LongDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$NumberDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$PrimitiveOrWrapperDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ShortDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers.class -com/fasterxml/jackson/databind/deser/std/ObjectArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$BooleanDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ByteDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$CharDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$DoubleDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$FloatDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$IntDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$LongDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ShortDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers.class -com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.class -com/fasterxml/jackson/databind/deser/std/StackTraceElementDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdDelegatingDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$DelegatingKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$EnumKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringCtorKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringFactoryKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializers.class -com/fasterxml/jackson/databind/deser/std/StdNodeBasedDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdScalarDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdValueInstantiator.class -com/fasterxml/jackson/databind/deser/std/StringArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/StringCollectionDeserializer.class -com/fasterxml/jackson/databind/deser/std/StringDeserializer.class -com/fasterxml/jackson/databind/deser/std/ThrowableDeserializer.class -com/fasterxml/jackson/databind/deser/std/TokenBufferDeserializer.class -com/fasterxml/jackson/databind/deser/std/UUIDDeserializer.class -com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer$Vanilla.class -com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.class -com/fasterxml/jackson/databind/exc/ -com/fasterxml/jackson/databind/exc/IgnoredPropertyException.class -com/fasterxml/jackson/databind/exc/InvalidDefinitionException.class -com/fasterxml/jackson/databind/exc/InvalidFormatException.class -com/fasterxml/jackson/databind/exc/InvalidNullException.class -com/fasterxml/jackson/databind/exc/InvalidTypeIdException.class -com/fasterxml/jackson/databind/exc/MismatchedInputException.class -com/fasterxml/jackson/databind/exc/PropertyBindingException.class -com/fasterxml/jackson/databind/exc/UnrecognizedPropertyException.class -com/fasterxml/jackson/databind/ext/ -com/fasterxml/jackson/databind/ext/CoreXMLDeserializers$Std.class -com/fasterxml/jackson/databind/ext/CoreXMLDeserializers.class -com/fasterxml/jackson/databind/ext/CoreXMLSerializers$XMLGregorianCalendarSerializer.class -com/fasterxml/jackson/databind/ext/CoreXMLSerializers.class -com/fasterxml/jackson/databind/ext/DOMDeserializer$DocumentDeserializer.class -com/fasterxml/jackson/databind/ext/DOMDeserializer$NodeDeserializer.class -com/fasterxml/jackson/databind/ext/DOMDeserializer.class -com/fasterxml/jackson/databind/ext/DOMSerializer.class -com/fasterxml/jackson/databind/ext/Java7Support.class -com/fasterxml/jackson/databind/ext/Java7SupportImpl.class -com/fasterxml/jackson/databind/ext/NioPathDeserializer.class -com/fasterxml/jackson/databind/ext/NioPathSerializer.class -com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.class -com/fasterxml/jackson/databind/introspect/ -com/fasterxml/jackson/databind/introspect/Annotated.class -com/fasterxml/jackson/databind/introspect/AnnotatedClass$Creators.class -com/fasterxml/jackson/databind/introspect/AnnotatedClass.class -com/fasterxml/jackson/databind/introspect/AnnotatedClassResolver.class -com/fasterxml/jackson/databind/introspect/AnnotatedConstructor$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedConstructor.class -com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedField$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedField.class -com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector$FieldBuilder.class -com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedMember.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethod$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethod.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector$MethodBuilder.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodMap.class -com/fasterxml/jackson/databind/introspect/AnnotatedParameter.class -com/fasterxml/jackson/databind/introspect/AnnotatedWithParams.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$EmptyCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$NCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$NoAnnotations.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneAnnotation.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$TwoAnnotations.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.class -com/fasterxml/jackson/databind/introspect/AnnotationMap.class -com/fasterxml/jackson/databind/introspect/BasicBeanDescription.class -com/fasterxml/jackson/databind/introspect/BasicClassIntrospector.class -com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.class -com/fasterxml/jackson/databind/introspect/ClassIntrospector$MixInResolver.class -com/fasterxml/jackson/databind/introspect/ClassIntrospector.class -com/fasterxml/jackson/databind/introspect/CollectorBase.class -com/fasterxml/jackson/databind/introspect/ConcreteBeanPropertyBase.class -com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector$1.class -com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.class -com/fasterxml/jackson/databind/introspect/MemberKey.class -com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector$1.class -com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector.class -com/fasterxml/jackson/databind/introspect/ObjectIdInfo.class -com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$1.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$10.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$2.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$3.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$4.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$5.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$6.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$7.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$8.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$9.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$Linked.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$MemberIterator.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$WithMember.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.class -com/fasterxml/jackson/databind/introspect/SimpleMixInResolver.class -com/fasterxml/jackson/databind/introspect/TypeResolutionContext$Basic.class -com/fasterxml/jackson/databind/introspect/TypeResolutionContext.class -com/fasterxml/jackson/databind/introspect/VirtualAnnotatedMember.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker$1.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker$Std.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker.class -com/fasterxml/jackson/databind/introspect/WithMember.class -com/fasterxml/jackson/databind/jsonFormatVisitors/ -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatTypes.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitable.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWithSerializerProvider.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormat.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor.class -com/fasterxml/jackson/databind/jsonschema/ -com/fasterxml/jackson/databind/jsonschema/JsonSchema.class -com/fasterxml/jackson/databind/jsonschema/JsonSerializableSchema.class -com/fasterxml/jackson/databind/jsonschema/SchemaAware.class -com/fasterxml/jackson/databind/jsontype/ -com/fasterxml/jackson/databind/jsontype/NamedType.class -com/fasterxml/jackson/databind/jsontype/SubtypeResolver.class -com/fasterxml/jackson/databind/jsontype/TypeDeserializer$1.class -com/fasterxml/jackson/databind/jsontype/TypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/TypeIdResolver.class -com/fasterxml/jackson/databind/jsontype/TypeResolverBuilder.class -com/fasterxml/jackson/databind/jsontype/TypeSerializer$1.class -com/fasterxml/jackson/databind/jsontype/TypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/ -com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExistingPropertyTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/ClassNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/MinimalClassNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/StdSubtypeResolver.class -com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder$1.class -com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder.class -com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.class -com/fasterxml/jackson/databind/jsontype/impl/TypeDeserializerBase.class -com/fasterxml/jackson/databind/jsontype/impl/TypeIdResolverBase.class -com/fasterxml/jackson/databind/jsontype/impl/TypeNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/TypeSerializerBase.class -com/fasterxml/jackson/databind/module/ -com/fasterxml/jackson/databind/module/SimpleAbstractTypeResolver.class -com/fasterxml/jackson/databind/module/SimpleDeserializers.class -com/fasterxml/jackson/databind/module/SimpleKeyDeserializers.class -com/fasterxml/jackson/databind/module/SimpleModule.class -com/fasterxml/jackson/databind/module/SimpleSerializers.class -com/fasterxml/jackson/databind/module/SimpleValueInstantiators.class -com/fasterxml/jackson/databind/node/ -com/fasterxml/jackson/databind/node/ArrayNode.class -com/fasterxml/jackson/databind/node/BaseJsonNode.class -com/fasterxml/jackson/databind/node/BigIntegerNode.class -com/fasterxml/jackson/databind/node/BinaryNode.class -com/fasterxml/jackson/databind/node/BooleanNode.class -com/fasterxml/jackson/databind/node/ContainerNode.class -com/fasterxml/jackson/databind/node/DecimalNode.class -com/fasterxml/jackson/databind/node/DoubleNode.class -com/fasterxml/jackson/databind/node/FloatNode.class -com/fasterxml/jackson/databind/node/IntNode.class -com/fasterxml/jackson/databind/node/JsonNodeCreator.class -com/fasterxml/jackson/databind/node/JsonNodeFactory.class -com/fasterxml/jackson/databind/node/JsonNodeType.class -com/fasterxml/jackson/databind/node/LongNode.class -com/fasterxml/jackson/databind/node/MissingNode.class -com/fasterxml/jackson/databind/node/NodeCursor$ArrayCursor.class -com/fasterxml/jackson/databind/node/NodeCursor$ObjectCursor.class -com/fasterxml/jackson/databind/node/NodeCursor$RootCursor.class -com/fasterxml/jackson/databind/node/NodeCursor.class -com/fasterxml/jackson/databind/node/NullNode.class -com/fasterxml/jackson/databind/node/NumericNode.class -com/fasterxml/jackson/databind/node/ObjectNode.class -com/fasterxml/jackson/databind/node/POJONode.class -com/fasterxml/jackson/databind/node/ShortNode.class -com/fasterxml/jackson/databind/node/TextNode.class -com/fasterxml/jackson/databind/node/TreeTraversingParser$1.class -com/fasterxml/jackson/databind/node/TreeTraversingParser.class -com/fasterxml/jackson/databind/node/ValueNode.class -com/fasterxml/jackson/databind/ser/ -com/fasterxml/jackson/databind/ser/AnyGetterWriter.class -com/fasterxml/jackson/databind/ser/BasicSerializerFactory$1.class -com/fasterxml/jackson/databind/ser/BasicSerializerFactory.class -com/fasterxml/jackson/databind/ser/BeanPropertyFilter.class -com/fasterxml/jackson/databind/ser/BeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/BeanSerializer.class -com/fasterxml/jackson/databind/ser/BeanSerializerBuilder.class -com/fasterxml/jackson/databind/ser/BeanSerializerFactory.class -com/fasterxml/jackson/databind/ser/BeanSerializerModifier.class -com/fasterxml/jackson/databind/ser/ContainerSerializer.class -com/fasterxml/jackson/databind/ser/ContextualSerializer.class -com/fasterxml/jackson/databind/ser/DefaultSerializerProvider$Impl.class -com/fasterxml/jackson/databind/ser/DefaultSerializerProvider.class -com/fasterxml/jackson/databind/ser/FilterProvider.class -com/fasterxml/jackson/databind/ser/PropertyBuilder$1.class -com/fasterxml/jackson/databind/ser/PropertyBuilder.class -com/fasterxml/jackson/databind/ser/PropertyFilter.class -com/fasterxml/jackson/databind/ser/PropertyWriter.class -com/fasterxml/jackson/databind/ser/ResolvableSerializer.class -com/fasterxml/jackson/databind/ser/SerializerCache.class -com/fasterxml/jackson/databind/ser/SerializerFactory.class -com/fasterxml/jackson/databind/ser/Serializers$Base.class -com/fasterxml/jackson/databind/ser/Serializers.class -com/fasterxml/jackson/databind/ser/VirtualBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/ -com/fasterxml/jackson/databind/ser/impl/AttributePropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.class -com/fasterxml/jackson/databind/ser/impl/FailingSerializer.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$MultiView.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$SingleView.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/IndexedListSerializer.class -com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.class -com/fasterxml/jackson/databind/ser/impl/IteratorSerializer.class -com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer$1.class -com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.class -com/fasterxml/jackson/databind/ser/impl/ObjectIdWriter.class -com/fasterxml/jackson/databind/ser/impl/PropertyBasedObjectIdGenerator.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Double.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Multi.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$SerializerAndMapResult.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$TypeAndSerializer.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap.class -com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap$Bucket.class -com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$1.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$FilterExceptFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$SerializeExceptFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleFilterProvider.class -com/fasterxml/jackson/databind/ser/impl/StringArraySerializer.class -com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.class -com/fasterxml/jackson/databind/ser/impl/TypeWrappedSerializer.class -com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter$1.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.class -com/fasterxml/jackson/databind/ser/impl/WritableObjectId.class -com/fasterxml/jackson/databind/ser/std/ -com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.class -com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.class -com/fasterxml/jackson/databind/ser/std/AtomicReferenceSerializer.class -com/fasterxml/jackson/databind/ser/std/BeanSerializerBase$1.class -com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.class -com/fasterxml/jackson/databind/ser/std/BooleanSerializer$AsNumber.class -com/fasterxml/jackson/databind/ser/std/BooleanSerializer.class -com/fasterxml/jackson/databind/ser/std/ByteArraySerializer.class -com/fasterxml/jackson/databind/ser/std/ByteBufferSerializer.class -com/fasterxml/jackson/databind/ser/std/CalendarSerializer.class -com/fasterxml/jackson/databind/ser/std/ClassSerializer.class -com/fasterxml/jackson/databind/ser/std/CollectionSerializer.class -com/fasterxml/jackson/databind/ser/std/DateSerializer.class -com/fasterxml/jackson/databind/ser/std/DateTimeSerializerBase.class -com/fasterxml/jackson/databind/ser/std/EnumSerializer.class -com/fasterxml/jackson/databind/ser/std/EnumSetSerializer.class -com/fasterxml/jackson/databind/ser/std/FileSerializer.class -com/fasterxml/jackson/databind/ser/std/InetAddressSerializer.class -com/fasterxml/jackson/databind/ser/std/InetSocketAddressSerializer.class -com/fasterxml/jackson/databind/ser/std/IterableSerializer.class -com/fasterxml/jackson/databind/ser/std/JsonValueSerializer$TypeSerializerRerouter.class -com/fasterxml/jackson/databind/ser/std/JsonValueSerializer.class -com/fasterxml/jackson/databind/ser/std/MapProperty.class -com/fasterxml/jackson/databind/ser/std/MapSerializer$1.class -com/fasterxml/jackson/databind/ser/std/MapSerializer.class -com/fasterxml/jackson/databind/ser/std/NonTypedScalarSerializerBase.class -com/fasterxml/jackson/databind/ser/std/NullSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializer$1.class -com/fasterxml/jackson/databind/ser/std/NumberSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$1.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$Base.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$DoubleSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$FloatSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntLikeSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntegerSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$LongSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$ShortSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers.class -com/fasterxml/jackson/databind/ser/std/ObjectArraySerializer.class -com/fasterxml/jackson/databind/ser/std/RawSerializer.class -com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer$1.class -com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer.class -com/fasterxml/jackson/databind/ser/std/SerializableSerializer.class -com/fasterxml/jackson/databind/ser/std/SqlDateSerializer.class -com/fasterxml/jackson/databind/ser/std/SqlTimeSerializer.class -com/fasterxml/jackson/databind/ser/std/StaticListSerializerBase.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$BooleanArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$CharArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$DoubleArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$FloatArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$IntArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$LongArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$ShortArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$TypedPrimitiveArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers.class -com/fasterxml/jackson/databind/ser/std/StdDelegatingSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicBooleanSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicIntegerSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicLongSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Default.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Dynamic.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$EnumKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$StringKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers.class -com/fasterxml/jackson/databind/ser/std/StdScalarSerializer.class -com/fasterxml/jackson/databind/ser/std/StdSerializer.class -com/fasterxml/jackson/databind/ser/std/StringSerializer.class -com/fasterxml/jackson/databind/ser/std/TimeZoneSerializer.class -com/fasterxml/jackson/databind/ser/std/ToStringSerializer.class -com/fasterxml/jackson/databind/ser/std/TokenBufferSerializer.class -com/fasterxml/jackson/databind/ser/std/UUIDSerializer.class -com/fasterxml/jackson/databind/type/ -com/fasterxml/jackson/databind/type/ArrayType.class -com/fasterxml/jackson/databind/type/ClassKey.class -com/fasterxml/jackson/databind/type/ClassStack.class -com/fasterxml/jackson/databind/type/CollectionLikeType.class -com/fasterxml/jackson/databind/type/CollectionType.class -com/fasterxml/jackson/databind/type/MapLikeType.class -com/fasterxml/jackson/databind/type/MapType.class -com/fasterxml/jackson/databind/type/PlaceholderForType.class -com/fasterxml/jackson/databind/type/ReferenceType.class -com/fasterxml/jackson/databind/type/ResolvedRecursiveType.class -com/fasterxml/jackson/databind/type/SimpleType.class -com/fasterxml/jackson/databind/type/TypeBase.class -com/fasterxml/jackson/databind/type/TypeBindings$AsKey.class -com/fasterxml/jackson/databind/type/TypeBindings$TypeParamStash.class -com/fasterxml/jackson/databind/type/TypeBindings.class -com/fasterxml/jackson/databind/type/TypeFactory.class -com/fasterxml/jackson/databind/type/TypeModifier.class -com/fasterxml/jackson/databind/type/TypeParser$MyTokenizer.class -com/fasterxml/jackson/databind/type/TypeParser.class -com/fasterxml/jackson/databind/util/ -com/fasterxml/jackson/databind/util/AccessPattern.class -com/fasterxml/jackson/databind/util/Annotations.class -com/fasterxml/jackson/databind/util/ArrayBuilders$1.class -com/fasterxml/jackson/databind/util/ArrayBuilders$BooleanBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$ByteBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$DoubleBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$FloatBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$IntBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$LongBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$ShortBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders.class -com/fasterxml/jackson/databind/util/ArrayIterator.class -com/fasterxml/jackson/databind/util/BeanUtil.class -com/fasterxml/jackson/databind/util/ByteBufferBackedInputStream.class -com/fasterxml/jackson/databind/util/ByteBufferBackedOutputStream.class -com/fasterxml/jackson/databind/util/ClassUtil$Ctor.class -com/fasterxml/jackson/databind/util/ClassUtil$EnumTypeLocator.class -com/fasterxml/jackson/databind/util/ClassUtil.class -com/fasterxml/jackson/databind/util/CompactStringObjectMap.class -com/fasterxml/jackson/databind/util/ConstantValueInstantiator.class -com/fasterxml/jackson/databind/util/Converter$None.class -com/fasterxml/jackson/databind/util/Converter.class -com/fasterxml/jackson/databind/util/EnumResolver.class -com/fasterxml/jackson/databind/util/EnumValues.class -com/fasterxml/jackson/databind/util/ISO8601DateFormat.class -com/fasterxml/jackson/databind/util/ISO8601Utils.class -com/fasterxml/jackson/databind/util/JSONPObject.class -com/fasterxml/jackson/databind/util/JSONWrappedObject.class -com/fasterxml/jackson/databind/util/LRUMap.class -com/fasterxml/jackson/databind/util/LinkedNode.class -com/fasterxml/jackson/databind/util/NameTransformer$1.class -com/fasterxml/jackson/databind/util/NameTransformer$2.class -com/fasterxml/jackson/databind/util/NameTransformer$3.class -com/fasterxml/jackson/databind/util/NameTransformer$Chained.class -com/fasterxml/jackson/databind/util/NameTransformer$NopTransformer.class -com/fasterxml/jackson/databind/util/NameTransformer.class -com/fasterxml/jackson/databind/util/Named.class -com/fasterxml/jackson/databind/util/ObjectBuffer.class -com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder$Node.class -com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder.class -com/fasterxml/jackson/databind/util/RawValue.class -com/fasterxml/jackson/databind/util/RootNameLookup.class -com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.class -com/fasterxml/jackson/databind/util/StdConverter.class -com/fasterxml/jackson/databind/util/StdDateFormat.class -com/fasterxml/jackson/databind/util/TokenBuffer$1.class -com/fasterxml/jackson/databind/util/TokenBuffer$Parser.class -com/fasterxml/jackson/databind/util/TokenBuffer$Segment.class -com/fasterxml/jackson/databind/util/TokenBuffer.class -com/fasterxml/jackson/databind/util/TokenBufferReadContext.class -com/fasterxml/jackson/databind/util/TypeKey.class -com/fasterxml/jackson/databind/util/ViewMatcher$Multi.class -com/fasterxml/jackson/databind/util/ViewMatcher$Single.class -com/fasterxml/jackson/databind/util/ViewMatcher.class diff --git a/examples/temp2.txt b/examples/temp2.txt deleted file mode 100644 index 83556ad8..00000000 --- a/examples/temp2.txt +++ /dev/null @@ -1,1917 +0,0 @@ -META-INF/ -META-INF/MANIFEST.MF -LICENSE.md -com/ -com/sendgrid/ -com/sendgrid/SendGridAPI.class -com/sendgrid/SendGrid$1.class -com/sendgrid/APICallback.class -com/sendgrid/SendGrid$2.class -com/sendgrid/SendGrid.class -com/sendgrid/SpamCheckSetting.class -com/sendgrid/Attachments$Builder.class -com/sendgrid/OpenTrackingSetting.class -com/sendgrid/Setting.class -com/sendgrid/GoogleAnalyticsSetting.class -com/sendgrid/ASM.class -com/sendgrid/FooterSetting.class -com/sendgrid/Personalization.class -com/sendgrid/Email.class -com/sendgrid/MailSettings.class -com/sendgrid/BccSettings.class -com/sendgrid/Content.class -com/sendgrid/TrackingSettings.class -com/sendgrid/ClickTrackingSetting.class -com/sendgrid/Attachments.class -com/sendgrid/ContentVerifier.class -com/sendgrid/SubscriptionTrackingSetting.class -com/sendgrid/Mail.class -com/sendgrid/RateLimitException.class -META-INF/maven/ -META-INF/maven/com.sendgrid/ -META-INF/maven/com.sendgrid/sendgrid-java/ -META-INF/maven/com.sendgrid/sendgrid-java/pom.xml -META-INF/maven/com.sendgrid/sendgrid-java/pom.properties -com/sendgrid/Client$1.class -com/sendgrid/Client.class -com/sendgrid/HttpDeleteWithBody.class -com/sendgrid/Method.class -com/sendgrid/Request.class -com/sendgrid/Response.class -com/sendgrid/SendGridResponseHandler.class -org/ -org/apache/ -org/apache/http/ -org/apache/http/message/ -org/apache/http/message/BasicHeaderElementIterator.class -org/apache/http/message/LineParser.class -org/apache/http/message/BasicHttpEntityEnclosingRequest.class -org/apache/http/message/HeaderValueFormatter.class -org/apache/http/message/BasicLineFormatter.class -org/apache/http/message/BasicLineParser.class -org/apache/http/message/HeaderGroup.class -org/apache/http/message/BasicNameValuePair.class -org/apache/http/message/BufferedHeader.class -org/apache/http/message/BasicListHeaderIterator.class -org/apache/http/message/BasicHeader.class -org/apache/http/message/LineFormatter.class -org/apache/http/message/BasicHttpResponse.class -org/apache/http/message/BasicTokenIterator.class -org/apache/http/message/BasicRequestLine.class -org/apache/http/message/ParserCursor.class -org/apache/http/message/BasicHeaderValueParser.class -org/apache/http/message/BasicHeaderValueFormatter.class -org/apache/http/message/BasicHttpRequest.class -org/apache/http/message/HeaderValueParser.class -org/apache/http/message/AbstractHttpMessage.class -org/apache/http/message/TokenParser.class -org/apache/http/message/BasicHeaderIterator.class -org/apache/http/message/BasicHeaderElement.class -org/apache/http/message/BasicStatusLine.class -org/apache/http/concurrent/ -org/apache/http/concurrent/BasicFuture.class -org/apache/http/concurrent/Cancellable.class -org/apache/http/concurrent/FutureCallback.class -org/apache/http/HeaderElement.class -org/apache/http/TruncatedChunkException.class -org/apache/http/ExceptionLogger$1.class -org/apache/http/version.properties -org/apache/http/HeaderElementIterator.class -org/apache/http/ProtocolVersion.class -org/apache/http/ExceptionLogger.class -org/apache/http/HttpRequestFactory.class -org/apache/http/HttpConnection.class -org/apache/http/HttpRequestInterceptor.class -org/apache/http/ContentTooLongException.class -org/apache/http/UnsupportedHttpVersionException.class -org/apache/http/HttpResponseInterceptor.class -org/apache/http/HttpInetConnection.class -org/apache/http/HttpEntity.class -org/apache/http/HttpException.class -org/apache/http/annotation/ -org/apache/http/annotation/Obsolete.class -org/apache/http/annotation/Experimental.class -org/apache/http/annotation/NotThreadSafe.class -org/apache/http/annotation/Immutable.class -org/apache/http/annotation/ThreadSafe.class -org/apache/http/annotation/GuardedBy.class -org/apache/http/Consts.class -org/apache/http/HttpConnectionMetrics.class -org/apache/http/HttpMessage.class -org/apache/http/MethodNotSupportedException.class -org/apache/http/ParseException.class -org/apache/http/params/ -org/apache/http/params/CoreProtocolPNames.class -org/apache/http/params/SyncBasicHttpParams.class -org/apache/http/params/DefaultedHttpParams.class -org/apache/http/params/HttpParams.class -org/apache/http/params/AbstractHttpParams.class -org/apache/http/params/HttpAbstractParamBean.class -org/apache/http/params/HttpConnectionParams.class -org/apache/http/params/BasicHttpParams.class -org/apache/http/params/HttpConnectionParamBean.class -org/apache/http/params/CoreConnectionPNames.class -org/apache/http/params/HttpParamConfig.class -org/apache/http/params/HttpProtocolParamBean.class -org/apache/http/params/HttpProtocolParams.class -org/apache/http/params/HttpParamsNames.class -org/apache/http/ReasonPhraseCatalog.class -org/apache/http/MalformedChunkCodingException.class -org/apache/http/FormattedHeader.class -org/apache/http/HttpResponse.class -org/apache/http/HeaderIterator.class -org/apache/http/HttpHeaders.class -org/apache/http/HttpClientConnection.class -org/apache/http/HttpHost.class -org/apache/http/protocol/ -org/apache/http/protocol/ResponseDate.class -org/apache/http/protocol/ChainBuilder.class -org/apache/http/protocol/HttpDateGenerator.class -org/apache/http/protocol/HttpRequestHandlerMapper.class -org/apache/http/protocol/HTTP.class -org/apache/http/protocol/SyncBasicHttpContext.class -org/apache/http/protocol/HttpService$HttpRequestHandlerResolverAdapter.class -org/apache/http/protocol/ImmutableHttpProcessor.class -org/apache/http/protocol/BasicHttpContext.class -org/apache/http/protocol/HttpProcessorBuilder.class -org/apache/http/protocol/RequestTargetHost.class -org/apache/http/protocol/ResponseConnControl.class -org/apache/http/protocol/HttpRequestInterceptorList.class -org/apache/http/protocol/HttpRequestExecutor.class -org/apache/http/protocol/RequestUserAgent.class -org/apache/http/protocol/HttpRequestHandlerResolver.class -org/apache/http/protocol/BasicHttpProcessor.class -org/apache/http/protocol/ResponseServer.class -org/apache/http/protocol/ResponseContent.class -org/apache/http/protocol/RequestDate.class -org/apache/http/protocol/HttpService.class -org/apache/http/protocol/HttpContext.class -org/apache/http/protocol/RequestConnControl.class -org/apache/http/protocol/UriHttpRequestHandlerMapper.class -org/apache/http/protocol/UriPatternMatcher.class -org/apache/http/protocol/HttpCoreContext.class -org/apache/http/protocol/HttpProcessor.class -org/apache/http/protocol/RequestExpectContinue.class -org/apache/http/protocol/HttpExpectationVerifier.class -org/apache/http/protocol/HttpRequestHandlerRegistry.class -org/apache/http/protocol/HttpResponseInterceptorList.class -org/apache/http/protocol/HttpRequestHandler.class -org/apache/http/protocol/ExecutionContext.class -org/apache/http/protocol/RequestContent.class -org/apache/http/protocol/DefaultedHttpContext.class -org/apache/http/HttpStatus.class -org/apache/http/TokenIterator.class -org/apache/http/ssl/ -org/apache/http/ssl/SSLContextBuilder$TrustManagerDelegate.class -org/apache/http/ssl/TrustStrategy.class -org/apache/http/ssl/PrivateKeyStrategy.class -org/apache/http/ssl/SSLContextBuilder$KeyManagerDelegate.class -org/apache/http/ssl/SSLContexts.class -org/apache/http/ssl/SSLContextBuilder.class -org/apache/http/ssl/SSLInitializationException.class -org/apache/http/ssl/PrivateKeyDetails.class -org/apache/http/ConnectionReuseStrategy.class -org/apache/http/pool/ -org/apache/http/pool/AbstractConnPool$4.class -org/apache/http/pool/AbstractConnPool$2.class -org/apache/http/pool/PoolEntry.class -org/apache/http/pool/ConnFactory.class -org/apache/http/pool/RouteSpecificPool.class -org/apache/http/pool/AbstractConnPool$3.class -org/apache/http/pool/PoolEntryCallback.class -org/apache/http/pool/AbstractConnPool.class -org/apache/http/pool/ConnPoolControl.class -org/apache/http/pool/PoolStats.class -org/apache/http/pool/AbstractConnPool$1.class -org/apache/http/pool/ConnPool.class -org/apache/http/pool/PoolEntryFuture.class -org/apache/http/config/ -org/apache/http/config/MessageConstraints$Builder.class -org/apache/http/config/ConnectionConfig.class -org/apache/http/config/SocketConfig.class -org/apache/http/config/Registry.class -org/apache/http/config/ConnectionConfig$Builder.class -org/apache/http/config/RegistryBuilder.class -org/apache/http/config/SocketConfig$Builder.class -org/apache/http/config/MessageConstraints.class -org/apache/http/config/Lookup.class -org/apache/http/HttpResponseFactory.class -org/apache/http/HttpRequest.class -org/apache/http/RequestLine.class -org/apache/http/HttpServerConnection.class -org/apache/http/NameValuePair.class -org/apache/http/util/ -org/apache/http/util/LangUtils.class -org/apache/http/util/NetUtils.class -org/apache/http/util/EntityUtils.class -org/apache/http/util/EncodingUtils.class -org/apache/http/util/TextUtils.class -org/apache/http/util/CharsetUtils.class -org/apache/http/util/CharArrayBuffer.class -org/apache/http/util/ByteArrayBuffer.class -org/apache/http/util/Asserts.class -org/apache/http/util/ExceptionUtils.class -org/apache/http/util/Args.class -org/apache/http/util/VersionInfo.class -org/apache/http/HttpVersion.class -org/apache/http/HttpConnectionFactory.class -org/apache/http/impl/ -org/apache/http/impl/DefaultHttpRequestFactory.class -org/apache/http/impl/SocketHttpClientConnection.class -org/apache/http/impl/bootstrap/ -org/apache/http/impl/bootstrap/SSLServerSetupHandler.class -org/apache/http/impl/bootstrap/HttpServer$Status.class -org/apache/http/impl/bootstrap/ThreadFactoryImpl.class -org/apache/http/impl/bootstrap/Worker.class -org/apache/http/impl/bootstrap/RequestListener.class -org/apache/http/impl/bootstrap/ServerBootstrap.class -org/apache/http/impl/bootstrap/HttpServer.class -org/apache/http/impl/SocketHttpServerConnection.class -org/apache/http/impl/BHttpConnectionBase.class -org/apache/http/impl/DefaultConnectionReuseStrategy.class -org/apache/http/impl/DefaultHttpServerConnection.class -org/apache/http/impl/AbstractHttpClientConnection.class -org/apache/http/impl/EnglishReasonPhraseCatalog.class -org/apache/http/impl/DefaultBHttpServerConnection.class -org/apache/http/impl/DefaultHttpClientConnection.class -org/apache/http/impl/pool/ -org/apache/http/impl/pool/BasicConnPool.class -org/apache/http/impl/pool/BasicConnFactory.class -org/apache/http/impl/pool/BasicPoolEntry.class -org/apache/http/impl/DefaultBHttpClientConnectionFactory.class -org/apache/http/impl/DefaultBHttpClientConnection.class -org/apache/http/impl/AbstractHttpServerConnection.class -org/apache/http/impl/io/ -org/apache/http/impl/io/HttpResponseWriter.class -org/apache/http/impl/io/HttpTransportMetricsImpl.class -org/apache/http/impl/io/AbstractSessionInputBuffer.class -org/apache/http/impl/io/DefaultHttpRequestWriter.class -org/apache/http/impl/io/SessionInputBufferImpl.class -org/apache/http/impl/io/ContentLengthOutputStream.class -org/apache/http/impl/io/SocketInputBuffer.class -org/apache/http/impl/io/DefaultHttpResponseWriterFactory.class -org/apache/http/impl/io/DefaultHttpRequestWriterFactory.class -org/apache/http/impl/io/IdentityOutputStream.class -org/apache/http/impl/io/IdentityInputStream.class -org/apache/http/impl/io/SocketOutputBuffer.class -org/apache/http/impl/io/ChunkedOutputStream.class -org/apache/http/impl/io/DefaultHttpResponseParserFactory.class -org/apache/http/impl/io/ContentLengthInputStream.class -org/apache/http/impl/io/HttpRequestWriter.class -org/apache/http/impl/io/DefaultHttpResponseWriter.class -org/apache/http/impl/io/DefaultHttpRequestParserFactory.class -org/apache/http/impl/io/AbstractMessageParser.class -org/apache/http/impl/io/EmptyInputStream.class -org/apache/http/impl/io/DefaultHttpRequestParser.class -org/apache/http/impl/io/SessionOutputBufferImpl.class -org/apache/http/impl/io/HttpRequestParser.class -org/apache/http/impl/io/AbstractSessionOutputBuffer.class -org/apache/http/impl/io/DefaultHttpResponseParser.class -org/apache/http/impl/io/ChunkedInputStream.class -org/apache/http/impl/io/AbstractMessageWriter.class -org/apache/http/impl/io/HttpResponseParser.class -org/apache/http/impl/entity/ -org/apache/http/impl/entity/DisallowIdentityContentLengthStrategy.class -org/apache/http/impl/entity/LaxContentLengthStrategy.class -org/apache/http/impl/entity/StrictContentLengthStrategy.class -org/apache/http/impl/entity/EntityDeserializer.class -org/apache/http/impl/entity/EntitySerializer.class -org/apache/http/impl/DefaultHttpResponseFactory.class -org/apache/http/impl/DefaultBHttpServerConnectionFactory.class -org/apache/http/impl/HttpConnectionMetricsImpl.class -org/apache/http/impl/ConnSupport.class -org/apache/http/impl/NoConnectionReuseStrategy.class -org/apache/http/ConnectionClosedException.class -org/apache/http/StatusLine.class -org/apache/http/io/ -org/apache/http/io/HttpMessageWriterFactory.class -org/apache/http/io/BufferInfo.class -org/apache/http/io/HttpMessageParserFactory.class -org/apache/http/io/HttpTransportMetrics.class -org/apache/http/io/SessionOutputBuffer.class -org/apache/http/io/HttpMessageParser.class -org/apache/http/io/EofSensor.class -org/apache/http/io/HttpMessageWriter.class -org/apache/http/io/SessionInputBuffer.class -org/apache/http/NoHttpResponseException.class -org/apache/http/HttpEntityEnclosingRequest.class -org/apache/http/entity/ -org/apache/http/entity/ContentLengthStrategy.class -org/apache/http/entity/FileEntity.class -org/apache/http/entity/InputStreamEntity.class -org/apache/http/entity/SerializableEntity.class -org/apache/http/entity/StringEntity.class -org/apache/http/entity/HttpEntityWrapper.class -org/apache/http/entity/ContentProducer.class -org/apache/http/entity/BufferedHttpEntity.class -org/apache/http/entity/ByteArrayEntity.class -org/apache/http/entity/EntityTemplate.class -org/apache/http/entity/BasicHttpEntity.class -org/apache/http/entity/ContentType.class -org/apache/http/entity/AbstractHttpEntity.class -org/apache/http/ProtocolException.class -org/apache/http/MessageConstraintException.class -org/apache/http/ExceptionLogger$2.class -org/apache/http/Header.class -META-INF/DEPENDENCIES -META-INF/NOTICE -META-INF/LICENSE -META-INF/maven/org.apache.httpcomponents/ -META-INF/maven/org.apache.httpcomponents/httpcore/ -META-INF/maven/org.apache.httpcomponents/httpcore/pom.xml -META-INF/maven/org.apache.httpcomponents/httpcore/pom.properties -org/apache/http/auth/ -org/apache/http/auth/KerberosCredentials.class -org/apache/http/auth/AuthSchemeRegistry.class -org/apache/http/auth/ChallengeState.class -org/apache/http/auth/NTUserPrincipal.class -org/apache/http/auth/InvalidCredentialsException.class -org/apache/http/auth/AuthSchemeRegistry$1.class -org/apache/http/auth/NTCredentials.class -org/apache/http/auth/AuthScheme.class -org/apache/http/auth/AuthenticationException.class -org/apache/http/auth/params/ -org/apache/http/auth/params/AuthParams.class -org/apache/http/auth/params/AuthParamBean.class -org/apache/http/auth/params/AuthPNames.class -org/apache/http/auth/BasicUserPrincipal.class -org/apache/http/auth/AuthSchemeProvider.class -org/apache/http/auth/ContextAwareAuthScheme.class -org/apache/http/auth/AuthProtocolState.class -org/apache/http/auth/AuthScope.class -org/apache/http/auth/AuthSchemeFactory.class -org/apache/http/auth/AUTH.class -org/apache/http/auth/Credentials.class -org/apache/http/auth/UsernamePasswordCredentials.class -org/apache/http/auth/AuthOption.class -org/apache/http/auth/MalformedChallengeException.class -org/apache/http/auth/AuthState.class -org/apache/http/cookie/ -org/apache/http/cookie/CookieSpecRegistry.class -org/apache/http/cookie/CookieSpec.class -org/apache/http/cookie/CookieRestrictionViolationException.class -org/apache/http/cookie/CookieIdentityComparator.class -org/apache/http/cookie/SM.class -org/apache/http/cookie/CookieOrigin.class -org/apache/http/cookie/CookieAttributeHandler.class -org/apache/http/cookie/SetCookie2.class -org/apache/http/cookie/params/ -org/apache/http/cookie/params/CookieSpecParamBean.class -org/apache/http/cookie/params/CookieSpecPNames.class -org/apache/http/cookie/MalformedCookieException.class -org/apache/http/cookie/ClientCookie.class -org/apache/http/cookie/CommonCookieAttributeHandler.class -org/apache/http/cookie/CookieSpecRegistry$1.class -org/apache/http/cookie/CookiePathComparator.class -org/apache/http/cookie/SetCookie.class -org/apache/http/cookie/Cookie.class -org/apache/http/cookie/CookieSpecProvider.class -org/apache/http/cookie/CookiePriorityComparator.class -org/apache/http/cookie/CookieSpecFactory.class -org/apache/http/client/ -org/apache/http/client/RedirectStrategy.class -org/apache/http/client/ConnectionBackoffStrategy.class -org/apache/http/client/version.properties -org/apache/http/client/AuthenticationStrategy.class -org/apache/http/client/HttpClient.class -org/apache/http/client/methods/ -org/apache/http/client/methods/HttpOptions.class -org/apache/http/client/methods/AbortableHttpRequest.class -org/apache/http/client/methods/HttpRequestBase.class -org/apache/http/client/methods/AbstractExecutionAwareRequest$2.class -org/apache/http/client/methods/RequestBuilder.class -org/apache/http/client/methods/HttpGet.class -org/apache/http/client/methods/HttpPatch.class -org/apache/http/client/methods/HttpDelete.class -org/apache/http/client/methods/HttpUriRequest.class -org/apache/http/client/methods/CloseableHttpResponse.class -org/apache/http/client/methods/HttpRequestWrapper$1.class -org/apache/http/client/methods/RequestBuilder$InternalEntityEclosingRequest.class -org/apache/http/client/methods/HttpRequestWrapper$HttpEntityEnclosingRequestWrapper.class -org/apache/http/client/methods/RequestBuilder$InternalRequest.class -org/apache/http/client/methods/HttpRequestWrapper.class -org/apache/http/client/methods/HttpHead.class -org/apache/http/client/methods/HttpExecutionAware.class -org/apache/http/client/methods/AbstractExecutionAwareRequest.class -org/apache/http/client/methods/Configurable.class -org/apache/http/client/methods/AbstractExecutionAwareRequest$1.class -org/apache/http/client/methods/HttpPost.class -org/apache/http/client/methods/HttpEntityEnclosingRequestBase.class -org/apache/http/client/methods/HttpTrace.class -org/apache/http/client/methods/HttpPut.class -org/apache/http/client/CredentialsProvider.class -org/apache/http/client/UserTokenHandler.class -org/apache/http/client/CookieStore.class -org/apache/http/client/HttpResponseException.class -org/apache/http/client/ClientProtocolException.class -org/apache/http/client/AuthenticationHandler.class -org/apache/http/client/params/ -org/apache/http/client/params/HttpClientParams.class -org/apache/http/client/params/ClientPNames.class -org/apache/http/client/params/ClientParamBean.class -org/apache/http/client/params/CookiePolicy.class -org/apache/http/client/params/AuthPolicy.class -org/apache/http/client/params/HttpClientParamConfig.class -org/apache/http/client/params/AllClientPNames.class -org/apache/http/client/CircularRedirectException.class -org/apache/http/client/utils/ -org/apache/http/client/utils/Punycode.class -org/apache/http/client/utils/Idn.class -org/apache/http/client/utils/HttpClientUtils.class -org/apache/http/client/utils/URIBuilder.class -org/apache/http/client/utils/URIUtils.class -org/apache/http/client/utils/DateUtils$DateFormatHolder.class -org/apache/http/client/utils/URLEncodedUtils.class -org/apache/http/client/utils/JdkIdn.class -org/apache/http/client/utils/CloneUtils.class -org/apache/http/client/utils/DateUtils.class -org/apache/http/client/utils/Rfc3492Idn.class -org/apache/http/client/protocol/ -org/apache/http/client/protocol/RequestAcceptEncoding.class -org/apache/http/client/protocol/ResponseProcessCookies.class -org/apache/http/client/protocol/RequestDefaultHeaders.class -org/apache/http/client/protocol/ResponseContentEncoding$2.class -org/apache/http/client/protocol/ClientContext.class -org/apache/http/client/protocol/ResponseAuthCache.class -org/apache/http/client/protocol/RequestAuthenticationBase$1.class -org/apache/http/client/protocol/RequestTargetAuthentication.class -org/apache/http/client/protocol/RequestProxyAuthentication.class -org/apache/http/client/protocol/RequestClientConnControl.class -org/apache/http/client/protocol/ResponseAuthCache$1.class -org/apache/http/client/protocol/RequestAddCookies.class -org/apache/http/client/protocol/RequestAuthCache.class -org/apache/http/client/protocol/ClientContextConfigurer.class -org/apache/http/client/protocol/ResponseContentEncoding$1.class -org/apache/http/client/protocol/RequestExpectContinue.class -org/apache/http/client/protocol/ResponseContentEncoding.class -org/apache/http/client/protocol/RequestAuthenticationBase.class -org/apache/http/client/protocol/HttpClientContext.class -org/apache/http/client/BackoffManager.class -org/apache/http/client/config/ -org/apache/http/client/config/RequestConfig$Builder.class -org/apache/http/client/config/RequestConfig.class -org/apache/http/client/config/CookieSpecs.class -org/apache/http/client/config/AuthSchemes.class -org/apache/http/client/AuthCache.class -org/apache/http/client/ResponseHandler.class -org/apache/http/client/RedirectException.class -org/apache/http/client/RedirectHandler.class -org/apache/http/client/NonRepeatableRequestException.class -org/apache/http/client/entity/ -org/apache/http/client/entity/DeflateInputStream.class -org/apache/http/client/entity/InputStreamFactory.class -org/apache/http/client/entity/UrlEncodedFormEntity.class -org/apache/http/client/entity/DeflateInputStream$DeflateStream.class -org/apache/http/client/entity/GzipCompressingEntity.class -org/apache/http/client/entity/EntityBuilder.class -org/apache/http/client/entity/LazyDecompressingInputStream.class -org/apache/http/client/entity/DecompressingEntity.class -org/apache/http/client/entity/GzipDecompressingEntity$1.class -org/apache/http/client/entity/DeflateDecompressingEntity$1.class -org/apache/http/client/entity/GzipDecompressingEntity.class -org/apache/http/client/entity/DeflateDecompressingEntity.class -org/apache/http/client/HttpRequestRetryHandler.class -org/apache/http/client/RequestDirector.class -org/apache/http/client/ServiceUnavailableRetryStrategy.class -org/apache/http/conn/ -org/apache/http/conn/OperatedClientConnection.class -org/apache/http/conn/ManagedClientConnection.class -org/apache/http/conn/ConnectionRequest.class -org/apache/http/conn/EofSensorInputStream.class -org/apache/http/conn/ClientConnectionOperator.class -org/apache/http/conn/HttpClientConnectionOperator.class -org/apache/http/conn/BasicManagedEntity.class -org/apache/http/conn/ConnectionKeepAliveStrategy.class -org/apache/http/conn/ManagedHttpClientConnection.class -org/apache/http/conn/BasicEofSensorWatcher.class -org/apache/http/conn/HttpClientConnectionManager.class -org/apache/http/conn/HttpRoutedConnection.class -org/apache/http/conn/EofSensorWatcher.class -org/apache/http/conn/routing/ -org/apache/http/conn/routing/BasicRouteDirector.class -org/apache/http/conn/routing/RouteInfo$LayerType.class -org/apache/http/conn/routing/RouteInfo.class -org/apache/http/conn/routing/RouteTracker.class -org/apache/http/conn/routing/HttpRouteDirector.class -org/apache/http/conn/routing/HttpRoutePlanner.class -org/apache/http/conn/routing/RouteInfo$TunnelType.class -org/apache/http/conn/routing/HttpRoute.class -org/apache/http/conn/SchemePortResolver.class -org/apache/http/conn/ClientConnectionManager.class -org/apache/http/conn/params/ -org/apache/http/conn/params/ConnManagerParamBean.class -org/apache/http/conn/params/ConnRouteParamBean.class -org/apache/http/conn/params/ConnManagerParams$1.class -org/apache/http/conn/params/ConnManagerPNames.class -org/apache/http/conn/params/ConnConnectionParamBean.class -org/apache/http/conn/params/ConnManagerParams.class -org/apache/http/conn/params/ConnPerRouteBean.class -org/apache/http/conn/params/ConnConnectionPNames.class -org/apache/http/conn/params/ConnPerRoute.class -org/apache/http/conn/params/ConnRoutePNames.class -org/apache/http/conn/params/ConnRouteParams.class -org/apache/http/conn/socket/ -org/apache/http/conn/socket/PlainConnectionSocketFactory.class -org/apache/http/conn/socket/ConnectionSocketFactory.class -org/apache/http/conn/socket/LayeredConnectionSocketFactory.class -org/apache/http/conn/ClientConnectionRequest.class -org/apache/http/conn/ssl/ -org/apache/http/conn/ssl/TrustSelfSignedStrategy.class -org/apache/http/conn/ssl/SSLContextBuilder$TrustManagerDelegate.class -org/apache/http/conn/ssl/DefaultHostnameVerifier$1.class -org/apache/http/conn/ssl/DefaultHostnameVerifier$TYPE.class -org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.class -org/apache/http/conn/ssl/TrustStrategy.class -org/apache/http/conn/ssl/PrivateKeyStrategy.class -org/apache/http/conn/ssl/SSLContextBuilder$KeyManagerDelegate.class -org/apache/http/conn/ssl/X509HostnameVerifier.class -org/apache/http/conn/ssl/AbstractVerifier.class -org/apache/http/conn/ssl/SSLSocketFactory.class -org/apache/http/conn/ssl/SSLConnectionSocketFactory.class -org/apache/http/conn/ssl/SSLContexts.class -org/apache/http/conn/ssl/AllowAllHostnameVerifier.class -org/apache/http/conn/ssl/StrictHostnameVerifier.class -org/apache/http/conn/ssl/SSLContextBuilder.class -org/apache/http/conn/ssl/DefaultHostnameVerifier.class -org/apache/http/conn/ssl/SSLInitializationException.class -org/apache/http/conn/ssl/PrivateKeyDetails.class -org/apache/http/conn/ssl/NoopHostnameVerifier.class -org/apache/http/conn/ConnectionPoolTimeoutException.class -org/apache/http/conn/ConnectionReleaseTrigger.class -org/apache/http/conn/ClientConnectionManagerFactory.class -org/apache/http/conn/scheme/ -org/apache/http/conn/scheme/SchemeSocketFactoryAdaptor.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactory.class -org/apache/http/conn/scheme/PlainSocketFactory.class -org/apache/http/conn/scheme/LayeredSocketFactoryAdaptor.class -org/apache/http/conn/scheme/Scheme.class -org/apache/http/conn/scheme/HostNameResolver.class -org/apache/http/conn/scheme/SchemeRegistry.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor2.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor.class -org/apache/http/conn/scheme/SocketFactory.class -org/apache/http/conn/scheme/SchemeSocketFactory.class -org/apache/http/conn/scheme/SocketFactoryAdaptor.class -org/apache/http/conn/scheme/LayeredSchemeSocketFactory.class -org/apache/http/conn/scheme/LayeredSocketFactory.class -org/apache/http/conn/ConnectTimeoutException.class -org/apache/http/conn/util/ -org/apache/http/conn/util/DomainType.class -org/apache/http/conn/util/InetAddressUtils.class -org/apache/http/conn/util/PublicSuffixList.class -org/apache/http/conn/util/PublicSuffixMatcher.class -org/apache/http/conn/util/PublicSuffixListParser.class -org/apache/http/conn/util/PublicSuffixMatcherLoader.class -org/apache/http/conn/HttpInetSocketAddress.class -org/apache/http/conn/HttpConnectionFactory.class -org/apache/http/conn/HttpHostConnectException.class -org/apache/http/conn/DnsResolver.class -org/apache/http/conn/MultihomePlainSocketFactory.class -org/apache/http/conn/UnsupportedSchemeException.class -org/apache/http/impl/auth/ -org/apache/http/impl/auth/NTLMEngineImpl$CipherGen.class -org/apache/http/impl/auth/NTLMScheme$State.class -org/apache/http/impl/auth/GGSSchemeBase$1.class -org/apache/http/impl/auth/NTLMEngineException.class -org/apache/http/impl/auth/KerberosSchemeFactory.class -org/apache/http/impl/auth/RFC2617Scheme.class -org/apache/http/impl/auth/NTLMScheme.class -org/apache/http/impl/auth/KerberosScheme.class -org/apache/http/impl/auth/HttpEntityDigester.class -org/apache/http/impl/auth/SPNegoScheme.class -org/apache/http/impl/auth/BasicSchemeFactory.class -org/apache/http/impl/auth/NegotiateScheme.class -org/apache/http/impl/auth/NTLMSchemeFactory.class -org/apache/http/impl/auth/NTLMEngineImpl$NTLMMessage.class -org/apache/http/impl/auth/GGSSchemeBase.class -org/apache/http/impl/auth/HttpAuthenticator$1.class -org/apache/http/impl/auth/NTLMEngine.class -org/apache/http/impl/auth/DigestScheme.class -org/apache/http/impl/auth/NTLMEngineImpl.class -org/apache/http/impl/auth/AuthSchemeBase.class -org/apache/http/impl/auth/NTLMEngineImpl$Type3Message.class -org/apache/http/impl/auth/NegotiateSchemeFactory.class -org/apache/http/impl/auth/SpnegoTokenGenerator.class -org/apache/http/impl/auth/NTLMEngineImpl$HMACMD5.class -org/apache/http/impl/auth/HttpAuthenticator.class -org/apache/http/impl/auth/GGSSchemeBase$State.class -org/apache/http/impl/auth/NTLMEngineImpl$MD4.class -org/apache/http/impl/auth/NTLMEngineImpl$Type2Message.class -org/apache/http/impl/auth/DigestSchemeFactory.class -org/apache/http/impl/auth/SPNegoSchemeFactory.class -org/apache/http/impl/auth/NTLMEngineImpl$Type1Message.class -org/apache/http/impl/auth/BasicScheme.class -org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.class -org/apache/http/impl/cookie/ -org/apache/http/impl/cookie/BestMatchSpec.class -org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider$CompatibilityLevel.class -org/apache/http/impl/cookie/BasicClientCookie2.class -org/apache/http/impl/cookie/BasicSecureHandler.class -org/apache/http/impl/cookie/RFC2109Spec.class -org/apache/http/impl/cookie/RFC2965Spec.class -org/apache/http/impl/cookie/PublicSuffixFilter.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$2.class -org/apache/http/impl/cookie/BasicDomainHandler.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider.class -org/apache/http/impl/cookie/RFC2109VersionHandler.class -org/apache/http/impl/cookie/RFC2109DomainHandler.class -org/apache/http/impl/cookie/BasicMaxAgeHandler.class -org/apache/http/impl/cookie/NetscapeDraftSpec.class -org/apache/http/impl/cookie/LaxExpiresHandler.class -org/apache/http/impl/cookie/BasicExpiresHandler.class -org/apache/http/impl/cookie/BrowserCompatSpec.class -org/apache/http/impl/cookie/RFC2965SpecFactory.class -org/apache/http/impl/cookie/DefaultCookieSpec.class -org/apache/http/impl/cookie/BrowserCompatSpec$1.class -org/apache/http/impl/cookie/BrowserCompatVersionAttributeHandler.class -org/apache/http/impl/cookie/IgnoreSpec.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider.class -org/apache/http/impl/cookie/BestMatchSpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$CompatibilityLevel.class -org/apache/http/impl/cookie/RFC6265StrictSpec.class -org/apache/http/impl/cookie/RFC2965PortAttributeHandler.class -org/apache/http/impl/cookie/IgnoreSpecProvider.class -org/apache/http/impl/cookie/BasicClientCookie.class -org/apache/http/impl/cookie/NetscapeDraftHeaderParser.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider$1.class -org/apache/http/impl/cookie/BasicPathHandler.class -org/apache/http/impl/cookie/LaxMaxAgeHandler.class -org/apache/http/impl/cookie/RFC6265CookieSpecBase.class -org/apache/http/impl/cookie/RFC2965SpecProvider.class -org/apache/http/impl/cookie/NetscapeDomainHandler.class -org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.class -org/apache/http/impl/cookie/PublicSuffixDomainFilter.class -org/apache/http/impl/cookie/IgnoreSpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$1.class -org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.class -org/apache/http/impl/cookie/AbstractCookieAttributeHandler.class -org/apache/http/impl/cookie/BrowserCompatSpecFactory.class -org/apache/http/impl/cookie/RFC2109SpecProvider.class -org/apache/http/impl/cookie/BrowserCompatSpecFactory$SecurityLevel.class -org/apache/http/impl/cookie/NetscapeDraftSpecFactory.class -org/apache/http/impl/cookie/CookieSpecBase.class -org/apache/http/impl/cookie/RFC6265LaxSpec.class -org/apache/http/impl/cookie/DateParseException.class -org/apache/http/impl/cookie/RFC2109SpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpec.class -org/apache/http/impl/cookie/PublicSuffixListParser.class -org/apache/http/impl/cookie/AbstractCookieSpec.class -org/apache/http/impl/cookie/BasicCommentHandler.class -org/apache/http/impl/cookie/DateUtils.class -org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.class -org/apache/http/impl/cookie/NetscapeDraftSpecProvider.class -org/apache/http/impl/client/ -org/apache/http/impl/client/TargetAuthenticationStrategy.class -org/apache/http/impl/client/LaxRedirectStrategy.class -org/apache/http/impl/client/NoopUserTokenHandler.class -org/apache/http/impl/client/RoutedRequest.class -org/apache/http/impl/client/AuthenticationStrategyImpl.class -org/apache/http/impl/client/MinimalHttpClient$1.class -org/apache/http/impl/client/CloseableHttpResponseProxy.class -org/apache/http/impl/client/DefaultProxyAuthenticationHandler.class -org/apache/http/impl/client/DefaultRedirectStrategy.class -org/apache/http/impl/client/FutureRequestExecutionService.class -org/apache/http/impl/client/FutureRequestExecutionMetrics$DurationCounter.class -org/apache/http/impl/client/HttpClientBuilder.class -org/apache/http/impl/client/AutoRetryHttpClient.class -org/apache/http/impl/client/BasicCredentialsProvider.class -org/apache/http/impl/client/AbstractResponseHandler.class -org/apache/http/impl/client/IdleConnectionEvictor$DefaultThreadFactory.class -org/apache/http/impl/client/RequestWrapper.class -org/apache/http/impl/client/HttpRequestFutureTask.class -org/apache/http/impl/client/ProxyClient.class -org/apache/http/impl/client/ContentEncodingHttpClient.class -org/apache/http/impl/client/RedirectLocations.class -org/apache/http/impl/client/DefaultHttpRequestRetryHandler.class -org/apache/http/impl/client/HttpRequestTaskCallable.class -org/apache/http/impl/client/StandardHttpRequestRetryHandler.class -org/apache/http/impl/client/AIMDBackoffManager.class -org/apache/http/impl/client/AbstractAuthenticationHandler.class -org/apache/http/impl/client/DecompressingHttpClient.class -org/apache/http/impl/client/SystemClock.class -org/apache/http/impl/client/DefaultRedirectStrategyAdaptor.class -org/apache/http/impl/client/EntityEnclosingRequestWrapper$EntityWrapper.class -org/apache/http/impl/client/AbstractHttpClient.class -org/apache/http/impl/client/Clock.class -org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.class -org/apache/http/impl/client/InternalHttpClient$1.class -org/apache/http/impl/client/SystemDefaultHttpClient.class -org/apache/http/impl/client/AuthenticationStrategyAdaptor.class -org/apache/http/impl/client/IdleConnectionEvictor.class -org/apache/http/impl/client/SystemDefaultCredentialsProvider.class -org/apache/http/impl/client/FutureRequestExecutionMetrics.class -org/apache/http/impl/client/InternalHttpClient.class -org/apache/http/impl/client/HttpClientBuilder$2.class -org/apache/http/impl/client/NullBackoffStrategy.class -org/apache/http/impl/client/DefaultBackoffStrategy.class -org/apache/http/impl/client/HttpAuthenticator.class -org/apache/http/impl/client/BasicCookieStore.class -org/apache/http/impl/client/EntityEnclosingRequestWrapper.class -org/apache/http/impl/client/CookieSpecRegistries.class -org/apache/http/impl/client/DefaultClientConnectionReuseStrategy.class -org/apache/http/impl/client/DefaultServiceUnavailableRetryStrategy.class -org/apache/http/impl/client/DefaultRedirectHandler.class -org/apache/http/impl/client/HttpClients.class -org/apache/http/impl/client/CloseableHttpClient.class -org/apache/http/impl/client/TunnelRefusedException.class -org/apache/http/impl/client/MinimalHttpClient.class -org/apache/http/impl/client/BasicAuthCache.class -org/apache/http/impl/client/BasicResponseHandler.class -org/apache/http/impl/client/DefaultUserTokenHandler.class -org/apache/http/impl/client/HttpClientBuilder$1.class -org/apache/http/impl/client/ClientParamsStack.class -org/apache/http/impl/client/DefaultRequestDirector.class -org/apache/http/impl/client/DefaultTargetAuthenticationHandler.class -org/apache/http/impl/client/IdleConnectionEvictor$1.class -org/apache/http/impl/client/DefaultHttpClient.class -org/apache/http/impl/client/ProxyAuthenticationStrategy.class -org/apache/http/impl/execchain/ -org/apache/http/impl/execchain/ServiceUnavailableRetryExec.class -org/apache/http/impl/execchain/RequestEntityProxy.class -org/apache/http/impl/execchain/ProtocolExec.class -org/apache/http/impl/execchain/MinimalClientExec.class -org/apache/http/impl/execchain/MainClientExec.class -org/apache/http/impl/execchain/RedirectExec.class -org/apache/http/impl/execchain/ClientExecChain.class -org/apache/http/impl/execchain/ConnectionHolder.class -org/apache/http/impl/execchain/HttpResponseProxy.class -org/apache/http/impl/execchain/RetryExec.class -org/apache/http/impl/execchain/TunnelRefusedException.class -org/apache/http/impl/execchain/RequestAbortedException.class -org/apache/http/impl/execchain/ResponseEntityProxy.class -org/apache/http/impl/execchain/BackoffStrategyExec.class -org/apache/http/impl/conn/ -org/apache/http/impl/conn/HttpPoolEntry.class -org/apache/http/impl/conn/DefaultClientConnection.class -org/apache/http/impl/conn/CPool.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager.class -org/apache/http/impl/conn/Wire.class -org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.class -org/apache/http/impl/conn/IdleConnectionHandler.class -org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.class -org/apache/http/impl/conn/SystemDefaultRoutePlanner$1.class -org/apache/http/impl/conn/CPoolProxy.class -org/apache/http/impl/conn/DefaultHttpRoutePlanner.class -org/apache/http/impl/conn/PoolingClientConnectionManager.class -org/apache/http/impl/conn/DefaultManagedHttpClientConnection.class -org/apache/http/impl/conn/LoggingSessionInputBuffer.class -org/apache/http/impl/conn/ConnectionShutdownException.class -org/apache/http/impl/conn/LoggingOutputStream.class -org/apache/http/impl/conn/ManagedClientConnectionImpl.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$ConfigData.class -org/apache/http/impl/conn/DefaultResponseParser.class -org/apache/http/impl/conn/LoggingInputStream.class -org/apache/http/impl/conn/AbstractClientConnAdapter.class -org/apache/http/impl/conn/SystemDefaultRoutePlanner.class -org/apache/http/impl/conn/tsccm/ -org/apache/http/impl/conn/tsccm/ConnPoolByRoute.class -org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1.class -org/apache/http/impl/conn/tsccm/RouteSpecificPool.class -org/apache/http/impl/conn/tsccm/ConnPoolByRoute$1.class -org/apache/http/impl/conn/tsccm/PoolEntryRequest.class -org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.class -org/apache/http/impl/conn/tsccm/WaitingThread.class -org/apache/http/impl/conn/tsccm/WaitingThreadAborter.class -org/apache/http/impl/conn/tsccm/RouteSpecificPool$1.class -org/apache/http/impl/conn/tsccm/AbstractConnPool.class -org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.class -org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.class -org/apache/http/impl/conn/tsccm/BasicPoolEntry.class -org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$InternalConnectionFactory.class -org/apache/http/impl/conn/DefaultHttpResponseParserFactory.class -org/apache/http/impl/conn/AbstractPoolEntry.class -org/apache/http/impl/conn/ProxySelectorRoutePlanner$1.class -org/apache/http/impl/conn/AbstractPooledConnAdapter.class -org/apache/http/impl/conn/SingleClientConnManager$PoolEntry.class -org/apache/http/impl/conn/HttpConnPool$InternalConnFactory.class -org/apache/http/impl/conn/SchemeRegistryFactory.class -org/apache/http/impl/conn/DefaultClientConnectionOperator.class -org/apache/http/impl/conn/LoggingManagedHttpClientConnection.class -org/apache/http/impl/conn/LoggingSessionOutputBuffer.class -org/apache/http/impl/conn/BasicHttpClientConnectionManager$1.class -org/apache/http/impl/conn/DefaultProxyRoutePlanner.class -org/apache/http/impl/conn/BasicClientConnectionManager$1.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$1.class -org/apache/http/impl/conn/BasicHttpClientConnectionManager.class -org/apache/http/impl/conn/PoolingClientConnectionManager$1.class -org/apache/http/impl/conn/IdleConnectionHandler$TimeValues.class -org/apache/http/impl/conn/CPoolEntry.class -org/apache/http/impl/conn/DefaultSchemePortResolver.class -org/apache/http/impl/conn/SingleClientConnManager.class -org/apache/http/impl/conn/DefaultRoutePlanner.class -org/apache/http/impl/conn/InMemoryDnsResolver.class -org/apache/http/impl/conn/DefaultHttpResponseParser.class -org/apache/http/impl/conn/HttpConnPool.class -org/apache/http/impl/conn/BasicClientConnectionManager.class -org/apache/http/impl/conn/SingleClientConnManager$1.class -org/apache/http/impl/conn/ProxySelectorRoutePlanner.class -org/apache/http/impl/conn/SystemDefaultDnsResolver.class -mozilla/ -mozilla/public-suffix-list.txt -META-INF/maven/org.apache.httpcomponents/httpclient/ -META-INF/maven/org.apache.httpcomponents/httpclient/pom.xml -META-INF/maven/org.apache.httpcomponents/httpclient/pom.properties -META-INF/NOTICE.txt -META-INF/LICENSE.txt -org/apache/commons/ -org/apache/commons/logging/ -org/apache/commons/logging/impl/ -org/apache/commons/logging/impl/AvalonLogger.class -org/apache/commons/logging/impl/SimpleLog.class -org/apache/commons/logging/impl/Log4JLogger.class -org/apache/commons/logging/impl/WeakHashtable.class -org/apache/commons/logging/impl/WeakHashtable$1.class -org/apache/commons/logging/impl/Jdk14Logger.class -org/apache/commons/logging/impl/ServletContextCleaner.class -org/apache/commons/logging/impl/WeakHashtable$WeakKey.class -org/apache/commons/logging/impl/NoOpLog.class -org/apache/commons/logging/impl/LogKitLogger.class -org/apache/commons/logging/impl/LogFactoryImpl$3.class -org/apache/commons/logging/impl/LogFactoryImpl$1.class -org/apache/commons/logging/impl/WeakHashtable$Referenced.class -org/apache/commons/logging/impl/SimpleLog$1.class -org/apache/commons/logging/impl/Jdk13LumberjackLogger.class -org/apache/commons/logging/impl/LogFactoryImpl.class -org/apache/commons/logging/impl/LogFactoryImpl$2.class -org/apache/commons/logging/impl/WeakHashtable$Entry.class -org/apache/commons/logging/LogSource.class -org/apache/commons/logging/LogFactory$4.class -org/apache/commons/logging/LogFactory$3.class -org/apache/commons/logging/LogFactory$6.class -org/apache/commons/logging/LogConfigurationException.class -org/apache/commons/logging/LogFactory.class -org/apache/commons/logging/LogFactory$5.class -org/apache/commons/logging/LogFactory$1.class -org/apache/commons/logging/LogFactory$2.class -org/apache/commons/logging/Log.class -META-INF/maven/commons-logging/ -META-INF/maven/commons-logging/commons-logging/ -META-INF/maven/commons-logging/commons-logging/pom.xml -META-INF/maven/commons-logging/commons-logging/pom.properties -org/apache/commons/codec/ -org/apache/commons/codec/binary/ -org/apache/commons/codec/binary/Base32.class -org/apache/commons/codec/binary/Base32InputStream.class -org/apache/commons/codec/binary/Base32OutputStream.class -org/apache/commons/codec/binary/Base64.class -org/apache/commons/codec/binary/Base64InputStream.class -org/apache/commons/codec/binary/Base64OutputStream.class -org/apache/commons/codec/binary/BaseNCodec$Context.class -org/apache/commons/codec/binary/BaseNCodec.class -org/apache/commons/codec/binary/BaseNCodecInputStream.class -org/apache/commons/codec/binary/BaseNCodecOutputStream.class -org/apache/commons/codec/binary/BinaryCodec.class -org/apache/commons/codec/binary/Hex.class -org/apache/commons/codec/binary/StringUtils.class -org/apache/commons/codec/BinaryDecoder.class -org/apache/commons/codec/BinaryEncoder.class -org/apache/commons/codec/CharEncoding.class -org/apache/commons/codec/Charsets.class -org/apache/commons/codec/Decoder.class -org/apache/commons/codec/DecoderException.class -org/apache/commons/codec/digest/ -org/apache/commons/codec/digest/B64.class -org/apache/commons/codec/digest/Crypt.class -org/apache/commons/codec/digest/DigestUtils.class -org/apache/commons/codec/digest/Md5Crypt.class -org/apache/commons/codec/digest/MessageDigestAlgorithms.class -org/apache/commons/codec/digest/Sha2Crypt.class -org/apache/commons/codec/digest/UnixCrypt.class -org/apache/commons/codec/Encoder.class -org/apache/commons/codec/EncoderException.class -org/apache/commons/codec/language/ -org/apache/commons/codec/language/AbstractCaverphone.class -org/apache/commons/codec/language/bm/ -org/apache/commons/codec/language/bm/ash_approx_any.txt -org/apache/commons/codec/language/bm/ash_approx_common.txt -org/apache/commons/codec/language/bm/ash_approx_cyrillic.txt -org/apache/commons/codec/language/bm/ash_approx_english.txt -org/apache/commons/codec/language/bm/ash_approx_french.txt -org/apache/commons/codec/language/bm/ash_approx_german.txt -org/apache/commons/codec/language/bm/ash_approx_hebrew.txt -org/apache/commons/codec/language/bm/ash_approx_hungarian.txt -org/apache/commons/codec/language/bm/ash_approx_polish.txt -org/apache/commons/codec/language/bm/ash_approx_romanian.txt -org/apache/commons/codec/language/bm/ash_approx_russian.txt -org/apache/commons/codec/language/bm/ash_approx_spanish.txt -org/apache/commons/codec/language/bm/ash_exact_any.txt -org/apache/commons/codec/language/bm/ash_exact_approx_common.txt -org/apache/commons/codec/language/bm/ash_exact_common.txt -org/apache/commons/codec/language/bm/ash_exact_cyrillic.txt -org/apache/commons/codec/language/bm/ash_exact_english.txt -org/apache/commons/codec/language/bm/ash_exact_french.txt -org/apache/commons/codec/language/bm/ash_exact_german.txt -org/apache/commons/codec/language/bm/ash_exact_hebrew.txt -org/apache/commons/codec/language/bm/ash_exact_hungarian.txt -org/apache/commons/codec/language/bm/ash_exact_polish.txt -org/apache/commons/codec/language/bm/ash_exact_romanian.txt -org/apache/commons/codec/language/bm/ash_exact_russian.txt -org/apache/commons/codec/language/bm/ash_exact_spanish.txt -org/apache/commons/codec/language/bm/ash_hebrew_common.txt -org/apache/commons/codec/language/bm/ash_languages.txt -org/apache/commons/codec/language/bm/ash_rules_any.txt -org/apache/commons/codec/language/bm/ash_rules_cyrillic.txt -org/apache/commons/codec/language/bm/ash_rules_english.txt -org/apache/commons/codec/language/bm/ash_rules_french.txt -org/apache/commons/codec/language/bm/ash_rules_german.txt -org/apache/commons/codec/language/bm/ash_rules_hebrew.txt -org/apache/commons/codec/language/bm/ash_rules_hungarian.txt -org/apache/commons/codec/language/bm/ash_rules_polish.txt -org/apache/commons/codec/language/bm/ash_rules_romanian.txt -org/apache/commons/codec/language/bm/ash_rules_russian.txt -org/apache/commons/codec/language/bm/ash_rules_spanish.txt -org/apache/commons/codec/language/bm/BeiderMorseEncoder.class -org/apache/commons/codec/language/bm/gen_approx_any.txt -org/apache/commons/codec/language/bm/gen_approx_arabic.txt -org/apache/commons/codec/language/bm/gen_approx_common.txt -org/apache/commons/codec/language/bm/gen_approx_cyrillic.txt -org/apache/commons/codec/language/bm/gen_approx_czech.txt -org/apache/commons/codec/language/bm/gen_approx_dutch.txt -org/apache/commons/codec/language/bm/gen_approx_english.txt -org/apache/commons/codec/language/bm/gen_approx_french.txt -org/apache/commons/codec/language/bm/gen_approx_german.txt -org/apache/commons/codec/language/bm/gen_approx_greek.txt -org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt -org/apache/commons/codec/language/bm/gen_approx_hebrew.txt -org/apache/commons/codec/language/bm/gen_approx_hungarian.txt -org/apache/commons/codec/language/bm/gen_approx_italian.txt -org/apache/commons/codec/language/bm/gen_approx_polish.txt -org/apache/commons/codec/language/bm/gen_approx_portuguese.txt -org/apache/commons/codec/language/bm/gen_approx_romanian.txt -org/apache/commons/codec/language/bm/gen_approx_russian.txt -org/apache/commons/codec/language/bm/gen_approx_spanish.txt -org/apache/commons/codec/language/bm/gen_approx_turkish.txt -org/apache/commons/codec/language/bm/gen_exact_any.txt -org/apache/commons/codec/language/bm/gen_exact_approx_common.txt -org/apache/commons/codec/language/bm/gen_exact_arabic.txt -org/apache/commons/codec/language/bm/gen_exact_common.txt -org/apache/commons/codec/language/bm/gen_exact_cyrillic.txt -org/apache/commons/codec/language/bm/gen_exact_czech.txt -org/apache/commons/codec/language/bm/gen_exact_dutch.txt -org/apache/commons/codec/language/bm/gen_exact_english.txt -org/apache/commons/codec/language/bm/gen_exact_french.txt -org/apache/commons/codec/language/bm/gen_exact_german.txt -org/apache/commons/codec/language/bm/gen_exact_greek.txt -org/apache/commons/codec/language/bm/gen_exact_greeklatin.txt -org/apache/commons/codec/language/bm/gen_exact_hebrew.txt -org/apache/commons/codec/language/bm/gen_exact_hungarian.txt -org/apache/commons/codec/language/bm/gen_exact_italian.txt -org/apache/commons/codec/language/bm/gen_exact_polish.txt -org/apache/commons/codec/language/bm/gen_exact_portuguese.txt -org/apache/commons/codec/language/bm/gen_exact_romanian.txt -org/apache/commons/codec/language/bm/gen_exact_russian.txt -org/apache/commons/codec/language/bm/gen_exact_spanish.txt -org/apache/commons/codec/language/bm/gen_exact_turkish.txt -org/apache/commons/codec/language/bm/gen_hebrew_common.txt -org/apache/commons/codec/language/bm/gen_languages.txt -org/apache/commons/codec/language/bm/gen_rules_any.txt -org/apache/commons/codec/language/bm/gen_rules_arabic.txt -org/apache/commons/codec/language/bm/gen_rules_cyrillic.txt -org/apache/commons/codec/language/bm/gen_rules_czech.txt -org/apache/commons/codec/language/bm/gen_rules_dutch.txt -org/apache/commons/codec/language/bm/gen_rules_english.txt -org/apache/commons/codec/language/bm/gen_rules_french.txt -org/apache/commons/codec/language/bm/gen_rules_german.txt -org/apache/commons/codec/language/bm/gen_rules_greek.txt -org/apache/commons/codec/language/bm/gen_rules_greeklatin.txt -org/apache/commons/codec/language/bm/gen_rules_hebrew.txt -org/apache/commons/codec/language/bm/gen_rules_hungarian.txt -org/apache/commons/codec/language/bm/gen_rules_italian.txt -org/apache/commons/codec/language/bm/gen_rules_polish.txt -org/apache/commons/codec/language/bm/gen_rules_portuguese.txt -org/apache/commons/codec/language/bm/gen_rules_romanian.txt -org/apache/commons/codec/language/bm/gen_rules_russian.txt -org/apache/commons/codec/language/bm/gen_rules_spanish.txt -org/apache/commons/codec/language/bm/gen_rules_turkish.txt -org/apache/commons/codec/language/bm/Lang$1.class -org/apache/commons/codec/language/bm/Lang$LangRule.class -org/apache/commons/codec/language/bm/Lang.class -org/apache/commons/codec/language/bm/lang.txt -org/apache/commons/codec/language/bm/Languages$1.class -org/apache/commons/codec/language/bm/Languages$2.class -org/apache/commons/codec/language/bm/Languages$LanguageSet.class -org/apache/commons/codec/language/bm/Languages$SomeLanguages.class -org/apache/commons/codec/language/bm/Languages.class -org/apache/commons/codec/language/bm/NameType.class -org/apache/commons/codec/language/bm/PhoneticEngine$1.class -org/apache/commons/codec/language/bm/PhoneticEngine$PhonemeBuilder.class -org/apache/commons/codec/language/bm/PhoneticEngine$RulesApplication.class -org/apache/commons/codec/language/bm/PhoneticEngine.class -org/apache/commons/codec/language/bm/ResourceConstants.class -org/apache/commons/codec/language/bm/Rule$1.class -org/apache/commons/codec/language/bm/Rule$10.class -org/apache/commons/codec/language/bm/Rule$2.class -org/apache/commons/codec/language/bm/Rule$3.class -org/apache/commons/codec/language/bm/Rule$4.class -org/apache/commons/codec/language/bm/Rule$5.class -org/apache/commons/codec/language/bm/Rule$6.class -org/apache/commons/codec/language/bm/Rule$7.class -org/apache/commons/codec/language/bm/Rule$8.class -org/apache/commons/codec/language/bm/Rule$9.class -org/apache/commons/codec/language/bm/Rule$Phoneme$1.class -org/apache/commons/codec/language/bm/Rule$Phoneme.class -org/apache/commons/codec/language/bm/Rule$PhonemeExpr.class -org/apache/commons/codec/language/bm/Rule$PhonemeList.class -org/apache/commons/codec/language/bm/Rule$RPattern.class -org/apache/commons/codec/language/bm/Rule.class -org/apache/commons/codec/language/bm/RuleType.class -org/apache/commons/codec/language/bm/sep_approx_any.txt -org/apache/commons/codec/language/bm/sep_approx_common.txt -org/apache/commons/codec/language/bm/sep_approx_french.txt -org/apache/commons/codec/language/bm/sep_approx_hebrew.txt -org/apache/commons/codec/language/bm/sep_approx_italian.txt -org/apache/commons/codec/language/bm/sep_approx_portuguese.txt -org/apache/commons/codec/language/bm/sep_approx_spanish.txt -org/apache/commons/codec/language/bm/sep_exact_any.txt -org/apache/commons/codec/language/bm/sep_exact_approx_common.txt -org/apache/commons/codec/language/bm/sep_exact_common.txt -org/apache/commons/codec/language/bm/sep_exact_french.txt -org/apache/commons/codec/language/bm/sep_exact_hebrew.txt -org/apache/commons/codec/language/bm/sep_exact_italian.txt -org/apache/commons/codec/language/bm/sep_exact_portuguese.txt -org/apache/commons/codec/language/bm/sep_exact_spanish.txt -org/apache/commons/codec/language/bm/sep_hebrew_common.txt -org/apache/commons/codec/language/bm/sep_languages.txt -org/apache/commons/codec/language/bm/sep_rules_any.txt -org/apache/commons/codec/language/bm/sep_rules_french.txt -org/apache/commons/codec/language/bm/sep_rules_hebrew.txt -org/apache/commons/codec/language/bm/sep_rules_italian.txt -org/apache/commons/codec/language/bm/sep_rules_portuguese.txt -org/apache/commons/codec/language/bm/sep_rules_spanish.txt -org/apache/commons/codec/language/Caverphone.class -org/apache/commons/codec/language/Caverphone1.class -org/apache/commons/codec/language/Caverphone2.class -org/apache/commons/codec/language/ColognePhonetic$CologneBuffer.class -org/apache/commons/codec/language/ColognePhonetic$CologneInputBuffer.class -org/apache/commons/codec/language/ColognePhonetic$CologneOutputBuffer.class -org/apache/commons/codec/language/ColognePhonetic.class -org/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult.class -org/apache/commons/codec/language/DoubleMetaphone.class -org/apache/commons/codec/language/MatchRatingApproachEncoder.class -org/apache/commons/codec/language/Metaphone.class -org/apache/commons/codec/language/Nysiis.class -org/apache/commons/codec/language/RefinedSoundex.class -org/apache/commons/codec/language/Soundex.class -org/apache/commons/codec/language/SoundexUtils.class -org/apache/commons/codec/net/ -org/apache/commons/codec/net/BCodec.class -org/apache/commons/codec/net/QCodec.class -org/apache/commons/codec/net/QuotedPrintableCodec.class -org/apache/commons/codec/net/RFC1522Codec.class -org/apache/commons/codec/net/URLCodec.class -org/apache/commons/codec/net/Utils.class -org/apache/commons/codec/StringDecoder.class -org/apache/commons/codec/StringEncoder.class -org/apache/commons/codec/StringEncoderComparator.class -META-INF/maven/commons-codec/ -META-INF/maven/commons-codec/commons-codec/ -META-INF/maven/commons-codec/commons-codec/pom.xml -META-INF/maven/commons-codec/commons-codec/pom.properties -META-INF/maven/com.fasterxml.jackson.core/ -META-INF/maven/com.fasterxml.jackson.core/jackson-core/ -META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml -META-INF/services/ -META-INF/services/com.fasterxml.jackson.core.JsonFactory -com/fasterxml/ -com/fasterxml/jackson/ -com/fasterxml/jackson/core/ -com/fasterxml/jackson/core/Base64Variant.class -com/fasterxml/jackson/core/Base64Variants.class -com/fasterxml/jackson/core/FormatFeature.class -com/fasterxml/jackson/core/FormatSchema.class -com/fasterxml/jackson/core/JsonEncoding.class -com/fasterxml/jackson/core/JsonFactory$Feature.class -com/fasterxml/jackson/core/JsonFactory.class -com/fasterxml/jackson/core/JsonGenerationException.class -com/fasterxml/jackson/core/JsonGenerator$1.class -com/fasterxml/jackson/core/JsonGenerator$Feature.class -com/fasterxml/jackson/core/JsonGenerator.class -com/fasterxml/jackson/core/JsonLocation.class -com/fasterxml/jackson/core/JsonParseException.class -com/fasterxml/jackson/core/JsonParser$Feature.class -com/fasterxml/jackson/core/JsonParser$NumberType.class -com/fasterxml/jackson/core/JsonParser.class -com/fasterxml/jackson/core/JsonPointer.class -com/fasterxml/jackson/core/JsonProcessingException.class -com/fasterxml/jackson/core/JsonStreamContext.class -com/fasterxml/jackson/core/JsonToken.class -com/fasterxml/jackson/core/JsonTokenId.class -com/fasterxml/jackson/core/JsonpCharacterEscapes.class -com/fasterxml/jackson/core/ObjectCodec.class -com/fasterxml/jackson/core/PrettyPrinter.class -com/fasterxml/jackson/core/SerializableString.class -com/fasterxml/jackson/core/TreeCodec.class -com/fasterxml/jackson/core/TreeNode.class -com/fasterxml/jackson/core/Version.class -com/fasterxml/jackson/core/Versioned.class -com/fasterxml/jackson/core/async/ -com/fasterxml/jackson/core/async/ByteArrayFeeder.class -com/fasterxml/jackson/core/async/ByteBufferFeeder.class -com/fasterxml/jackson/core/async/NonBlockingInputFeeder.class -com/fasterxml/jackson/core/base/ -com/fasterxml/jackson/core/base/GeneratorBase.class -com/fasterxml/jackson/core/base/ParserBase.class -com/fasterxml/jackson/core/base/ParserMinimalBase.class -com/fasterxml/jackson/core/filter/ -com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.class -com/fasterxml/jackson/core/filter/FilteringParserDelegate.class -com/fasterxml/jackson/core/filter/JsonPointerBasedFilter.class -com/fasterxml/jackson/core/filter/TokenFilter.class -com/fasterxml/jackson/core/filter/TokenFilterContext.class -com/fasterxml/jackson/core/format/ -com/fasterxml/jackson/core/format/DataFormatDetector.class -com/fasterxml/jackson/core/format/DataFormatMatcher.class -com/fasterxml/jackson/core/format/InputAccessor$Std.class -com/fasterxml/jackson/core/format/InputAccessor.class -com/fasterxml/jackson/core/format/MatchStrength.class -com/fasterxml/jackson/core/io/ -com/fasterxml/jackson/core/io/CharTypes.class -com/fasterxml/jackson/core/io/CharacterEscapes.class -com/fasterxml/jackson/core/io/DataOutputAsStream.class -com/fasterxml/jackson/core/io/IOContext.class -com/fasterxml/jackson/core/io/InputDecorator.class -com/fasterxml/jackson/core/io/JsonEOFException.class -com/fasterxml/jackson/core/io/JsonStringEncoder.class -com/fasterxml/jackson/core/io/MergedStream.class -com/fasterxml/jackson/core/io/NumberInput.class -com/fasterxml/jackson/core/io/NumberOutput.class -com/fasterxml/jackson/core/io/OutputDecorator.class -com/fasterxml/jackson/core/io/SegmentedStringWriter.class -com/fasterxml/jackson/core/io/SerializedString.class -com/fasterxml/jackson/core/io/UTF32Reader.class -com/fasterxml/jackson/core/io/UTF8Writer.class -com/fasterxml/jackson/core/json/ -com/fasterxml/jackson/core/json/ByteSourceJsonBootstrapper.class -com/fasterxml/jackson/core/json/DupDetector.class -com/fasterxml/jackson/core/json/JsonGeneratorImpl.class -com/fasterxml/jackson/core/json/JsonReadContext.class -com/fasterxml/jackson/core/json/JsonWriteContext.class -com/fasterxml/jackson/core/json/PackageVersion.class -com/fasterxml/jackson/core/json/ReaderBasedJsonParser.class -com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.class -com/fasterxml/jackson/core/json/UTF8JsonGenerator.class -com/fasterxml/jackson/core/json/UTF8StreamJsonParser.class -com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.class -com/fasterxml/jackson/core/json/async/ -com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.class -com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.class -com/fasterxml/jackson/core/sym/ -com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer$TableInfo.class -com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$Bucket.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$TableInfo.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer.class -com/fasterxml/jackson/core/sym/Name.class -com/fasterxml/jackson/core/sym/Name1.class -com/fasterxml/jackson/core/sym/Name2.class -com/fasterxml/jackson/core/sym/Name3.class -com/fasterxml/jackson/core/sym/NameN.class -com/fasterxml/jackson/core/type/ -com/fasterxml/jackson/core/type/ResolvedType.class -com/fasterxml/jackson/core/type/TypeReference.class -com/fasterxml/jackson/core/type/WritableTypeId$Inclusion.class -com/fasterxml/jackson/core/type/WritableTypeId.class -com/fasterxml/jackson/core/util/ -com/fasterxml/jackson/core/util/BufferRecycler.class -com/fasterxml/jackson/core/util/BufferRecyclers.class -com/fasterxml/jackson/core/util/ByteArrayBuilder.class -com/fasterxml/jackson/core/util/DefaultIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$FixedSpaceIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$Indenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$NopIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter.class -com/fasterxml/jackson/core/util/Instantiatable.class -com/fasterxml/jackson/core/util/InternCache.class -com/fasterxml/jackson/core/util/JsonGeneratorDelegate.class -com/fasterxml/jackson/core/util/JsonParserDelegate.class -com/fasterxml/jackson/core/util/JsonParserSequence.class -com/fasterxml/jackson/core/util/MinimalPrettyPrinter.class -com/fasterxml/jackson/core/util/RequestPayload.class -com/fasterxml/jackson/core/util/Separators.class -com/fasterxml/jackson/core/util/TextBuffer.class -com/fasterxml/jackson/core/util/ThreadLocalBufferManager$ThreadLocalBufferManagerHolder.class -com/fasterxml/jackson/core/util/ThreadLocalBufferManager.class -com/fasterxml/jackson/core/util/VersionUtil.class -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/ -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml -com/fasterxml/jackson/annotation/ -com/fasterxml/jackson/annotation/JacksonAnnotation.class -com/fasterxml/jackson/annotation/JacksonAnnotationValue.class -com/fasterxml/jackson/annotation/JacksonAnnotationsInside.class -com/fasterxml/jackson/annotation/JacksonInject$Value.class -com/fasterxml/jackson/annotation/JacksonInject.class -com/fasterxml/jackson/annotation/JsonAlias.class -com/fasterxml/jackson/annotation/JsonAnyGetter.class -com/fasterxml/jackson/annotation/JsonAnySetter.class -com/fasterxml/jackson/annotation/JsonAutoDetect$1.class -com/fasterxml/jackson/annotation/JsonAutoDetect$Value.class -com/fasterxml/jackson/annotation/JsonAutoDetect$Visibility.class -com/fasterxml/jackson/annotation/JsonAutoDetect.class -com/fasterxml/jackson/annotation/JsonBackReference.class -com/fasterxml/jackson/annotation/JsonClassDescription.class -com/fasterxml/jackson/annotation/JsonCreator$Mode.class -com/fasterxml/jackson/annotation/JsonCreator.class -com/fasterxml/jackson/annotation/JsonEnumDefaultValue.class -com/fasterxml/jackson/annotation/JsonFilter.class -com/fasterxml/jackson/annotation/JsonFormat$Feature.class -com/fasterxml/jackson/annotation/JsonFormat$Features.class -com/fasterxml/jackson/annotation/JsonFormat$Shape.class -com/fasterxml/jackson/annotation/JsonFormat$Value.class -com/fasterxml/jackson/annotation/JsonFormat.class -com/fasterxml/jackson/annotation/JsonGetter.class -com/fasterxml/jackson/annotation/JsonIdentityInfo.class -com/fasterxml/jackson/annotation/JsonIdentityReference.class -com/fasterxml/jackson/annotation/JsonIgnore.class -com/fasterxml/jackson/annotation/JsonIgnoreProperties$Value.class -com/fasterxml/jackson/annotation/JsonIgnoreProperties.class -com/fasterxml/jackson/annotation/JsonIgnoreType.class -com/fasterxml/jackson/annotation/JsonInclude$Include.class -com/fasterxml/jackson/annotation/JsonInclude$Value.class -com/fasterxml/jackson/annotation/JsonInclude.class -com/fasterxml/jackson/annotation/JsonManagedReference.class -com/fasterxml/jackson/annotation/JsonMerge.class -com/fasterxml/jackson/annotation/JsonProperty$Access.class -com/fasterxml/jackson/annotation/JsonProperty.class -com/fasterxml/jackson/annotation/JsonPropertyDescription.class -com/fasterxml/jackson/annotation/JsonPropertyOrder.class -com/fasterxml/jackson/annotation/JsonRawValue.class -com/fasterxml/jackson/annotation/JsonRootName.class -com/fasterxml/jackson/annotation/JsonSetter$Value.class -com/fasterxml/jackson/annotation/JsonSetter.class -com/fasterxml/jackson/annotation/JsonSubTypes$Type.class -com/fasterxml/jackson/annotation/JsonSubTypes.class -com/fasterxml/jackson/annotation/JsonTypeId.class -com/fasterxml/jackson/annotation/JsonTypeInfo$As.class -com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class -com/fasterxml/jackson/annotation/JsonTypeInfo$None.class -com/fasterxml/jackson/annotation/JsonTypeInfo.class -com/fasterxml/jackson/annotation/JsonTypeName.class -com/fasterxml/jackson/annotation/JsonUnwrapped.class -com/fasterxml/jackson/annotation/JsonValue.class -com/fasterxml/jackson/annotation/JsonView.class -com/fasterxml/jackson/annotation/Nulls.class -com/fasterxml/jackson/annotation/ObjectIdGenerator$IdKey.class -com/fasterxml/jackson/annotation/ObjectIdGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$Base.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$IntSequenceGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$None.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$PropertyGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$StringIdGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$UUIDGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators.class -com/fasterxml/jackson/annotation/ObjectIdResolver.class -com/fasterxml/jackson/annotation/OptBoolean.class -com/fasterxml/jackson/annotation/PropertyAccessor.class -com/fasterxml/jackson/annotation/SimpleObjectIdResolver.class -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/ -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml -META-INF/services/com.fasterxml.jackson.core.ObjectCodec -com/fasterxml/jackson/databind/ -com/fasterxml/jackson/databind/AbstractTypeResolver.class -com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty$Type.class -com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty.class -com/fasterxml/jackson/databind/AnnotationIntrospector.class -com/fasterxml/jackson/databind/BeanDescription.class -com/fasterxml/jackson/databind/BeanProperty$Bogus.class -com/fasterxml/jackson/databind/BeanProperty$Std.class -com/fasterxml/jackson/databind/BeanProperty.class -com/fasterxml/jackson/databind/DatabindContext.class -com/fasterxml/jackson/databind/DeserializationConfig.class -com/fasterxml/jackson/databind/DeserializationContext.class -com/fasterxml/jackson/databind/DeserializationFeature.class -com/fasterxml/jackson/databind/InjectableValues$Std.class -com/fasterxml/jackson/databind/InjectableValues.class -com/fasterxml/jackson/databind/JavaType.class -com/fasterxml/jackson/databind/JsonDeserializer$None.class -com/fasterxml/jackson/databind/JsonDeserializer.class -com/fasterxml/jackson/databind/JsonMappingException$Reference.class -com/fasterxml/jackson/databind/JsonMappingException.class -com/fasterxml/jackson/databind/JsonNode$1.class -com/fasterxml/jackson/databind/JsonNode.class -com/fasterxml/jackson/databind/JsonSerializable$Base.class -com/fasterxml/jackson/databind/JsonSerializable.class -com/fasterxml/jackson/databind/JsonSerializer$None.class -com/fasterxml/jackson/databind/JsonSerializer.class -com/fasterxml/jackson/databind/KeyDeserializer$None.class -com/fasterxml/jackson/databind/KeyDeserializer.class -com/fasterxml/jackson/databind/MapperFeature.class -com/fasterxml/jackson/databind/MappingIterator.class -com/fasterxml/jackson/databind/MappingJsonFactory.class -com/fasterxml/jackson/databind/Module$SetupContext.class -com/fasterxml/jackson/databind/Module.class -com/fasterxml/jackson/databind/ObjectMapper$1.class -com/fasterxml/jackson/databind/ObjectMapper$2.class -com/fasterxml/jackson/databind/ObjectMapper$3.class -com/fasterxml/jackson/databind/ObjectMapper$DefaultTypeResolverBuilder.class -com/fasterxml/jackson/databind/ObjectMapper$DefaultTyping.class -com/fasterxml/jackson/databind/ObjectMapper.class -com/fasterxml/jackson/databind/ObjectReader.class -com/fasterxml/jackson/databind/ObjectWriter$GeneratorSettings.class -com/fasterxml/jackson/databind/ObjectWriter$Prefetch.class -com/fasterxml/jackson/databind/ObjectWriter.class -com/fasterxml/jackson/databind/PropertyMetadata$MergeInfo.class -com/fasterxml/jackson/databind/PropertyMetadata.class -com/fasterxml/jackson/databind/PropertyName.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$KebabCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseWithUnderscoresStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$PascalCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$PropertyNamingStrategyBase.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$SnakeCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$UpperCamelCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy.class -com/fasterxml/jackson/databind/RuntimeJsonMappingException.class -com/fasterxml/jackson/databind/SequenceWriter.class -com/fasterxml/jackson/databind/SerializationConfig.class -com/fasterxml/jackson/databind/SerializationFeature.class -com/fasterxml/jackson/databind/SerializerProvider.class -com/fasterxml/jackson/databind/annotation/ -com/fasterxml/jackson/databind/annotation/JacksonStdImpl.class -com/fasterxml/jackson/databind/annotation/JsonAppend$Attr.class -com/fasterxml/jackson/databind/annotation/JsonAppend$Prop.class -com/fasterxml/jackson/databind/annotation/JsonAppend.class -com/fasterxml/jackson/databind/annotation/JsonDeserialize.class -com/fasterxml/jackson/databind/annotation/JsonNaming.class -com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder$Value.class -com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder.class -com/fasterxml/jackson/databind/annotation/JsonSerialize$Inclusion.class -com/fasterxml/jackson/databind/annotation/JsonSerialize$Typing.class -com/fasterxml/jackson/databind/annotation/JsonSerialize.class -com/fasterxml/jackson/databind/annotation/JsonTypeIdResolver.class -com/fasterxml/jackson/databind/annotation/JsonTypeResolver.class -com/fasterxml/jackson/databind/annotation/JsonValueInstantiator.class -com/fasterxml/jackson/databind/annotation/NoClass.class -com/fasterxml/jackson/databind/cfg/ -com/fasterxml/jackson/databind/cfg/BaseSettings.class -com/fasterxml/jackson/databind/cfg/ConfigFeature.class -com/fasterxml/jackson/databind/cfg/ConfigOverride$Empty.class -com/fasterxml/jackson/databind/cfg/ConfigOverride.class -com/fasterxml/jackson/databind/cfg/ConfigOverrides.class -com/fasterxml/jackson/databind/cfg/ContextAttributes$Impl.class -com/fasterxml/jackson/databind/cfg/ContextAttributes.class -com/fasterxml/jackson/databind/cfg/DeserializerFactoryConfig.class -com/fasterxml/jackson/databind/cfg/HandlerInstantiator.class -com/fasterxml/jackson/databind/cfg/MapperConfig.class -com/fasterxml/jackson/databind/cfg/MapperConfigBase.class -com/fasterxml/jackson/databind/cfg/MutableConfigOverride.class -com/fasterxml/jackson/databind/cfg/PackageVersion.class -com/fasterxml/jackson/databind/cfg/SerializerFactoryConfig.class -com/fasterxml/jackson/databind/deser/ -com/fasterxml/jackson/databind/deser/AbstractDeserializer.class -com/fasterxml/jackson/databind/deser/BasicDeserializerFactory$1.class -com/fasterxml/jackson/databind/deser/BasicDeserializerFactory.class -com/fasterxml/jackson/databind/deser/BeanDeserializer$1.class -com/fasterxml/jackson/databind/deser/BeanDeserializer$BeanReferring.class -com/fasterxml/jackson/databind/deser/BeanDeserializer.class -com/fasterxml/jackson/databind/deser/BeanDeserializerBase.class -com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.class -com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.class -com/fasterxml/jackson/databind/deser/BeanDeserializerModifier.class -com/fasterxml/jackson/databind/deser/BuilderBasedDeserializer.class -com/fasterxml/jackson/databind/deser/ContextualDeserializer.class -com/fasterxml/jackson/databind/deser/ContextualKeyDeserializer.class -com/fasterxml/jackson/databind/deser/CreatorProperty.class -com/fasterxml/jackson/databind/deser/DataFormatReaders$AccessorForReader.class -com/fasterxml/jackson/databind/deser/DataFormatReaders$Match.class -com/fasterxml/jackson/databind/deser/DataFormatReaders.class -com/fasterxml/jackson/databind/deser/DefaultDeserializationContext$Impl.class -com/fasterxml/jackson/databind/deser/DefaultDeserializationContext.class -com/fasterxml/jackson/databind/deser/DeserializationProblemHandler.class -com/fasterxml/jackson/databind/deser/DeserializerCache.class -com/fasterxml/jackson/databind/deser/DeserializerFactory.class -com/fasterxml/jackson/databind/deser/Deserializers$Base.class -com/fasterxml/jackson/databind/deser/Deserializers.class -com/fasterxml/jackson/databind/deser/KeyDeserializers.class -com/fasterxml/jackson/databind/deser/NullValueProvider.class -com/fasterxml/jackson/databind/deser/ResolvableDeserializer.class -com/fasterxml/jackson/databind/deser/SettableAnyProperty$AnySetterReferring.class -com/fasterxml/jackson/databind/deser/SettableAnyProperty.class -com/fasterxml/jackson/databind/deser/SettableBeanProperty$Delegating.class -com/fasterxml/jackson/databind/deser/SettableBeanProperty.class -com/fasterxml/jackson/databind/deser/UnresolvedForwardReference.class -com/fasterxml/jackson/databind/deser/UnresolvedId.class -com/fasterxml/jackson/databind/deser/ValueInstantiator$Base.class -com/fasterxml/jackson/databind/deser/ValueInstantiator$Gettable.class -com/fasterxml/jackson/databind/deser/ValueInstantiator.class -com/fasterxml/jackson/databind/deser/ValueInstantiators$Base.class -com/fasterxml/jackson/databind/deser/ValueInstantiators.class -com/fasterxml/jackson/databind/deser/impl/ -com/fasterxml/jackson/databind/deser/impl/BeanAsArrayBuilderDeserializer.class -com/fasterxml/jackson/databind/deser/impl/BeanAsArrayDeserializer.class -com/fasterxml/jackson/databind/deser/impl/BeanPropertyMap.class -com/fasterxml/jackson/databind/deser/impl/CreatorCandidate$Param.class -com/fasterxml/jackson/databind/deser/impl/CreatorCandidate.class -com/fasterxml/jackson/databind/deser/impl/CreatorCollector$StdTypeConstructor.class -com/fasterxml/jackson/databind/deser/impl/CreatorCollector.class -com/fasterxml/jackson/databind/deser/impl/ErrorThrowingDeserializer.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$Builder.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$ExtTypedProperty.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler.class -com/fasterxml/jackson/databind/deser/impl/FailingDeserializer.class -com/fasterxml/jackson/databind/deser/impl/FieldProperty.class -com/fasterxml/jackson/databind/deser/impl/InnerClassProperty.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$1.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$JavaUtilCollectionsConverter.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers.class -com/fasterxml/jackson/databind/deser/impl/ManagedReferenceProperty.class -com/fasterxml/jackson/databind/deser/impl/MergingSettableBeanProperty.class -com/fasterxml/jackson/databind/deser/impl/MethodProperty.class -com/fasterxml/jackson/databind/deser/impl/NullsAsEmptyProvider.class -com/fasterxml/jackson/databind/deser/impl/NullsConstantProvider.class -com/fasterxml/jackson/databind/deser/impl/NullsFailProvider.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReader.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty$PropertyReferring.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator$CaseInsensitiveMap.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedObjectIdGenerator.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Any.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Map.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Regular.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue.class -com/fasterxml/jackson/databind/deser/impl/PropertyValueBuffer.class -com/fasterxml/jackson/databind/deser/impl/ReadableObjectId$Referring.class -com/fasterxml/jackson/databind/deser/impl/ReadableObjectId.class -com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.class -com/fasterxml/jackson/databind/deser/impl/TypeWrappedDeserializer.class -com/fasterxml/jackson/databind/deser/impl/UnwrappedPropertyHandler.class -com/fasterxml/jackson/databind/deser/impl/ValueInjector.class -com/fasterxml/jackson/databind/deser/std/ -com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.class -com/fasterxml/jackson/databind/deser/std/AtomicBooleanDeserializer.class -com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.class -com/fasterxml/jackson/databind/deser/std/BaseNodeDeserializer.class -com/fasterxml/jackson/databind/deser/std/ByteBufferDeserializer.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferring.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferringAccumulator.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer.class -com/fasterxml/jackson/databind/deser/std/ContainerDeserializerBase.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$CalendarDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateBasedDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$SqlDateDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$TimestampDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers.class -com/fasterxml/jackson/databind/deser/std/DelegatingDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumMapDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumSetDeserializer.class -com/fasterxml/jackson/databind/deser/std/FactoryBasedEnumDeserializer.class -com/fasterxml/jackson/databind/deser/std/FromStringDeserializer$Std.class -com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.class -com/fasterxml/jackson/databind/deser/std/JdkDeserializers.class -com/fasterxml/jackson/databind/deser/std/JsonLocationInstantiator.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ObjectDeserializer.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferring.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferringAccumulator.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer.class -com/fasterxml/jackson/databind/deser/std/MapEntryDeserializer.class -com/fasterxml/jackson/databind/deser/std/NullifyingDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$1.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigDecimalDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigIntegerDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BooleanDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ByteDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$CharacterDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$DoubleDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$FloatDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$IntegerDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$LongDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$NumberDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$PrimitiveOrWrapperDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ShortDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers.class -com/fasterxml/jackson/databind/deser/std/ObjectArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$BooleanDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ByteDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$CharDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$DoubleDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$FloatDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$IntDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$LongDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ShortDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers.class -com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.class -com/fasterxml/jackson/databind/deser/std/StackTraceElementDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdDelegatingDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$DelegatingKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$EnumKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringCtorKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringFactoryKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializers.class -com/fasterxml/jackson/databind/deser/std/StdNodeBasedDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdScalarDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdValueInstantiator.class -com/fasterxml/jackson/databind/deser/std/StringArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/StringCollectionDeserializer.class -com/fasterxml/jackson/databind/deser/std/StringDeserializer.class -com/fasterxml/jackson/databind/deser/std/ThrowableDeserializer.class -com/fasterxml/jackson/databind/deser/std/TokenBufferDeserializer.class -com/fasterxml/jackson/databind/deser/std/UUIDDeserializer.class -com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer$Vanilla.class -com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.class -com/fasterxml/jackson/databind/exc/ -com/fasterxml/jackson/databind/exc/IgnoredPropertyException.class -com/fasterxml/jackson/databind/exc/InvalidDefinitionException.class -com/fasterxml/jackson/databind/exc/InvalidFormatException.class -com/fasterxml/jackson/databind/exc/InvalidNullException.class -com/fasterxml/jackson/databind/exc/InvalidTypeIdException.class -com/fasterxml/jackson/databind/exc/MismatchedInputException.class -com/fasterxml/jackson/databind/exc/PropertyBindingException.class -com/fasterxml/jackson/databind/exc/UnrecognizedPropertyException.class -com/fasterxml/jackson/databind/ext/ -com/fasterxml/jackson/databind/ext/CoreXMLDeserializers$Std.class -com/fasterxml/jackson/databind/ext/CoreXMLDeserializers.class -com/fasterxml/jackson/databind/ext/CoreXMLSerializers$XMLGregorianCalendarSerializer.class -com/fasterxml/jackson/databind/ext/CoreXMLSerializers.class -com/fasterxml/jackson/databind/ext/DOMDeserializer$DocumentDeserializer.class -com/fasterxml/jackson/databind/ext/DOMDeserializer$NodeDeserializer.class -com/fasterxml/jackson/databind/ext/DOMDeserializer.class -com/fasterxml/jackson/databind/ext/DOMSerializer.class -com/fasterxml/jackson/databind/ext/Java7Support.class -com/fasterxml/jackson/databind/ext/Java7SupportImpl.class -com/fasterxml/jackson/databind/ext/NioPathDeserializer.class -com/fasterxml/jackson/databind/ext/NioPathSerializer.class -com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.class -com/fasterxml/jackson/databind/introspect/ -com/fasterxml/jackson/databind/introspect/Annotated.class -com/fasterxml/jackson/databind/introspect/AnnotatedClass$Creators.class -com/fasterxml/jackson/databind/introspect/AnnotatedClass.class -com/fasterxml/jackson/databind/introspect/AnnotatedClassResolver.class -com/fasterxml/jackson/databind/introspect/AnnotatedConstructor$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedConstructor.class -com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedField$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedField.class -com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector$FieldBuilder.class -com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedMember.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethod$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethod.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector$MethodBuilder.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodMap.class -com/fasterxml/jackson/databind/introspect/AnnotatedParameter.class -com/fasterxml/jackson/databind/introspect/AnnotatedWithParams.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$EmptyCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$NCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$NoAnnotations.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneAnnotation.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$TwoAnnotations.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.class -com/fasterxml/jackson/databind/introspect/AnnotationMap.class -com/fasterxml/jackson/databind/introspect/BasicBeanDescription.class -com/fasterxml/jackson/databind/introspect/BasicClassIntrospector.class -com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.class -com/fasterxml/jackson/databind/introspect/ClassIntrospector$MixInResolver.class -com/fasterxml/jackson/databind/introspect/ClassIntrospector.class -com/fasterxml/jackson/databind/introspect/CollectorBase.class -com/fasterxml/jackson/databind/introspect/ConcreteBeanPropertyBase.class -com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector$1.class -com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.class -com/fasterxml/jackson/databind/introspect/MemberKey.class -com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector$1.class -com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector.class -com/fasterxml/jackson/databind/introspect/ObjectIdInfo.class -com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$1.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$10.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$2.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$3.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$4.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$5.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$6.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$7.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$8.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$9.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$Linked.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$MemberIterator.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$WithMember.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.class -com/fasterxml/jackson/databind/introspect/SimpleMixInResolver.class -com/fasterxml/jackson/databind/introspect/TypeResolutionContext$Basic.class -com/fasterxml/jackson/databind/introspect/TypeResolutionContext.class -com/fasterxml/jackson/databind/introspect/VirtualAnnotatedMember.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker$1.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker$Std.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker.class -com/fasterxml/jackson/databind/introspect/WithMember.class -com/fasterxml/jackson/databind/jsonFormatVisitors/ -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatTypes.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitable.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWithSerializerProvider.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormat.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor.class -com/fasterxml/jackson/databind/jsonschema/ -com/fasterxml/jackson/databind/jsonschema/JsonSchema.class -com/fasterxml/jackson/databind/jsonschema/JsonSerializableSchema.class -com/fasterxml/jackson/databind/jsonschema/SchemaAware.class -com/fasterxml/jackson/databind/jsontype/ -com/fasterxml/jackson/databind/jsontype/NamedType.class -com/fasterxml/jackson/databind/jsontype/SubtypeResolver.class -com/fasterxml/jackson/databind/jsontype/TypeDeserializer$1.class -com/fasterxml/jackson/databind/jsontype/TypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/TypeIdResolver.class -com/fasterxml/jackson/databind/jsontype/TypeResolverBuilder.class -com/fasterxml/jackson/databind/jsontype/TypeSerializer$1.class -com/fasterxml/jackson/databind/jsontype/TypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/ -com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExistingPropertyTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/ClassNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/MinimalClassNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/StdSubtypeResolver.class -com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder$1.class -com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder.class -com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.class -com/fasterxml/jackson/databind/jsontype/impl/TypeDeserializerBase.class -com/fasterxml/jackson/databind/jsontype/impl/TypeIdResolverBase.class -com/fasterxml/jackson/databind/jsontype/impl/TypeNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/TypeSerializerBase.class -com/fasterxml/jackson/databind/module/ -com/fasterxml/jackson/databind/module/SimpleAbstractTypeResolver.class -com/fasterxml/jackson/databind/module/SimpleDeserializers.class -com/fasterxml/jackson/databind/module/SimpleKeyDeserializers.class -com/fasterxml/jackson/databind/module/SimpleModule.class -com/fasterxml/jackson/databind/module/SimpleSerializers.class -com/fasterxml/jackson/databind/module/SimpleValueInstantiators.class -com/fasterxml/jackson/databind/node/ -com/fasterxml/jackson/databind/node/ArrayNode.class -com/fasterxml/jackson/databind/node/BaseJsonNode.class -com/fasterxml/jackson/databind/node/BigIntegerNode.class -com/fasterxml/jackson/databind/node/BinaryNode.class -com/fasterxml/jackson/databind/node/BooleanNode.class -com/fasterxml/jackson/databind/node/ContainerNode.class -com/fasterxml/jackson/databind/node/DecimalNode.class -com/fasterxml/jackson/databind/node/DoubleNode.class -com/fasterxml/jackson/databind/node/FloatNode.class -com/fasterxml/jackson/databind/node/IntNode.class -com/fasterxml/jackson/databind/node/JsonNodeCreator.class -com/fasterxml/jackson/databind/node/JsonNodeFactory.class -com/fasterxml/jackson/databind/node/JsonNodeType.class -com/fasterxml/jackson/databind/node/LongNode.class -com/fasterxml/jackson/databind/node/MissingNode.class -com/fasterxml/jackson/databind/node/NodeCursor$ArrayCursor.class -com/fasterxml/jackson/databind/node/NodeCursor$ObjectCursor.class -com/fasterxml/jackson/databind/node/NodeCursor$RootCursor.class -com/fasterxml/jackson/databind/node/NodeCursor.class -com/fasterxml/jackson/databind/node/NullNode.class -com/fasterxml/jackson/databind/node/NumericNode.class -com/fasterxml/jackson/databind/node/ObjectNode.class -com/fasterxml/jackson/databind/node/POJONode.class -com/fasterxml/jackson/databind/node/ShortNode.class -com/fasterxml/jackson/databind/node/TextNode.class -com/fasterxml/jackson/databind/node/TreeTraversingParser$1.class -com/fasterxml/jackson/databind/node/TreeTraversingParser.class -com/fasterxml/jackson/databind/node/ValueNode.class -com/fasterxml/jackson/databind/ser/ -com/fasterxml/jackson/databind/ser/AnyGetterWriter.class -com/fasterxml/jackson/databind/ser/BasicSerializerFactory$1.class -com/fasterxml/jackson/databind/ser/BasicSerializerFactory.class -com/fasterxml/jackson/databind/ser/BeanPropertyFilter.class -com/fasterxml/jackson/databind/ser/BeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/BeanSerializer.class -com/fasterxml/jackson/databind/ser/BeanSerializerBuilder.class -com/fasterxml/jackson/databind/ser/BeanSerializerFactory.class -com/fasterxml/jackson/databind/ser/BeanSerializerModifier.class -com/fasterxml/jackson/databind/ser/ContainerSerializer.class -com/fasterxml/jackson/databind/ser/ContextualSerializer.class -com/fasterxml/jackson/databind/ser/DefaultSerializerProvider$Impl.class -com/fasterxml/jackson/databind/ser/DefaultSerializerProvider.class -com/fasterxml/jackson/databind/ser/FilterProvider.class -com/fasterxml/jackson/databind/ser/PropertyBuilder$1.class -com/fasterxml/jackson/databind/ser/PropertyBuilder.class -com/fasterxml/jackson/databind/ser/PropertyFilter.class -com/fasterxml/jackson/databind/ser/PropertyWriter.class -com/fasterxml/jackson/databind/ser/ResolvableSerializer.class -com/fasterxml/jackson/databind/ser/SerializerCache.class -com/fasterxml/jackson/databind/ser/SerializerFactory.class -com/fasterxml/jackson/databind/ser/Serializers$Base.class -com/fasterxml/jackson/databind/ser/Serializers.class -com/fasterxml/jackson/databind/ser/VirtualBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/ -com/fasterxml/jackson/databind/ser/impl/AttributePropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.class -com/fasterxml/jackson/databind/ser/impl/FailingSerializer.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$MultiView.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$SingleView.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/IndexedListSerializer.class -com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.class -com/fasterxml/jackson/databind/ser/impl/IteratorSerializer.class -com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer$1.class -com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.class -com/fasterxml/jackson/databind/ser/impl/ObjectIdWriter.class -com/fasterxml/jackson/databind/ser/impl/PropertyBasedObjectIdGenerator.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Double.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Multi.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$SerializerAndMapResult.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$TypeAndSerializer.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap.class -com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap$Bucket.class -com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$1.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$FilterExceptFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$SerializeExceptFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleFilterProvider.class -com/fasterxml/jackson/databind/ser/impl/StringArraySerializer.class -com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.class -com/fasterxml/jackson/databind/ser/impl/TypeWrappedSerializer.class -com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter$1.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.class -com/fasterxml/jackson/databind/ser/impl/WritableObjectId.class -com/fasterxml/jackson/databind/ser/std/ -com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.class -com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.class -com/fasterxml/jackson/databind/ser/std/AtomicReferenceSerializer.class -com/fasterxml/jackson/databind/ser/std/BeanSerializerBase$1.class -com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.class -com/fasterxml/jackson/databind/ser/std/BooleanSerializer$AsNumber.class -com/fasterxml/jackson/databind/ser/std/BooleanSerializer.class -com/fasterxml/jackson/databind/ser/std/ByteArraySerializer.class -com/fasterxml/jackson/databind/ser/std/ByteBufferSerializer.class -com/fasterxml/jackson/databind/ser/std/CalendarSerializer.class -com/fasterxml/jackson/databind/ser/std/ClassSerializer.class -com/fasterxml/jackson/databind/ser/std/CollectionSerializer.class -com/fasterxml/jackson/databind/ser/std/DateSerializer.class -com/fasterxml/jackson/databind/ser/std/DateTimeSerializerBase.class -com/fasterxml/jackson/databind/ser/std/EnumSerializer.class -com/fasterxml/jackson/databind/ser/std/EnumSetSerializer.class -com/fasterxml/jackson/databind/ser/std/FileSerializer.class -com/fasterxml/jackson/databind/ser/std/InetAddressSerializer.class -com/fasterxml/jackson/databind/ser/std/InetSocketAddressSerializer.class -com/fasterxml/jackson/databind/ser/std/IterableSerializer.class -com/fasterxml/jackson/databind/ser/std/JsonValueSerializer$TypeSerializerRerouter.class -com/fasterxml/jackson/databind/ser/std/JsonValueSerializer.class -com/fasterxml/jackson/databind/ser/std/MapProperty.class -com/fasterxml/jackson/databind/ser/std/MapSerializer$1.class -com/fasterxml/jackson/databind/ser/std/MapSerializer.class -com/fasterxml/jackson/databind/ser/std/NonTypedScalarSerializerBase.class -com/fasterxml/jackson/databind/ser/std/NullSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializer$1.class -com/fasterxml/jackson/databind/ser/std/NumberSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$1.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$Base.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$DoubleSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$FloatSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntLikeSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntegerSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$LongSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$ShortSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers.class -com/fasterxml/jackson/databind/ser/std/ObjectArraySerializer.class -com/fasterxml/jackson/databind/ser/std/RawSerializer.class -com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer$1.class -com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer.class -com/fasterxml/jackson/databind/ser/std/SerializableSerializer.class -com/fasterxml/jackson/databind/ser/std/SqlDateSerializer.class -com/fasterxml/jackson/databind/ser/std/SqlTimeSerializer.class -com/fasterxml/jackson/databind/ser/std/StaticListSerializerBase.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$BooleanArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$CharArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$DoubleArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$FloatArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$IntArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$LongArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$ShortArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$TypedPrimitiveArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers.class -com/fasterxml/jackson/databind/ser/std/StdDelegatingSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicBooleanSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicIntegerSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicLongSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Default.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Dynamic.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$EnumKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$StringKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers.class -com/fasterxml/jackson/databind/ser/std/StdScalarSerializer.class -com/fasterxml/jackson/databind/ser/std/StdSerializer.class -com/fasterxml/jackson/databind/ser/std/StringSerializer.class -com/fasterxml/jackson/databind/ser/std/TimeZoneSerializer.class -com/fasterxml/jackson/databind/ser/std/ToStringSerializer.class -com/fasterxml/jackson/databind/ser/std/TokenBufferSerializer.class -com/fasterxml/jackson/databind/ser/std/UUIDSerializer.class -com/fasterxml/jackson/databind/type/ -com/fasterxml/jackson/databind/type/ArrayType.class -com/fasterxml/jackson/databind/type/ClassKey.class -com/fasterxml/jackson/databind/type/ClassStack.class -com/fasterxml/jackson/databind/type/CollectionLikeType.class -com/fasterxml/jackson/databind/type/CollectionType.class -com/fasterxml/jackson/databind/type/MapLikeType.class -com/fasterxml/jackson/databind/type/MapType.class -com/fasterxml/jackson/databind/type/PlaceholderForType.class -com/fasterxml/jackson/databind/type/ReferenceType.class -com/fasterxml/jackson/databind/type/ResolvedRecursiveType.class -com/fasterxml/jackson/databind/type/SimpleType.class -com/fasterxml/jackson/databind/type/TypeBase.class -com/fasterxml/jackson/databind/type/TypeBindings$AsKey.class -com/fasterxml/jackson/databind/type/TypeBindings$TypeParamStash.class -com/fasterxml/jackson/databind/type/TypeBindings.class -com/fasterxml/jackson/databind/type/TypeFactory.class -com/fasterxml/jackson/databind/type/TypeModifier.class -com/fasterxml/jackson/databind/type/TypeParser$MyTokenizer.class -com/fasterxml/jackson/databind/type/TypeParser.class -com/fasterxml/jackson/databind/util/ -com/fasterxml/jackson/databind/util/AccessPattern.class -com/fasterxml/jackson/databind/util/Annotations.class -com/fasterxml/jackson/databind/util/ArrayBuilders$1.class -com/fasterxml/jackson/databind/util/ArrayBuilders$BooleanBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$ByteBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$DoubleBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$FloatBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$IntBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$LongBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$ShortBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders.class -com/fasterxml/jackson/databind/util/ArrayIterator.class -com/fasterxml/jackson/databind/util/BeanUtil.class -com/fasterxml/jackson/databind/util/ByteBufferBackedInputStream.class -com/fasterxml/jackson/databind/util/ByteBufferBackedOutputStream.class -com/fasterxml/jackson/databind/util/ClassUtil$Ctor.class -com/fasterxml/jackson/databind/util/ClassUtil$EnumTypeLocator.class -com/fasterxml/jackson/databind/util/ClassUtil.class -com/fasterxml/jackson/databind/util/CompactStringObjectMap.class -com/fasterxml/jackson/databind/util/ConstantValueInstantiator.class -com/fasterxml/jackson/databind/util/Converter$None.class -com/fasterxml/jackson/databind/util/Converter.class -com/fasterxml/jackson/databind/util/EnumResolver.class -com/fasterxml/jackson/databind/util/EnumValues.class -com/fasterxml/jackson/databind/util/ISO8601DateFormat.class -com/fasterxml/jackson/databind/util/ISO8601Utils.class -com/fasterxml/jackson/databind/util/JSONPObject.class -com/fasterxml/jackson/databind/util/JSONWrappedObject.class -com/fasterxml/jackson/databind/util/LRUMap.class -com/fasterxml/jackson/databind/util/LinkedNode.class -com/fasterxml/jackson/databind/util/NameTransformer$1.class -com/fasterxml/jackson/databind/util/NameTransformer$2.class -com/fasterxml/jackson/databind/util/NameTransformer$3.class -com/fasterxml/jackson/databind/util/NameTransformer$Chained.class -com/fasterxml/jackson/databind/util/NameTransformer$NopTransformer.class -com/fasterxml/jackson/databind/util/NameTransformer.class -com/fasterxml/jackson/databind/util/Named.class -com/fasterxml/jackson/databind/util/ObjectBuffer.class -com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder$Node.class -com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder.class -com/fasterxml/jackson/databind/util/RawValue.class -com/fasterxml/jackson/databind/util/RootNameLookup.class -com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.class -com/fasterxml/jackson/databind/util/StdConverter.class -com/fasterxml/jackson/databind/util/StdDateFormat.class -com/fasterxml/jackson/databind/util/TokenBuffer$1.class -com/fasterxml/jackson/databind/util/TokenBuffer$Parser.class -com/fasterxml/jackson/databind/util/TokenBuffer$Segment.class -com/fasterxml/jackson/databind/util/TokenBuffer.class -com/fasterxml/jackson/databind/util/TokenBufferReadContext.class -com/fasterxml/jackson/databind/util/TypeKey.class -com/fasterxml/jackson/databind/util/ViewMatcher$Multi.class -com/fasterxml/jackson/databind/util/ViewMatcher$Single.class -com/fasterxml/jackson/databind/util/ViewMatcher.class From 428ffd5444273760b3394cb1fbc5892a9ec7f09e Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Thu, 16 Jul 2020 15:21:09 -0500 Subject: [PATCH 292/439] docs: add multi-recipient examples (#638) We have similar examples in other languages and they provide a clear distinction between the two use cases. --- USE_CASES.md | 2 + .../MultipleEmailsMultipleRecipients.java | 54 +++++++++++++++++++ .../mail/SingleEmailMultipleRecipients.java | 44 +++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 examples/helpers/mail/MultipleEmailsMultipleRecipients.java create mode 100644 examples/helpers/mail/SingleEmailMultipleRecipients.java diff --git a/USE_CASES.md b/USE_CASES.md index 4bea0387..c74b1264 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -3,6 +3,8 @@ This documentation provides examples for specific use cases. Please [open an iss # Use Cases * [Send Mail Examples](examples/helpers/mail/Example.java) + * [Send a Single Email to Multiple Recipients](examples/helpers/mail/SingleEmailMultipleRecipients.java) + * [Send Multiple Emails to Multiple Recipients](examples/helpers/mail/MultipleEmailsMultipleRecipients.java) * [Transactional Templates](#transactional-templates) * [Legacy Templates](#legacy-templates) * [How to Setup a Domain Authentication](#domain-authentication) diff --git a/examples/helpers/mail/MultipleEmailsMultipleRecipients.java b/examples/helpers/mail/MultipleEmailsMultipleRecipients.java new file mode 100644 index 00000000..35fe03b8 --- /dev/null +++ b/examples/helpers/mail/MultipleEmailsMultipleRecipients.java @@ -0,0 +1,54 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; +import com.sendgrid.helpers.mail.Mail; +import com.sendgrid.helpers.mail.objects.Content; +import com.sendgrid.helpers.mail.objects.Email; +import com.sendgrid.helpers.mail.objects.Personalization; + +import java.io.IOException; + +public class MultipleEmailsMultipleRecipients { + + public static void main(String[] args) throws IOException { + final Mail mail = new Mail(); + + mail.setFrom(new Email("test@example.com", "Example User")); + mail.setSubject("Sending with Twilio SendGrid is Fun"); + + // Details on how to send an email with dynamic transactional templates: + // https://sendgrid.com/docs/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates/ + mail.setTemplateId("d-12345678901234567890123456789012"); + + final Personalization personalization1 = new Personalization(); + personalization1.addTo(new Email("test1@example.com", "Example User1")); + personalization1.addDynamicTemplateData("name", "Example User1"); + personalization1.addDynamicTemplateData("city", "Denver"); + mail.addPersonalization(personalization1); + + final Personalization personalization2 = new Personalization(); + personalization2.addTo(new Email("test2@example.com", "Example User2")); + personalization2.addDynamicTemplateData("name", "Example User2"); + personalization2.addDynamicTemplateData("city", "San Francisco"); + mail.addPersonalization(personalization2); + + mail.addContent(new Content("text/plain", "and easy to do anywhere, even with Java")); + mail.addContent(new Content("text/html", "and easy to do anywhere, even with Java")); + + send(mail); + } + + private static void send(final Mail mail) throws IOException { + final SendGrid client = new SendGrid(System.getenv("SENDGRID_API_KEY")); + final Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + + final Response response = client.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } +} diff --git a/examples/helpers/mail/SingleEmailMultipleRecipients.java b/examples/helpers/mail/SingleEmailMultipleRecipients.java new file mode 100644 index 00000000..8829124f --- /dev/null +++ b/examples/helpers/mail/SingleEmailMultipleRecipients.java @@ -0,0 +1,44 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; +import com.sendgrid.helpers.mail.Mail; +import com.sendgrid.helpers.mail.objects.Content; +import com.sendgrid.helpers.mail.objects.Email; +import com.sendgrid.helpers.mail.objects.Personalization; + +import java.io.IOException; + +public class SingleEmailMultipleRecipients { + + public static void main(String[] args) throws IOException { + final Mail mail = new Mail(); + + mail.setFrom(new Email("test@example.com", "Example User")); + mail.setSubject("Sending with Twilio SendGrid is Fun"); + + final Personalization personalization = new Personalization(); + personalization.addTo(new Email("test1@example.com", "Example User1")); + personalization.addTo(new Email("test2@example.com", "Example User2")); + personalization.addTo(new Email("test3@example.com", "Example User3")); + mail.addPersonalization(personalization); + + mail.addContent(new Content("text/plain", "and easy to do anywhere, even with Java")); + mail.addContent(new Content("text/html", "and easy to do anywhere, even with Java")); + + send(mail); + } + + private static void send(final Mail mail) throws IOException { + final SendGrid client = new SendGrid(System.getenv("SENDGRID_API_KEY")); + final Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + + final Response response = client.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } +} From dece530aefb0d1b0ad636101aee199aee1f1c20f Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Mon, 20 Jul 2020 15:32:10 -0700 Subject: [PATCH 293/439] chore: migrate to new default sendgrid-oai branch (#639) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a7e6c434..5db8ceab 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ test-integ: test version ?= latest test-docker: - curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/prism/prism.sh -o prism.sh + curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/main/prism/prism.sh -o prism.sh version=$(version) bash ./prism.sh clean: From 6623bd937da3b168fc6799b029479e9bd73523ed Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 22 Jul 2020 19:00:01 +0000 Subject: [PATCH 294/439] [Librarian] Version Bump --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e767f0a..0306fa78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-07-22] Version 4.6.2 +-------------------------- +**Library - Chore** +- [PR #639](https://github.com/sendgrid/sendgrid-java/pull/639): migrate to new default sendgrid-oai branch. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + +**Library - Docs** +- [PR #638](https://github.com/sendgrid/sendgrid-java/pull/638): add multi-recipient examples. Thanks to [@childish-sambino](https://github.com/childish-sambino)! +- [PR #637](https://github.com/sendgrid/sendgrid-java/pull/637): fix the kitchen sink example and link to it in the use cases doc. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-07-08] Version 4.6.1 -------------------------- **Library - Fix** From 6773207270729d75858fa178f91b98bcdabffd65 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 22 Jul 2020 19:30:05 +0000 Subject: [PATCH 295/439] Release 4.6.2 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 8 ++++---- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dbdcf01f..b1fbad85 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.1/sendgrid-4.6.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.1/sendgrid-4.6.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.2/sendgrid-4.6.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.2/sendgrid-4.6.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index 955ceadd..2c0df1b6 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.1 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.2 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.1' + implementation 'com.sendgrid:sendgrid-java:4.6.2' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.2/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 378bdea1..5c5249a7 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.1 + 4.6.2 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.1 + 4.6.2 @@ -306,7 +306,7 @@ org.bouncycastle bcprov-jdk15to18 - 1.65 + 1.66 - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 776888d2..b5e7de29 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.1"; + private static final String VERSION = "4.6.2"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 87e2fede..abe8349c 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.1"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.2"); } @Test From fb76fb4f47d5fc6aee69ce44f2943f3d3509e248 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Wed, 22 Jul 2020 14:30:37 -0700 Subject: [PATCH 296/439] chore: use HEAD to refer to default branch name --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5db8ceab..064737ef 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ test-integ: test version ?= latest test-docker: - curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/main/prism/prism.sh -o prism.sh + curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/HEAD/prism/prism.sh -o prism.sh version=$(version) bash ./prism.sh clean: From 3be0ca5b2f9d5bab9004df7ba74129f197ed83c1 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Mon, 27 Jul 2020 10:27:07 -0500 Subject: [PATCH 297/439] fix: remove the content verifier (#642) We don't do this in any of the other libraries and it only guards against a specific secret. Multiple customers indicate this check is overly sensitive to legitimate use cases. --- .../helpers/mail/objects/Content.java | 25 +--------- .../com/sendgrid/helpers/ContentTest.java | 48 ------------------- 2 files changed, 1 insertion(+), 72 deletions(-) delete mode 100644 src/test/java/com/sendgrid/helpers/ContentTest.java diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index 0a7a6557..1b333bfe 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -4,16 +4,8 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.regex.Pattern; -import java.lang.IllegalArgumentException; - /** - * An object in which you may specify the content of your email. + * An object in which you may specify the content of your email. */ @JsonInclude(Include.NON_DEFAULT) public class Content { @@ -44,7 +36,6 @@ public String getValue() { } public void setValue(String value) { - ContentVerifier.verifyContent(value); this.value = value; } @@ -79,17 +70,3 @@ public boolean equals(Object obj) { return true; } } - -class ContentVerifier { - private static final List FORBIDDEN_PATTERNS = Collections.singletonList( - Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") - ); - - static void verifyContent(String content) { - for (Pattern pattern: FORBIDDEN_PATTERNS) { - if (pattern.matcher(content).matches()) { - throw new IllegalArgumentException("Found a Forbidden Pattern in the content of the email"); - } - } - } -} \ No newline at end of file diff --git a/src/test/java/com/sendgrid/helpers/ContentTest.java b/src/test/java/com/sendgrid/helpers/ContentTest.java deleted file mode 100644 index c83b0d2e..00000000 --- a/src/test/java/com/sendgrid/helpers/ContentTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.sendgrid.helpers; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import com.sendgrid.helpers.mail.objects.Content; -import org.junit.rules.ExpectedException; - -import java.util.ArrayList; -import java.util.Arrays; - -public class ContentTest { - private Content content; - - @Before - public void setUp() { - this.content = new Content(); - } - - @Rule - public final ExpectedException exception = ExpectedException.none(); - - @Test - public void testForbiddenContentIsRejected() { - - ArrayList sampleApiKeys = new ArrayList<>( - Arrays.asList( - "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", - "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" - ) - - ); - - for (String apiKey: sampleApiKeys) { - exception.expect(IllegalArgumentException.class); - this.content.setValue("My api key is: " + apiKey); - } - } - - @Test - public void testNormalContentIsAllowed() { - String message = "I will not send you my api key!"; - this.content.setValue(message); - Assert.assertEquals(message, this.content.getValue()); - } - -} From eb64c2aeb673384261115dd18ee2348d63157ef6 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 27 Jul 2020 17:11:48 -0500 Subject: [PATCH 298/439] chore: update README to reflect default branch rename --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2c0df1b6..1efc9339 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. +**The default branch name for this repository has been changed to `main` as of 07/27/2020.** + **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** Version 3.X.X of this library provides full support for all Twilio SendGrid [Web API v3](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) endpoints, including the new [v3 /mail/send](https://sendgrid.com/blog/introducing-v3mailsend-sendgrids-new-mail-endpoint). From 7b036211909200a4ade19440a72a1af2ae4d7743 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 28 Jul 2020 09:56:36 -0500 Subject: [PATCH 299/439] chore: update CI config to use new default branch name --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7b7c65a3..ff279202 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,11 +15,11 @@ deploy: on: tags: true condition: $version = 8 - branch: master + branch: main notifications: slack: - if: branch = master + if: branch = main on_pull_requests: false on_success: never on_failure: change From 7f5545e679e88bb3f2fd88e4be3f7f4549c54a60 Mon Sep 17 00:00:00 2001 From: Stephan Schroevers Date: Tue, 28 Jul 2020 20:57:27 +0200 Subject: [PATCH 300/439] chore: replace `bcprov-jdk15to18` with `bcprov-jdk15on` (#643) By upgrading the `maven-shade-plugin` the `bcprov-jdk15on` artifact (which contains JDK 9+ classes) can also be used when building the project using JDK 8. This change reverts d9f4413707c38cd7c702d04574b207da56343002. Resolves #636. --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 5c5249a7..501c5915 100644 --- a/pom.xml +++ b/pom.xml @@ -124,7 +124,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.1 + 3.2.4 @@ -233,7 +233,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.1 + 3.2.4 @@ -305,8 +305,8 @@ org.bouncycastle - bcprov-jdk15to18 + bcprov-jdk15on 1.66 - \ No newline at end of file + From 86f864d61a3faccc357954e4778a7bc00714b3c4 Mon Sep 17 00:00:00 2001 From: Robert Olsthoorn Date: Wed, 29 Jul 2020 10:57:10 -0700 Subject: [PATCH 301/439] docs: Update README link to avoid redirection (#390) --- bin/com/sendgrid/helpers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/com/sendgrid/helpers/README.md b/bin/com/sendgrid/helpers/README.md index 874cc9fb..9b99f325 100644 --- a/bin/com/sendgrid/helpers/README.md +++ b/bin/com/sendgrid/helpers/README.md @@ -16,4 +16,4 @@ javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java ## Usage - See the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) for a complete working example. -- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/overview.html) \ No newline at end of file +- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html) From 417be238037015c89a7579e8b0cd4cf8130765fd Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Wed, 29 Jul 2020 12:59:29 -0500 Subject: [PATCH 302/439] docs: Update README link to avoid redirection --- src/main/java/com/sendgrid/helpers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index 874cc9fb..9b99f325 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -16,4 +16,4 @@ javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java ## Usage - See the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) for a complete working example. -- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/overview.html) \ No newline at end of file +- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html) From 195a658b5a99310b00ddd53b00a82cbf140ae97a Mon Sep 17 00:00:00 2001 From: Adams Au Date: Thu, 30 Jul 2020 03:14:38 +0800 Subject: [PATCH 303/439] docs: breakup examples to their own files in examples/user/user.java (#370) --- examples/user/CreateWebhookParseSettings.java | 22 + examples/user/DeleteScheduleSend.java | 21 + examples/user/DeleteWebhookParseSettings.java | 21 + examples/user/GetCreditBalance.java | 21 + examples/user/GetEmailAddress.java | 21 + examples/user/GetEnforedTLS.java | 21 + examples/user/GetProfile.java | 21 + examples/user/GetScheduleSend.java | 21 + examples/user/GetScheduleSendByBatchId.java | 21 + examples/user/GetUserInfo.java | 21 + examples/user/GetUsername.java | 21 + examples/user/GetWebhookEventSettings.java | 21 + .../GetWebhookParseSettingByHostname.java | 21 + examples/user/GetWebhookParseSettings.java | 21 + examples/user/GetWebhookParseStatistics.java | 26 + examples/user/PauseScheduleSend.java | 22 + examples/user/README.md | 50 ++ examples/user/TestWebhookEvent.java | 22 + examples/user/UpdateEmailAddress.java | 22 + examples/user/UpdateEnforcedTLS.java | 22 + examples/user/UpdatePassword.java | 22 + examples/user/UpdateProfile.java | 22 + examples/user/UpdateScheduleSend.java | 22 + examples/user/UpdateUsername.java | 22 + examples/user/UpdateWebhookEventSettings.java | 22 + examples/user/UpdateWebhookParseSettings.java | 22 + examples/user/user.java | 575 ------------------ 27 files changed, 591 insertions(+), 575 deletions(-) create mode 100644 examples/user/CreateWebhookParseSettings.java create mode 100644 examples/user/DeleteScheduleSend.java create mode 100644 examples/user/DeleteWebhookParseSettings.java create mode 100644 examples/user/GetCreditBalance.java create mode 100644 examples/user/GetEmailAddress.java create mode 100644 examples/user/GetEnforedTLS.java create mode 100644 examples/user/GetProfile.java create mode 100644 examples/user/GetScheduleSend.java create mode 100644 examples/user/GetScheduleSendByBatchId.java create mode 100644 examples/user/GetUserInfo.java create mode 100644 examples/user/GetUsername.java create mode 100644 examples/user/GetWebhookEventSettings.java create mode 100644 examples/user/GetWebhookParseSettingByHostname.java create mode 100644 examples/user/GetWebhookParseSettings.java create mode 100644 examples/user/GetWebhookParseStatistics.java create mode 100644 examples/user/PauseScheduleSend.java create mode 100644 examples/user/README.md create mode 100644 examples/user/TestWebhookEvent.java create mode 100644 examples/user/UpdateEmailAddress.java create mode 100644 examples/user/UpdateEnforcedTLS.java create mode 100644 examples/user/UpdatePassword.java create mode 100644 examples/user/UpdateProfile.java create mode 100644 examples/user/UpdateScheduleSend.java create mode 100644 examples/user/UpdateUsername.java create mode 100644 examples/user/UpdateWebhookEventSettings.java create mode 100644 examples/user/UpdateWebhookParseSettings.java delete mode 100644 examples/user/user.java diff --git a/examples/user/CreateWebhookParseSettings.java b/examples/user/CreateWebhookParseSettings.java new file mode 100644 index 00000000..23992ea7 --- /dev/null +++ b/examples/user/CreateWebhookParseSettings.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Create a parse setting +// POST /user/webhooks/parse/settings + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/parse/settings"); + request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/DeleteScheduleSend.java b/examples/user/DeleteScheduleSend.java new file mode 100644 index 00000000..23b9857c --- /dev/null +++ b/examples/user/DeleteScheduleSend.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Delete a cancellation or pause of a scheduled send +// DELETE /user/scheduled_sends/{batch_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/DeleteWebhookParseSettings.java b/examples/user/DeleteWebhookParseSettings.java new file mode 100644 index 00000000..93b8763c --- /dev/null +++ b/examples/user/DeleteWebhookParseSettings.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Delete a parse setting +// DELETE /user/webhooks/parse/settings/{hostname} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetCreditBalance.java b/examples/user/GetCreditBalance.java new file mode 100644 index 00000000..c6b9db1e --- /dev/null +++ b/examples/user/GetCreditBalance.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve your credit balance +// GET /user/credits + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/credits"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetEmailAddress.java b/examples/user/GetEmailAddress.java new file mode 100644 index 00000000..7fbccf11 --- /dev/null +++ b/examples/user/GetEmailAddress.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve your account email address +// GET /user/email + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/email"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetEnforedTLS.java b/examples/user/GetEnforedTLS.java new file mode 100644 index 00000000..f5a21969 --- /dev/null +++ b/examples/user/GetEnforedTLS.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve current Enforced TLS settings. +// GET /user/settings/enforced_tls + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/settings/enforced_tls"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetProfile.java b/examples/user/GetProfile.java new file mode 100644 index 00000000..5fd8b541 --- /dev/null +++ b/examples/user/GetProfile.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Get a user's profile +// GET /user/profile + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/profile"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetScheduleSend.java b/examples/user/GetScheduleSend.java new file mode 100644 index 00000000..436dd0d9 --- /dev/null +++ b/examples/user/GetScheduleSend.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve all scheduled sends +// GET /user/scheduled_sends + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetScheduleSendByBatchId.java b/examples/user/GetScheduleSendByBatchId.java new file mode 100644 index 00000000..48c4e334 --- /dev/null +++ b/examples/user/GetScheduleSendByBatchId.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve scheduled send +// GET /user/scheduled_sends/{batch_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetUserInfo.java b/examples/user/GetUserInfo.java new file mode 100644 index 00000000..880f6c5c --- /dev/null +++ b/examples/user/GetUserInfo.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Get a user's account information. +// GET /user/account + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/account"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetUsername.java b/examples/user/GetUsername.java new file mode 100644 index 00000000..e6756311 --- /dev/null +++ b/examples/user/GetUsername.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve your username +// GET /user/username + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/username"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetWebhookEventSettings.java b/examples/user/GetWebhookEventSettings.java new file mode 100644 index 00000000..fe1561c5 --- /dev/null +++ b/examples/user/GetWebhookEventSettings.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve Event Webhook settings +// GET /user/webhooks/event/settings + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/event/settings"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetWebhookParseSettingByHostname.java b/examples/user/GetWebhookParseSettingByHostname.java new file mode 100644 index 00000000..8814de72 --- /dev/null +++ b/examples/user/GetWebhookParseSettingByHostname.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve a specific parse setting +// GET /user/webhooks/parse/settings/{hostname} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetWebhookParseSettings.java b/examples/user/GetWebhookParseSettings.java new file mode 100644 index 00000000..deb6123c --- /dev/null +++ b/examples/user/GetWebhookParseSettings.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve all parse settings +// GET /user/webhooks/parse/settings + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetWebhookParseStatistics.java b/examples/user/GetWebhookParseStatistics.java new file mode 100644 index 00000000..52be567b --- /dev/null +++ b/examples/user/GetWebhookParseStatistics.java @@ -0,0 +1,26 @@ +////////////////////////////////////////////////////////////////// +// Retrieves Inbound Parse Webhook statistics. +// GET /user/webhooks/parse/stats + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "test_string"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/PauseScheduleSend.java b/examples/user/PauseScheduleSend.java new file mode 100644 index 00000000..517a8853 --- /dev/null +++ b/examples/user/PauseScheduleSend.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Cancel or pause a scheduled send +// POST /user/scheduled_sends + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("user/scheduled_sends"); + request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/README.md b/examples/user/README.md new file mode 100644 index 00000000..68e8370d --- /dev/null +++ b/examples/user/README.md @@ -0,0 +1,50 @@ +# User examples + +## Parse Settings Examples +- [Create Webhook Parse Settings](CreateWebhookParseSettings.java) +- [Delete Webhook Parse Settings](DeleteWebhookParseSettings.java) + +## Schedule Send Examples +- [Delete Scheduled Send](DeleteScheduleSend.java) +- [Get Scheduled Send](GetScheduleSend.java) +- [Get Scheduled Send](GetScheduleSendByBatchId.java) +- [Pause Scheduled Send](PauseScheduleSend.java) +- [Update Scheduled Send](UpdateScheduleSend.java) + +## Billing Examples +- [Get Credit Balance](GetCreditBalance.java) + +## Profile Examples + +### Email Address +- [Get Email Address](GetEmailAddress.java) +- [Update Email Address](UpdateEmailAddress.java) + +### Password +- [Update Password](UpdatePassword.java) + +### Profile +- [Get Profile](GetProfile.java) +- [Get User Info](GetUserInfo.java) +- [Update Profile](UpdateProfile.java) + +### Username +- [Get Username](GetUsername.java) +- [Update Username](UpdateUsername.java) + +## Security Settings Examples +- [Get Enforced TLS](GetEnforedTLS.java) +- [Update Enforced TLS](UpdateEnforcedTLS.java) + +## Webhook Settings Examples + +### Event Webhook +- [Test Event Webhook](TestWebhookEvent.java) +- [Get Event Webhook Settings](GetWebhookEventSettings.java) +- [Get Event Webhook Settings by Hostname](GetWebhookParseSettingByHostname.java) +- [Update Event Webhook Settings](UpdateWebhookEventSettings.java) + +## Inbound Parse +- [Get Parse Webhook Settings](GetWebhookParseSettings.java) +- [Get Parse Webhook Settings](GetWebhookParseStatistics.java) +- [Update Parse Webhook Settings](UpdateWebhookParseSettings.java) diff --git a/examples/user/TestWebhookEvent.java b/examples/user/TestWebhookEvent.java new file mode 100644 index 00000000..3dddac20 --- /dev/null +++ b/examples/user/TestWebhookEvent.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Test Event Notification Settings +// POST /user/webhooks/event/test + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/event/test"); + request.setBody("{\"url\":\"url\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateEmailAddress.java b/examples/user/UpdateEmailAddress.java new file mode 100644 index 00000000..dc0fd90e --- /dev/null +++ b/examples/user/UpdateEmailAddress.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update your account email address +// PUT /user/email + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setEndpoint("user/email"); + request.setBody("{\"email\":\"example@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateEnforcedTLS.java b/examples/user/UpdateEnforcedTLS.java new file mode 100644 index 00000000..0de1b829 --- /dev/null +++ b/examples/user/UpdateEnforcedTLS.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update Enforced TLS settings +// PATCH /user/settings/enforced_tls + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("user/settings/enforced_tls"); + request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/user/UpdatePassword.java b/examples/user/UpdatePassword.java new file mode 100644 index 00000000..b61e2228 --- /dev/null +++ b/examples/user/UpdatePassword.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update your password +// PUT /user/password + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setEndpoint("user/password"); + request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/user/UpdateProfile.java b/examples/user/UpdateProfile.java new file mode 100644 index 00000000..d86d6523 --- /dev/null +++ b/examples/user/UpdateProfile.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update a user's profile +// PATCH /user/profile + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("user/profile"); + request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateScheduleSend.java b/examples/user/UpdateScheduleSend.java new file mode 100644 index 00000000..5f8c5d09 --- /dev/null +++ b/examples/user/UpdateScheduleSend.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update user scheduled send information +// PATCH /user/scheduled_sends/{batch_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setBody("{\"status\":\"pause\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateUsername.java b/examples/user/UpdateUsername.java new file mode 100644 index 00000000..470dfb1a --- /dev/null +++ b/examples/user/UpdateUsername.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update your username +// PUT /user/username + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setBody("user/username"); + request.setBody("{\"username\":\"test_username\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateWebhookEventSettings.java b/examples/user/UpdateWebhookEventSettings.java new file mode 100644 index 00000000..13b61488 --- /dev/null +++ b/examples/user/UpdateWebhookEventSettings.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update Event Notification Settings +// PATCH /user/webhooks/event/settings + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/event/settings"); + request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateWebhookParseSettings.java b/examples/user/UpdateWebhookParseSettings.java new file mode 100644 index 00000000..bbb0b8f4 --- /dev/null +++ b/examples/user/UpdateWebhookParseSettings.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update a parse setting +// PATCH /user/webhooks/parse/settings/{hostname} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/user.java b/examples/user/user.java deleted file mode 100644 index 9c5ff95c..00000000 --- a/examples/user/user.java +++ /dev/null @@ -1,575 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Get a user's account information. -// GET /user/account - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/account"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve your credit balance -// GET /user/credits - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/credits"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update your account email address -// PUT /user/email - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("user/email"); - request.setBody("{\"email\":\"example@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve your account email address -// GET /user/email - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/email"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update your password -// PUT /user/password - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("user/password"); - request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a user's profile -// PATCH /user/profile - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/profile"); - request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Get a user's profile -// GET /user/profile - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/profile"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Cancel or pause a scheduled send -// POST /user/scheduled_sends - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/scheduled_sends"); - request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all scheduled sends -// GET /user/scheduled_sends - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/scheduled_sends"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update user scheduled send information -// PATCH /user/scheduled_sends/{batch_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/scheduled_sends/{batch_id}"); - request.setBody("{\"status\":\"pause\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve scheduled send -// GET /user/scheduled_sends/{batch_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/scheduled_sends/{batch_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a cancellation or pause of a scheduled send -// DELETE /user/scheduled_sends/{batch_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("user/scheduled_sends/{batch_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update Enforced TLS settings -// PATCH /user/settings/enforced_tls - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/settings/enforced_tls"); - request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve current Enforced TLS settings. -// GET /user/settings/enforced_tls - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/settings/enforced_tls"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update your username -// PUT /user/username - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setBody("user/username"); - request.setBody("{\"username\":\"test_username\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve your username -// GET /user/username - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/username"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update Event Notification Settings -// PATCH /user/webhooks/event/settings - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/webhooks/event/settings"); - request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve Event Webhook settings -// GET /user/webhooks/event/settings - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/event/settings"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Test Event Notification Settings -// POST /user/webhooks/event/test - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/webhooks/event/test"); - request.setBody("{\"url\":\"url\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create a parse setting -// POST /user/webhooks/parse/settings - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/webhooks/parse/settings"); - request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all parse settings -// GET /user/webhooks/parse/settings - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/settings"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a parse setting -// PATCH /user/webhooks/parse/settings/{hostname} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); - request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a specific parse setting -// GET /user/webhooks/parse/settings/{hostname} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a parse setting -// DELETE /user/webhooks/parse/settings/{hostname} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieves Inbound Parse Webhook statistics. -// GET /user/webhooks/parse/stats - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/stats"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "test_string"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("offset", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From 527db212b201fe56feaa192fe105d03d3a47fa44 Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 3 Aug 2020 22:30:09 +0000 Subject: [PATCH 304/439] docs: Update templated markdown docs to use new default branch name --- ISSUE_TEMPLATE.md | 6 +++++- PULL_REQUEST_TEMPLATE.md | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 68630383..78ecfbd3 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -1,5 +1,9 @@ ### Issue Summary @@ -21,6 +25,6 @@ A summary of the issue and the environment in which it occurs. If suitable, incl ``` ### Technical details: -* sendgrid-java version: +* sendgrid-java version: * java version: diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 215059a9..a8681802 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -23,7 +23,7 @@ A short description of what this PR does. - [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) - [ ] I have read the [Contribution Guidelines](CONTRIBUTING.md) and my PR follows them - [ ] I have titled the PR appropriately -- [ ] I have updated my branch with the master branch +- [ ] I have updated my branch with the main branch - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have added necessary documentation about the functionality in the appropriate .md file - [ ] I have added inline documentation to the code I modified From 915c5ce8ee2aefef13fda586d979faffb0bbd1e6 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 5 Aug 2020 19:24:28 +0000 Subject: [PATCH 305/439] [Librarian] Version Bump --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0306fa78..1d85f90e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,20 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-08-05] Version 4.6.3 +-------------------------- +**Library - Chore** +- [PR #539](https://github.com/sendgrid/sendgrid-java/pull/539): tidied up a little. Thanks to [@RohanTalip](https://github.com/RohanTalip)! + +**Library - Docs** +- [PR #370](https://github.com/sendgrid/sendgrid-java/pull/370): breakup examples to their own files in examples/user/user.java. Thanks to [@rivenhk](https://github.com/rivenhk)! +- [PR #390](https://github.com/sendgrid/sendgrid-java/pull/390): Update README link to avoid redirection. Thanks to [@Rolstenhouse](https://github.com/Rolstenhouse)! + +**Library - Fix** +- [PR #643](https://github.com/sendgrid/sendgrid-java/pull/643): Replace `bcprov-jdk15to18` with `bcprov-jdk15on`. Thanks to [@Stephan202](https://github.com/Stephan202)! +- [PR #642](https://github.com/sendgrid/sendgrid-java/pull/642): remove the content verifier. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-07-22] Version 4.6.2 -------------------------- **Library - Chore** From 7e64e544da77ae06c518cf1353d553f54654e9a1 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 5 Aug 2020 19:57:17 +0000 Subject: [PATCH 306/439] Release 4.6.3 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 8 ++++---- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b1fbad85..ff3ed35e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.2/sendgrid-4.6.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.2/sendgrid-4.6.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.3/sendgrid-4.6.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.3/sendgrid-4.6.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index 1efc9339..58258487 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 07/27/2020.** +**The default branch name for this repository has been changed to `main` as of 4.6.3.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -41,7 +41,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.2 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.3 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -69,7 +69,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.2' + implementation 'com.sendgrid:sendgrid-java:4.6.3' } repositories { @@ -88,7 +88,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 501c5915..5776278b 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.2 + 4.6.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.2 + 4.6.3 @@ -274,7 +274,7 @@ com.sendgrid java-http-client - 4.3.3 + 4.3.4 com.fasterxml.jackson.core @@ -309,4 +309,4 @@ 1.66 - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index b5e7de29..bf3e1957 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.2"; + private static final String VERSION = "4.6.3"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index abe8349c..b1f88f7a 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.2"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.3"); } @Test From db5afa25a73f08c7a3a07e52dbed24660f079abe Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 7 Aug 2020 12:56:27 -0700 Subject: [PATCH 307/439] chore: update GitHub branch references to use HEAD (#644) --- CHANGELOG.md | 6 ++-- CONTRIBUTING.md | 8 ++--- README.md | 32 +++++++++---------- TROUBLESHOOTING.md | 2 +- USAGE.md | 2 +- USE_CASES.md | 4 +-- bin/com/sendgrid/helpers/README.md | 19 ----------- examples/mail/mail.java | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/helpers/README.md | 4 +-- twilio_sendgrid_logo.png | Bin 0 -> 14596 bytes 11 files changed, 31 insertions(+), 50 deletions(-) delete mode 100644 bin/com/sendgrid/helpers/README.md create mode 100644 twilio_sendgrid_logo.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d85f90e..48fafd67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -114,7 +114,7 @@ All notable changes to this project will be documented in this file. ## [4.4.0] - 2019-05-20 ### Added -- [PR #500](https://github.com/sendgrid/sendgrid-java/pull/500/files): Update CONTRIBUTING.md - using gitflow workflow, development branch instead of master -- BIG thanks to [Alex](https://github.com/pushkyn) +- [PR #500](https://github.com/sendgrid/sendgrid-java/pull/500/files): Update CONTRIBUTING.md - using gitflow workflow, development branch instead of main -- BIG thanks to [Alex](https://github.com/pushkyn) - [PR #521](https://github.com/sendgrid/sendgrid-java/pull/521/files): Updating prerequisites -- BIG thanks to [Rishabh](https://github.com/Rishabh04-02) - [PR #495](https://github.com/sendgrid/sendgrid-java/pull/495/files): Add ability to impersonate subusers -- BIG thanks to [Rohit Tarachandani](https://github.com/Rohit-T) - [PR #569](https://github.com/sendgrid/sendgrid-java/pull/495/files): Twilio Branding + CLA Policy Update @@ -231,7 +231,7 @@ request.addQueryParam("limit", "1"); ## [3.0.9] - 2016-08-24 ### Added - Table of Contents in the README -- Added a [USE_CASES.md](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md) section, with the first use case example for transactional templates +- Added a [USE_CASES.md](USE_CASES.md) section, with the first use case example for transactional templates ## [3.0.8] - 2016-08-09 ### Fixed @@ -250,7 +250,7 @@ request.addQueryParam("limit", "1"); ## [3.0.6] - 2016-07-26 ### Added -- [Troubleshooting](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md) section +- [Troubleshooting](TROUBLESHOOTING.md) section ## [3.0.5] - 2016-07-20 ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ff3ed35e..7218bce9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -88,7 +88,7 @@ source ./sendgrid.env ##### Execute: ##### -See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/master/examples) to get started quickly. +See the [examples folder](examples) to get started quickly. Check out the documentation for [Web API v3 endpoints](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html). @@ -124,9 +124,9 @@ The interface to the Twilio SendGrid API. All PRs require passing tests before the PR will be reviewed. -All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid) directory. +All test files are in the [`tests`](src/test/java/com/sendgrid) directory. -For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. +For the purposes of contributing to this repo, please update the [`SendGridTest.java`](src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. The integration tests require a Twilio SendGrid mock API in order to execute. We've simplified setting this up using Docker to run the tests. You will just need [Docker Desktop](https://docs.docker.com/get-docker/) and `make`. @@ -196,7 +196,7 @@ Please run your code through: ``` 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) - with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. + with a clear title and description against the `main` branch. All tests must be passing before we will review the PR. ## Code Reviews If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, GitHub has some great information on how to review a Pull Request. diff --git a/README.md b/README.md index 58258487..092a8ffb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -![SendGrid Logo](https://github.com/sendgrid/sendgrid-python/raw/master/twilio_sendgrid_logo.png) +![SendGrid Logo](twilio_sendgrid_logo.png) -[![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) +[![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=main)](https://travis-ci.org/sendgrid/sendgrid-java) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) @@ -16,7 +16,7 @@ Version 3.X.X of this library provides full support for all Twilio SendGrid [Web API v3](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) endpoints, including the new [v3 /mail/send](https://sendgrid.com/blog/introducing-v3mailsend-sendgrids-new-mail-endpoint). -This library represents the beginning of a new path for Twilio SendGrid. We want this library to be community driven and Twilio SendGrid led. We need your help to realize this goal. To help make sure we are building the right things in the right order, we ask that you create [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) or simply upvote or comment on existing issues or pull requests. +This library represents the beginning of a new path for Twilio SendGrid. We want this library to be community driven and Twilio SendGrid led. We need your help to realize this goal. To help make sure we are building the right things in the right order, we ask that you create [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](CONTRIBUTING.md) or simply upvote or comment on existing issues or pull requests. Please browse the rest of this README for further details. @@ -99,7 +99,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies ## Hello Email -The following is the minimum needed code to send an email with the [/mail/send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) ([here](https://github.com/sendgrid/sendgrid-java/blob/master/examples/helpers/mail/Example.java#L30) is a full example): +The following is the minimum needed code to send an email with the [/mail/send Helper](src/main/java/com/sendgrid/helpers) ([here](examples/helpers/mail/Example.java#L30) is a full example): ### With Mail Helper Class @@ -132,11 +132,11 @@ public class Example { } ``` -The `Mail` constructor creates a [personalization object](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/personalizations.html) for you. [Here](https://github.com/sendgrid/sendgrid-java/blob/master/examples/helpers/mail/Example.java#L221) is an example of how to add to it. +The `Mail` constructor creates a [personalization object](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/personalizations.html) for you. [Here](examples/helpers/mail/Example.java#L221) is an example of how to add to it. ### Without Mail Helper Class -The following is the minimum needed code to send an email without the /mail/send Helper ([here](https://github.com/sendgrid/sendgrid-java/blob/master/examples/mail/mail.java#L54) is a full example): +The following is the minimum needed code to send an email without the /mail/send Helper ([here](examples/mail/mail.java#L54) is a full example): ```java import com.sendgrid.*; @@ -189,23 +189,23 @@ public class Example { # Usage - [Twilio SendGrid Docs](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) -- [Library Usage Docs](https://github.com/sendgrid/sendgrid-java/tree/master/USAGE.md) -- [Example Code](https://github.com/sendgrid/sendgrid-java/tree/master/examples) +- [Library Usage Docs](USAGE.md) +- [Example Code](examples) - [How-to: Migration from v2 to v3](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/how_to_migrate_from_v2_to_v3_mail_send.html) -- [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. +- [v3 Web API Mail Send Helper](src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. # Use Cases -[Examples of common API use cases](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md), such as how to send an email with a transactional template. +[Examples of common API use cases](USE_CASES.md), such as how to send an email with a transactional template. # Announcements Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! -All updates to this library are documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. +All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. # Roadmap @@ -215,18 +215,18 @@ If you are interested in the future direction of this project, please take a loo # How to Contribute -We encourage contribution to our libraries (you might even score some nifty swag), please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) guide for details. +We encourage contribution to our libraries (you might even score some nifty swag), please see our [CONTRIBUTING](CONTRIBUTING.md) guide for details. Quick links: -- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) -- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) -- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) +- [Feature Request](CONTRIBUTING.md#feature-request) +- [Bug Reports](CONTRIBUTING.md#submit-a-bug-report) +- [Improvements to the Codebase](CONTRIBUTING.md#improvements-to-the-codebase) # Troubleshooting -Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java/blob/master/TROUBLESHOOTING.md) for common library issues. +Please see our [troubleshooting guide](TROUBLESHOOTING.md) for common library issues. # About diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index ed1090d1..bc3b1361 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -60,7 +60,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies ## Versions -We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guaranteed to be a breaking change. Changes are documented in the [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. +We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guaranteed to be a breaking change. Changes are documented in the [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. ## Environment Variables and Your Twilio SendGrid API Key diff --git a/USAGE.md b/USAGE.md index 155cc1e6..6b0529dc 100644 --- a/USAGE.md +++ b/USAGE.md @@ -2693,7 +2693,7 @@ For more detailed information about how to use the v3 Mail Send endpoint, please ### POST /mail/send -This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/master/src/main/java/com/sendgrid/helpers/README.md). +This endpoint has a helper, check it out [here](src/main/java/com/sendgrid/helpers/README.md). ```java try { diff --git a/USE_CASES.md b/USE_CASES.md index c74b1264..5af8f674 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -223,13 +223,13 @@ public class Example { # How to Setup a Domain Authentication -You can find documentation for how to setup a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/client/USAGE.md#sender-authentication). +You can find documentation for how to setup a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](USAGE.md#sender-authentication). Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). # How to View Email Statistics -You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#stats). +You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](USAGE.md#stats). Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email. diff --git a/bin/com/sendgrid/helpers/README.md b/bin/com/sendgrid/helpers/README.md deleted file mode 100644 index 9b99f325..00000000 --- a/bin/com/sendgrid/helpers/README.md +++ /dev/null @@ -1,19 +0,0 @@ -**This helper allows you to quickly and easily build a Mail object for sending email through Twilio SendGrid.** - -## Dependencies - -- [Jackson](https://github.com/FasterXML/jackson) - -# Quick Start - -Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) (make sure you have set your environment variable to include your SENDGRID_API_KEY). - -```bash -cd examples/mail -javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.9.9.jar:../../build/libs/sendgrid-4.1.0-jar.jar:. Example -``` - -## Usage - -- See the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) for a complete working example. -- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html) diff --git a/examples/mail/mail.java b/examples/mail/mail.java index f35989df..ada390c2 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -55,7 +55,7 @@ public static void main(String[] args) throws IOException { // v3 Mail Send // POST /mail/send -// This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/master/src/main/java/com/sendgrid/helpers/README.md). +// This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/HEAD/src/main/java/com/sendgrid/helpers/README.md). public class Example { public static void main(String[] args) throws IOException { diff --git a/pom.xml b/pom.xml index 5776278b..cfa43c93 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ The MIT License (MIT) - https://github.com/sendgrid/java-http-client/blob/master/LICENSE + https://github.com/sendgrid/java-http-client/blob/HEAD/LICENSE repo diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index 9b99f325..b9128ff6 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -6,7 +6,7 @@ # Quick Start -Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) (make sure you have set your environment variable to include your SENDGRID_API_KEY). +Run the [example](../../../../../../examples/mail) (make sure you have set your environment variable to include your SENDGRID_API_KEY). ```bash cd examples/mail @@ -15,5 +15,5 @@ javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java ## Usage -- See the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) for a complete working example. +- See the [example](../../../../../../examples/mail) for a complete working example. - [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html) diff --git a/twilio_sendgrid_logo.png b/twilio_sendgrid_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a4c22239ac0cc70e10a51f828390d713edc8a29b GIT binary patch literal 14596 zcmY+rb8xRQyER$)VFC_ zP*x5W5D>7Im8zzzrkpIdiGv-zk*R~R8NH{S<3BbK5U(fqzowm;s}Z56ovpnKwSkk{GNoLgB`{C}qZ>+um= zy1F`YGcb5~c+h*W&^tI=Ffeg(aWOD5GcYsL{bSI%c-gxedD7Xtko>pE|ED8r=3?S( z<>+eVU{ClTT_a-$H&;Gl;{O=^@Auzvx>}k4|4#NU|C83g1R4G_!oWn&$nd|~|EBW( z2jy09wle$Y{2zUOCf@&I{y*6N`0z6P$Nc{a=D#!jFZ5rk{4l%>|GRAbFtURbT0lS? z=u)CWs-D2txzIVeYJPzH>z&NMFroF>gqd)n(Atcq;HII~wy9*k!yA>|8^$f_G}3-L z#|ObWRV}5h2UT_D3@!1h7&hY|9omGrB$N=Ovci&@p-4>>ECBw=kFVTQE{_{pj}v*Q z=3%bCxu;$;E-OE84yOU%r@XZ;YoWoXoME01Q{V({Ii7ik++BEMF1eiYx~tD96!&;H zAY*T5s5a?*rS=MWY(FBp^d5(=kN7qkw8uMc7z{7u4(re8HwsR~r-!%%+AlUYxha3> zIQgM+vU5qj+z&Un2+C?h&q~Zz23JU<>>YJ)TjQ$I{hL}^*eEe#_CwcU?r1Ef(b z43<>i=T3|pQl4rb?y5r5G9UZ0IPG1qxL5hNd!M}Y*H}-utxi6@dJjLb?;Xew{fW~l z8Xi;QF4OEvYkC(~Fw|ghd$GfTkOGkqQtCZ>B7w4GW?&!WV0Fj(CLTXW^yvdqFF!Oo z^&LAfU(>^CU4CCP4KFP*I$wE3UG~w$$jGmEKgQLb22ieY8Yf+L#n@>JIG(V^V!3r( za-|IOlDD?9pXs4Us8ANCX1hFh+iiM+E`~E=pSOSWM7|$}KV;}8fjv am?oYtaj-7XJQ`J66!_Sj=jUn5tuKna3~mXZX-2A`EbIC6u^K) zASzj)z$$(2SO#>I>dMPU7TujHat(5OcWJ;J| zum+Uuq4?~8OS)6gxPpy5 z58kqGT!z~$u0Qg0GA6xQ8p9*;%eI)|8v}&QMjS8nQo_ydwwteCD%f6d=eci#p<-Qo z-~X_ENq*=Vp|IIt```P31`S1&FA}+M@V8%$#J`Z?vZ%E#KJ$*n_0ZvN-1=J`R+i#l zuC@`~!-S8sS8KNd5BhDv2LJWJP2tEOPCk0zgzHM?^hfaGwwQ>0OIavNc{74Opc|`t z;&lgvs$M^%U@q$vwM7hz2FGv|T=NKN(j$tx0)v;RseV1<-SYV-rcgh3#Mz|PHe2&i zfA9X5(Mx#k_*{}=A?Oy=@?0&xsWc9E2tXuqY)5t@URDDuXb7$JjZ!ytOUcvG#*i|@ z04LMR!h-f806Xx^^9X+^Dw=iLI*NdL)p?L3$sKq3!=aGPv-0@G(Js~KuJRF0M_tw6 zv?#csA%*mDZblifnm;O=mq>b(X^B($qtAD{-ZYlW?dGHpa5d~0^X*s2S-j@aix^@A z0}C38E5|>{WD2iTjV2CXmQqy{(MKi6Q}jhN1_PQbEi&=VT7P(o@9?h$E^@kkNI8-> zJM{=cZMUGw!<13Y!x}uBFZTIe{Hjefe%#m`rY+TZxLHI)sYX~*3~b!1sFA2k3w|_i)L8SlE|8JdkH0pD}<91(kP}{q9tZ|O|s?L2s(V* zxtHE-w3NHaEF&*AFV@4O5Etzq6u=87nnMNYYZJ|#uG*&frTLB5_~B2x^M~>0dx$iO zfRWnWI`Ew;)Q#EHQ%jZJ;T+DTk8!UlOOTCLudVKgeNOIx4)Ak|Kz4nmxiBJjZavs@ zyx(JfA=n66YFr#{VDvz*wXi&J8)}sv8%U!|eTcW<-LeBOW~2DN@8~H)C{hq|b~KS1 z)MV6LGBYRgG1tV&Q#K->on5)?X5m2+sXD%!zE^-#F|Vz1axBg5oQGUg>ykjX=W__18f zGGojP)}Y1c+*DEfy1Txm07J+t-+f=vAV@;eVS{Skoe!Z*Fnt?4zld#gJMd2t(!cM? z%V)^oa>dH@YEmYqyoDX&G@ss}Az15^by{T9jH3AKSZV>)_;;3#TeD>BY(2bj6U)<{ zbrkj?{?=<(y_?j*>L;(N;|myW1XE=H+j4q!=mEG`yUoB^>WG!&19x+SJIi9Kk2Y$M zpq||?1vky!85bvG#|L4!mwD>=Th$C9!U*aqyng`oS)rBIvFM01vO2V+vO@l)JW=(q zwbOpl;eH?)zYU?|vN1SDL{sD-3^&hZ8?rP3L3jy;UVX4ExS=D{D3Li-c(Q2Z} zN@xp>AMF>Vfym<^YPNLWRtEb<`HAFu)!@w6SlVMp7uxpDj(rC9YW4HIU+EXmy|K*7 z#n=0@ir4N*><(^kvxDeEUis2`zizG>YuR;ty3F9KP-&A}SHnkP`DOpSK9)e8=O0DI z4->5ej+T}$(}O2iot)Y)jk#;8zyl!ffsksg-OSQw$=zZFa{t%aTQ;!RW-dyot(N1} znfAjnZs(ml2m|s|keq(u_?;_Gx!Ir=q!w6i;UW}|3g*i2HJ@7MJK_pFha*mkowuv& zS^tY+np_a;fI@n@fwXF6bZ>z_4I&?#U9sA;J%>K4%9nn#o?bD_uAp@NA>q)S9EK73 zPO+Sxgrr@$d}{&Hdd%O7@kBaArR7RCLg#*Dd7OA`$)HHA`g7W*%JIM68Z&+`X`#zY z_2S*`&SUX3bT{FhHmj#hZXte-Rck41HvgS0xfFcUtr((4fZj0C7V;%j>k`MNUd(2< z%i7)9n#$=rh^X;YDSOZsQ4ctV)9jsC?EGl8!=_ypra6v)<_;UZ+ucDr3!?2YKzQ|C zO=FWkjKr2d^{*%liMAGbNc?X9(|}iKNv_-nN!)ZZAyVgLo9KG;&7b_9kV`<`>$0o} zZ@wJ{zY8z2=NKXA=d%CfP8s&&1|9HV<>rO0B*u$bOr zN2lZhdzXDm%v-2-W^97B%)`5k?O+0OD6_?8dYM()ENeL^_-4UyOim?dsj$4Dp-KU= zISg;Gs!WAi{_A*$CY~T)Rc;bNPwq>0(ssWN`Pm2V0zkiXn}R6+l{O$%=rd#UVenWv z;57nKVqQ~sjyYI55LuDO3IU}yJU=w51R1J~E72*WNVL`M&V$ zCV4|L-dHDFC|1QH|EH7lZ|=1Blj~g_wocmmSx_pUaA-G>wEG@x=gecU+sFaR)O+$C zl1Jy$Gc}2%ALy$9X)4jm>TJ8A?q8Q#6AfK4;-(4+AB&s>z0)K)n=}C_A2KJJ+mB`e zlYaN9cr%%+a^%0*QU|%mWPj0QYwAq4nEOIPjq$tPx~KDS1qL4`7`Rtxy&#Iqs0cvK zYr}(@6j~w(gUcKx$DY7pnV|Y$O}V0(^9Kw+8EEDBhk4%h%C~Qc*bN`5y(|uUeR=CC zLuP{m$nZu*b3u@U;S@6YZ)1l&1R##}gEvnt5vkLPrQGgX{KeQ{c;-18U!E;@zCB|8=X!1_d2z%$0+bE7oMs- zXRki^6=u^ochCRfdfhWxo$Uby!?VEe0=T8z5 z3Bo1{V`}DNbw#RZOFt_(y?X&sD|?%I1;U<=QOs&T&y{eU=EqWNlwA!WnLoWFfmH;p z2O$P0?a|)DIQ$MguOL>hL{%y|OqI=J`f)&Ecw>`L(390NpJK(((&ph`HYxMLowe60 zmCt0ub(KG%tP05Gb@~39W;x9*YG`_VlHQKk8^yW1d+D0GLS`J3=hCiM`@t1+mApmv zPo!0Ls~I^c93()KCu#38${qMrR4aJ-PJod-+YI*oMp;6oA%Yvo5_h%+(HM>>?r8OY z*||7MyK}OnN#(q}l4XEdkt5>d?Z;g5dm6IE#tky~47h)khN5VTxlKeG-gWTJ&V zv>m4LgNKRA;kbl7HT$dWWQuUJlhtWoMSyV>f^PDjQ---)OOf43StEL7C4r6Bfu9DBdoH5IU> zBg>QpVxr;9m!87V-IchZff+ODpNKs-%&G4__fQVA&lzJd&$(T>1s4!Y(riWeGH7sd zT!kDQe2F9b%h}AsAr45rQZ;i13kAC!>z+3GFTvF3#dr}&>dIn0JlmpD@aL4w+|ZM4DgM<5`remb>jP&_mj(w+~A?enc) z4$EJM1FVrs`LtY50HU{Pt!@XLOP$3qS~?1(C2iWOH=#$wWqe!lL8f~#P3`)NPuv8? z;)N}rY^|Y5?(a~&2s^T3IKY991>?rjz-M+rL~Je7ZTmd-Vb{*Ji~kqco75e0OHdgZ z^kSQ@>J6>EZqwG)1E>V#nCa$2NH@gpTKDa=$Y0zJGmglRGlzfD6)wJLe7oZ%d2FEuHguMCUO?mRWMAQP7OI6PPVZ#ln0q7XTSD-}-)y&guNzd5 zR`@MPK(-zxEh*_fVAY*CQ4X{PhmYED#sj4C>TWcfs`jIxn1u+o|M&6X-I>*RcuK@U*d7m=~ULWyK~>A0{OjF6jYLy{V7R1urxmaVV1G zPeq^>W{gm+)ulG)vybeq!sb%LBx{0Z70DtM!g`H{Z`N&}$NTKiy%}73dj4fc-7PB) z+q7Nqu0>CmV#2dgYygPdsk0cspSKAkXp!y=jx1SBYIyqygm%7Hjk;+@*iTQOJ~ja^ zQkJAt`~$c?qHsIxe52R$9?2qcYSuK{$fWEjixrK=A~T4+Fa@6H_=wRYE*dKs+`3fr z-_Qf6y;pCHX)xqAU^96F!kNF*m}!xrF((W~L46)Op5u+8&f9Moib{^}iX6@^!z8tO z7Hse&E$%`W4Y~FXgme;{QQ|~=3Jp&n*n59$2CCeB)UxzVEI$?lUT9Z(j?a6>75p;8 zYvQ$&6Csg;N`>C@N3glc<2jxrRkrSUY}!&+uV~rWijI~@D&+i@j$#Kk1dJtzDYdT({P3$n{0=reg;cBC_WZBpOqY^*>cUIYu;+^V&_PYEBX;=I8<)zw(9>uwWd z-h#BgacKE2@{yEV197C}@~yj@<|`J(ubCHI3DZpwbgFe0%ex3r&1dbsAtVs}0{dM; zeg-|w93!KbznL$mJKA+S{SP;e4U|o?ENI)u0X_MK0HD-ZH=TJHA{3k`95+_)o2loj zv~PL1jHYeFa`Y23lotR6ewF%YEmGT*u46GSSbp>(16{!=t`5v|2gkiqsDcIKEz`aBFDM zVYm%)j+{YBPkB}K;v$XFI1a@fw0LR$-;fvSCl`Q@9f zqCrKXY(`JJm1z6nE6P}&I`sj$0&qjR4|Ll&Uu&GU^H2dN=r3Os5)hDf216`=X6lcs zJo*bBJ+ZOYhR*680DIi^*b&#GLd4cN^X0XPnft`NK69?{M&Y&RZVwwwP9DsYWxXNe?Y0RFBKq5O{;6W=TrvdmE z`B%jvJy+-C?Ewvy{$Qq>|CXA6)DX1?Qz>T>0}I$xA&uZ1r`yPPkSxvF_6gdoqY3@P zNr?+RH?u*s`CRoP$}Atkkbl3XJt(^ZgucC7!)r=2U60K9vu@4HlegNb2}9o^w+sG* zsj^PASdDMT>WHa)GB4>JkEzi6e$a`FS28jwtuTa#vKmvvzS z=n9TlgtyQ7+ah=&%ZhL1RQ6RyFsQ?7K{|TKxS+#cqxFt>CUWj|^o7KJ&0?3&>mvjU z2Mle}Zx9xc6Gc|6soJY=p!}EAbsJ1?IRfjNf)WM!<2xe9c~w;V%VWx}?+zM9pag(^d->v#EMq9`{^DQF>Jq&9VK}wTSF%g?QWoE9?P-}V7GyJ^y9bP; zi>{(^X^=KgLlW9OK~#4d|IWvbOf5TEHMoBwH}#sc@}y0nvY0H3c#+da1kxmw#0DQy za*zQGxL!#WTWVxW0ohEZfC|Wfch-(?!bz)^I(xZV=OWn!(PxDCn*KGB;t)Bf!b1}? ztJRYz=Yt(7fiWxHXZ8~2SjzNl3=$4!=Me4hnCmGn^L;qllyIb zv>OO0lfVijUX@$8V9+`wh+k7CiYH7+ec_gCyw^MTOIbetYGk>5NV+nn!rei^;N`uF zUZ_g|=uzAwN*jc7Z?at17P~!mSXO!xv~FS-2az7W2w?p+gkY?LWFbkS7Pqr_GHiLj zzrrW3ZhZN$))m_M%OAZa)PjL_g#T{7w?cCHTD0_fHWz>2EpM|ern+#JU)kS06l*6`R7h!qwQ2o{>)YOW-wmgbWQ)QcSX0ij7Etyi_##_{B~~T z5ck;uiQf|YdFWR(5C-c#n)}>+exObAn?yU|)?mr&T=tr8z18yC?j`JBud{TGn+a$v z@%SZ@GO#fv^}B7CDYoT14l4q92d*B$^jXbuu(^15>SfyIMtiQzm3QLC518%vmNN^m z2qYt^wQU6~J3}EzV73KNh@g~*^l}KLBoOl5LHC(YV6V}>ryM6cx9;%y8LpX~Auc2u zW%v;K=FUL~g&Rbu4kAC>IZ@m8UYSLS!sf+x!748% zOq-G;Sm+~EgB2}xuax}?6Ug*gbT_u$Mc)JhKZv+`Th0#9Nd8EtBIHk5r57Hb&cCJ)#XNn2nQeXX=752y`pm z>}Be_#o^ z5U#jTM_S?%Ml-_`HPZ`PQim8w(M&Kr@e3L-+<+KyySV;#kki#uJel2jtI+0we=Uwd z5tr~fyzY_&axsXqLbkH!jfozHvoYdCkH3w@gM6|-y2&?ucTe0#c7s7V%(&Q2da#XNCY<_7n#5YXRzB+p!Dxj54@IaE0?a^C zQIhD|^3;K6`U0cyAcpc2eh9+6`Im1<0BgxR63Ln6On_2!|5Vflk>&L_Fvky(TG)Qc zHq9OFG$S%OVZT2D&K4w$gPF+yl;Z7kNmn9OVE2w{zQ46h9=j{k+VtDQ&FlkhUE2W2 zrsy=voV#wiec3Z&`_#B0nL}uc0c=W!a9gP5MKQejjHJr0{IJJpZ-zf|Xy&d)pc*KO ziV9?vRk>TE^kQ~S$+^8@2SV2f#(P|e<9FcuZh zFtnn4&S}1u9aiQJ6uDnWFH3m+@o|UHP^5ZA4aB|Fx}L5_tF{voB!Tt#Iqnf3fB#(W z;#QJg_u$r|UW2s2pLaB9-tmCFY?VK)@q^EIeBJ88$j#1A8Z9Ki15YQk?FSN;U2EDL zIjOic^2&m;h@1lQd(K6s=`fKBto%J*-|0GOKh1w=Bn zATQKVJ<4HxoAjQPZ7vzXjM>OYRcUraLjhim2pP4i;GO z>8wI7KOmo@TBjijV7tf$Wzw`sGfFlqk-9Vf$9HCu|JY=A8y0xG`&m#vzuPXXz6uKA zgGx7_de*e!BE!A+v<4KqpmI_f=Qz(oUojqdPFczp&{e47>U{cq_(c`8 z&QUga#-N+*$6Q!!VZC;x3gQRC;KNY4Ho?fNI;jjeg74BkCk0$xh?g%Ke9%Lzfp1?V zvSt4TJZt2U`n1%ek)ja;m`gG@EK#~*$;=X|3aA`z*XlRKG@MXMI09x){BqdO*u!{2 zk<&iG{HO?h(cy%@dI$)Z!G)SHb?RwmGfknWj$rU+;7w*Xg6)-~pm4 zSmR9os5!zj%O)Kd^Kslbc28}46>#?c2DKY_+k;(5z!&jzdC!tVdtDA2j?jh&75trA zmp7zZ_;8pM*$f-*8~f_;%F1Ze`lsHo2tK4Hzc+!MS5C9A?=dhK4*d-t0BcHw!uhcX zbL7?$7#gZ{#x&A=B~EOv`i2zKty-Rgl#)a{#v)d=AG>XnY^i7A-1e1=*PMGJeBw;R zQaH(EveeOH@3)m`u@wk3v~@~t<`S)HkFx8oAS9AIh*gRA`_eLpL>-p(?_uyW&=ayu zr*NV5H!d4phq{K9?x+QU8l1VSZ?uCvE~?bWW=+QyBoct0Zh)swj>CRV;zt-GnfG>?da|PAKl5=4%li$=3>W+CAB@6ARJ?~K&_$@ zZ4R$LP}-qo?2^}&-`Hw-st@(SA9Z5JHi6TUE~(g93oaN=bxI-S?_g4hrUuP76>gLM zwGZrv3U-%?ERr;pwJSb<-(24RfLLb0uN4JRsXUONiQu1B$qTEgX>(xYOYyG_AQV?K zm=l`f{U$GYVm_;|M_~{L73j}U$}Ev|6V!7v5pXdV;#QWM(E2TzEUYwURqcs^SG7?{ z$_M%>l*U_%HU;rf(d`eKYRUssU2u^kE29D|dm+a7je^{a)wy9AP*N5dYCK?PRpX$$ld5j51t_vaJC zqWu~{NJC>7MVH#{989*%`n1t2yeS({Epgg=PHKoXh0TJAD#cP&7JVJaZ7&sbtW*-o;RC9tz-a2 zwM9jgv$4Tl`53rpd{Ny@l&T1|Z7|^3D+GZ#ID%ZV=F^Yjr@v~+fY{16&3b&i#MrOZ*q27`kMaFRK#)qzE56-3&VK>39EL_~SYa}1`$pzciMdl4r0s^W^~1GFc)CXLhG zbeB6$WaW?54NScX+VsJ*e!&18y;lW`R4uQC>q9L|e6-S9##1S^9t0bxP^#I(S=P?) zb!~3vv7MQ|pDTve0KbWbI0?S}x#odj_0pFsm>fdUR5D#PIwy!pU9Wu2gEUncfe{y} zr{Rr3m6CQbf!w&TvNvc|WD`x2S{&r&0YLML*)_{bz4~eim^thgo!a83P)HVX6_D9@w zV+Vyn@`02kiL)WLW%deYZG)doW!ql@c~0f{85L%Ss~qtCQXg5Q)2)kI)J@L7k6Wlm z$>`Bd1e#YmFigg-dkkFznytA%K(C%eS^5S=JKa@)(I@{HmZUpg3)YXq{7rlb3HFn2 zlLYID$ILZV%cYr7+>q{p@?vq$L-!7y92@!Vr_e)N97dTwhEj4SG!ba$V2Q8k#*C0< zA|O)e02;8JUuGzuxwIU-fp%w?nMcZc?)98~NZ^&aSt7bgyYtven*h;Ls}Z0lMGGXA zGd+msiKCo7T4uw5s>kJWdB!Sa%{~!3e&K}>m}QO0f>@{6vt7zR?h?zC1EL!4R>#4A zgqSP#j?}eii?Lji)>{>F-5B zpf)!==)k!!Mw3_L)(-I!&mPWSQAy(aB+Q-6w)R3LH;}RytkL2_z``-m;{6@F%&~;` zZR@V_Rp`F3tSGWL2=P|MRmaN03o$Ek$Q9$&05Q%?+f3L5Qjd?KfR5+&>jjSv8J9^4 zdfL}8*E_LQwQohXUsIuyq#`4_=%VL~Pk+_3Ktx^fS!zF1X-;zKLj`#+|IGpjSb6RT zIKWhD7grWDF!xZxAt9%#_5gBa&uvauuTNKmUM^q5`*`xuWUD_wGPllC!Y{J1 zFAbh-rr!V?Y4I0N`iq%fc{sczJUr=))H53GxzR$$Jrf)&F21Umf_R-(-~v|MxLZIP z_H8E@Ml76sSpbJk9z%$!IVX!4;(me!`xzx@S()vZ=JVS3-=dm`1M##+S!NTcwz|dG zcNyYoK$StpS;&`&kRP;C&xxXN?m=>z4pzNq6}pnTOHHUc%(AxuNpCPFu{s}~=-B$_ zD-76BsS}*ie6>;lxXGA=;y|sq*$41wJOmtnh_gO7OMLvYWiFE})P7qq zof1rjYj3%jW;l|#BnqcBLpK}Dfsi7j^XU%_9&C2zD4X;M^7`|G2<3YY)^~Ai?k>N z#85bO62s4^Tieqh^*$`5(fgs3VulnrAmgQNwHX(?&D2CN&V5?`3;umUAF;phQ~jqc zZLg@Y(7h$KSq?$&$K9PFcdTHc{HROv$|9ed{)++G&)qm8T(;Ok9O-$p{jLHM>5z;$ z`3Xk(ujCb@K2-f27s0LA-@ z4A(d(Q$z;tIA5#f(}S_+kCIBZ5Q>|&cKqj|S@lqr{eX^Bw-&UB?NtJiwwlIjZv11A zcBDCOxfOx|pH)g-kFJYU9dM&(q!6=dE`J8B5+MXex@$ad9{}tV<)t z)Hy}PeUqa3kls{$1AvL0qg2e|@vIqm)C4vKG9O6Wz0H=InSUVGy3uj-Cfy}021~na zzHbW0-bx3ij$gPR_}AaD^21*)!LtV^{(TTbMriQbwNn&bJMgjcMFGq8Rjl(MO(;xD zxS)v|Xryj!lt~k#D}(E12F8@Cq?j9k1{(eq%M*Q}%=!^IfDg&5bx{IfIo_n=?6K%x}ES|MrH($;C zLm@ZneN#L{Xl8>UYhHDYo}Ne~hHOeSam{dcwyy{gP&p%ScAM2kN?x|(>gYLo1MLCe zC#W_=S#k_xST`cFldCSv4~8pwX!l+-Onqs?d2Mx6+OwX%o`)NQ_{8dCwn-xj%@UM` zpRDGymJ{n12?)i=96}@nvY9c>dHR!Td(;X{@~4u^=dK2E%{{w4 zX?gI*ks`&cJA(xi_^M#J#5Lk;ZjX7{UAe4wQ@(v0^$xBd@6Tb$eD1ROVgr#uu=yVv z;<(rB)rxSS{ZSadJ9yx>(Ltt0p-s{hb~-Ot83PxqO5zYq5<@?*lFi57+3fNutfbCq z3PlX$Osp9#=8v4wz95ye;6as!yWiiP*SyeUPdlHhHitc@(2A08Q`_gk1c{u!@!9Tj zw+5Q1g)ZuK^%bIJ<~P#LA9tp$hy^C$Vp2u%5E#?kX0nyscBzhzMglqAY%9?CLqbcc z%_J}DOoU$_ZT}=Q6_|s|7*7U#n~pw=G5%F+e)7qoZgh62Fp4p9*AiaNKl-A&66xTC zO92e1CQKsWmpG__<#Ouz)`)%N28?ff=ou?!8^B{N%D+bL9oXu(TyZc~d?YoV&I?$H zVeH@`Ad@4#{8{VrQ{ChEx^>U!dQb&{lN%E()b~p_OG+}=P^?r_OJ2(chU_PQ&-ayE z=Hi-|?c*G0+Zuc)n-Iy@6Hn&E@+Nt6VKBewY8u;3yUZ<)K>W)+3A&D0o=mjvAqc;mARHw-ga5*ghqq}cX`3|`L@~EO^32v z=(?&x^@F1{2zLd0;NDvnc+>nA1UkI#h6utiCWVX_D24B!U9TQ#H6G3$?r0-v0=S_W z8YiM&(1R~<;pzyZueZ;vfU zvBX(Ix=3$oWkS6?;)cE7J*f4SklE9B=C@b+NC)COS`uJeyy^ZP53%3@Ajd`5u=3_9TCZ>&eHz-&D!!O%hG&UqXC0{yr-QJZdcaQG)gs zC1Y4Q_FOi^)r3kO|JA8!#W^5Gu6i2K@dBvB;u)2HX3)t#kI(j=w3?ssOH;;TlF56q zjeow!);}IKnqdvgVaJ81(3R!!B;99NCXZ)W_~!tp$hZ9Njo6rAi4e*7n(J~>(|bM2 zGV4+iQUpSrqK1~zPbFOQ%pnMXl(mBX(o+p%u@21O=;g7bto6XN|GTP9NJ)Z^o&!Jb zr7U1GxDg#-##0UyD3=SF`Zi};=^F3S$PWeV2OMa{P|3Zc@+^0WiY%4o%xU+|#8$ge zO$~NCy$^39*rGZEINux-j+|UZ= zt?gGmtH}w!kOfdi4EcomoVwj@_Fngq%lXFhepMfZ4QBKtnHJG^&ZrT%K7D+el)SSK zo-GLu!nDH#K9>-<(`Q-<03KJ=E8Py+HY`A)bu%OwnH4qb&Hs*}s`NANUKTpO92-@R z%kHhDnnk*f;CQA8Pq3+tCOp&Qmof-bq%28&o#_hN zhF$nYXd1)P3T#|7m{bolb3#+21)}A+#3A#@Zg8v(A1ZxBms=9w+r(x8gYXZ1SrJDhF6VBG69@IJvQVsy+Y$ z>UhmtM;q8P!6b9NA_Y_je$(6_I{PC^TrYBl-nzrn4^MZBO8 zc$T6I7yP=7Jy<|LDUqcMcsjTfmWEG8$T{8nVNv{ZqaGFQq#19p|UOcS1C`_kg$PY)!p zpNO&q$HKCY7e+JL`Qm#cO+;fX{KYq0JpAWqLvISf`q?S2cmlU`D2MS>x#4g|(m-Ux zdfkstpV86yDAPs`1_jBhjHg(RLaaqbV5`?NUv|=lMq_|EJIb9;?7Vwi8-(t7&c)Y}Q6yRIQ!# z)=FYj3qr5mDnccFh;oLtN*zhx5Cf&)nhbOdGbCJQo|7pOArtCKeNs+@CJ>Xq7WQ%?ZdlXOSmKQO;GKY9mY2F{zW5s(`;vIeIPa}3wP;ks=J zI0-8*)gw>kkY0u?=Y}Cm82wara3O7MAao8ZKS*_?#3Em<4IRdA$}7&>=Mh-! zd9$1jrQd?1HjLwc1~#6sOaM}*Zxyj)>2kY+ZRh_m~KMQ2#=62_Q=BxB0KSY|)Y0XL=lCNzh@ z2`Ee{9D*_kBF4GCoYd4q{rkK`DFJQmOuyVy0Y34~(7*4i}rDLG?+8h zSmEeT+?(_4;ZocY_yIxK(+yxk4`64>fCKpv#L4^C8FFD`gKC78<`BQ`*3%()N=vLz zwkx3mN$A>k-;FJ*9hZ5rL$OL1FpRc9Bj6;Q97>j*QeWQ(4fVlj}$5b zhF%7fu~?XbjSu^n8TRKu1rdlVhwkP|MzGxSA9J8+ah+Q>5IzS8ba>Bj!^YTNk&eh} z>H0*VjW%Ie=E!rTnOi}C9kECwnD;Bc?Q#exm&CjBdSe>qAM4Cb2Bh&XYI1v^5Ldfw4?XT2EpIRL;SnVdqQ6%(i9yIwL ntv~W6Y3X9dsR>Z;|A4AGw<(;8DtG?pt)Y~dylAbkVetO}CY4rB literal 0 HcmV?d00001 From 89be5ee274c21e090be0028dde741bf82ad7352d Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 11 Aug 2020 14:46:33 -0500 Subject: [PATCH 308/439] chore: update supported Java versions to match testing strategy --- CONTRIBUTING.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7218bce9..9ba321ae 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -63,7 +63,7 @@ Please note that we utilize the [Gitflow Workflow](https://www.atlassian.com/git ##### Prerequisites ##### -- Java version Oracle JDK 7, 8 or OpenJDK 7 +- Java 8 or 11 - [java-http-client](https://github.com/sendgrid/java-http-client) ##### Initial setup: ##### diff --git a/README.md b/README.md index 092a8ffb..5a575570 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites -- Java version Oracle JDK 7, 8 or OpenJDK 7 +- Java 8 or 11 - The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.3 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables From fe30aedaeffb654f47154831726e6bce80079bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ros=C3=A1rio=20Pereira=20Fernandes?= Date: Wed, 12 Aug 2020 18:33:05 +0200 Subject: [PATCH 309/439] test: Add spotbugs and checkstyle maven plugins for Travis CI (#496) --- Makefile | 2 +- pom.xml | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 064737ef..82e5c343 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ install: cp target/sendgrid-java-$(VERSION)-shaded.jar sendgrid-java.jar test: - mvn test + mvn test spotbugs:spotbugs checkstyle:check -Dcheckstyle.config.location=google_checks.xml test-integ: test diff --git a/pom.xml b/pom.xml index cfa43c93..f91a2e6e 100644 --- a/pom.xml +++ b/pom.xml @@ -259,6 +259,18 @@ + + com.github.spotbugs + spotbugs-maven-plugin + 4.0.4 + + + com.github.spotbugs + spotbugs + 4.0.4 + + +
    @@ -309,4 +321,13 @@ 1.66 - \ No newline at end of file + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.0.0 + + + + From e71c7b09936715c4a9e39eb10c620b5a41385b11 Mon Sep 17 00:00:00 2001 From: Dmitriy Danilov Date: Tue, 18 Aug 2020 17:00:15 +0300 Subject: [PATCH 310/439] docs: add contribution guide for first-timers (#491) --- first-timers.md | 77 ++++++++++++++++++++++++++++++++++ static/img/github-fork.png | Bin 0 -> 15189 bytes static/img/github-sign-up.png | Bin 0 -> 116981 bytes 3 files changed, 77 insertions(+) create mode 100644 first-timers.md create mode 100644 static/img/github-fork.png create mode 100644 static/img/github-sign-up.png diff --git a/first-timers.md b/first-timers.md new file mode 100644 index 00000000..846100d7 --- /dev/null +++ b/first-timers.md @@ -0,0 +1,77 @@ +# How To Contribute to SendGrid Repositories via GitHub + Contributing to the SendGrid is easy! All you need to do is find an open issue (see the bottom of this page for a list of repositories containing open issues), fix it and submit a pull request. Once you have submitted your pull request, the team can easily review it before it is merged into the repository. + To make a pull request, follow these steps: + 1. Log into GitHub. If you do not already have a GitHub account, you will have to create one in order to submit a change. Click the Sign up link in the upper right-hand corner to create an account. Enter your username, password, and email address. If you are an employee of SendGrid, please use your full name with your GitHub account and enter SendGrid as your company so we can easily identify you. + + + + 2. __[Fork](https://help.github.com/fork-a-repo/)__ the [sendgrid-java](https://github.com/sendgrid/sendgrid-java) repository: + + + + 3. __Clone__ your fork via the following commands: + + ``` + # Clone your fork of the repo into the current directory + git clone https://github.com/your_username/sendgrid-java + # Navigate to the newly cloned directory + cd sendgrid-java + # Assign the original repo to a remote called "upstream" + git remote add upstream https://github.com/sendgrid/sendgrid-java + ``` + + > Don't forget to replace *your_username* in the URL by your real GitHub username. + + 4. __Create a new topic branch__ (off the main project development branch) to + contain your feature, change, or fix: + +``` + git checkout -b +``` + + 5. __Commit your changes__ in logical chunks. Please adhere to these [git commit + message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) + or your code is unlikely be merged into the main project. Use Git's + [interactive rebase](https://help.github.com/articles/interactive-rebase) + feature to tidy up your commits before making them public. Probably you will also have to create tests (if needed) or create or update the example code that demonstrates the functionality of this change to the code. + 6. __Locally merge (or rebase)__ the upstream development branch into your topic branch: + + ``` + git pull [--rebase] upstream master + ``` + + 7. __Push__ your topic branch up to your fork: + ``` + git push origin + ``` + 8. __[Open a Pull Request](https://help.github.com/articles/creating-a-pull-request/#changing-the-branch-range-and-destination-repository/)__ + with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. + + ### Important notice + Before creating a pull request, make sure that you respect the repository's constraints regarding contributions. You can find them in the [CONTRIBUTING.md](./CONTRIBUTING.md) file. + ## Repositories with Open, Easy, Help Wanted, Issue Filters + * [Python SDK](https://github.com/sendgrid/sendgrid-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [PHP SDK](https://github.com/sendgrid/sendgrid-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [C# SDK](https://github.com/sendgrid/sendgrid-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Ruby SDK](https://github.com/sendgrid/sendgrid-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Node.js SDK](https://github.com/sendgrid/sendgrid-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Java SDK](https://github.com/sendgrid/sendgrid-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Go SDK](https://github.com/sendgrid/sendgrid-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Python STMPAPI Client](https://github.com/sendgrid/smtpapi-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [PHP STMPAPI Client](https://github.com/sendgrid/smtpapi-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [C# STMPAPI Client](https://github.com/sendgrid/smtpapi-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Ruby STMPAPI Client](https://github.com/sendgrid/smtpapi-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Node.js STMPAPI Client](https://github.com/sendgrid/smtpapi-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Java STMPAPI Client](https://github.com/sendgrid/smtpapi-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Go STMPAPI Client](https://github.com/sendgrid/smtpapi-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Python HTTP Client](https://github.com/sendgrid/python-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [PHP HTTP Client](https://github.com/sendgrid/php-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [C# HTTP Client](https://github.com/sendgrid/csharp-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Java HTTP Client](https://github.com/sendgrid/java-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Ruby HTTP Client](https://github.com/sendgrid/ruby-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Go HTTP Client](https://github.com/sendgrid/rest/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Node.js HTTP Client](https://github.com/sendgrid/nodejs-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Open Source Data Collector](https://github.com/sendgrid/open-source-library-data-collector/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Open API Definition](https://github.com/sendgrid/sendgrid-oai/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [DX Automator](https://github.com/sendgrid/dx-automator/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Documentation](https://github.com/sendgrid/docs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) \ No newline at end of file diff --git a/static/img/github-fork.png b/static/img/github-fork.png new file mode 100644 index 0000000000000000000000000000000000000000..6503be362193808dc19bce69d8ccdf518d9ef93f GIT binary patch literal 15189 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 Oll& Date: Tue, 18 Aug 2020 10:11:14 -0500 Subject: [PATCH 311/439] docs: clean up and reconcile first timers documentation --- first-timers.md => FIRST_TIMERS.md | 108 +++++++++--------- .../helpers/mail/objects/MailSettings.java | 6 +- 2 files changed, 58 insertions(+), 56 deletions(-) rename first-timers.md => FIRST_TIMERS.md (50%) diff --git a/first-timers.md b/FIRST_TIMERS.md similarity index 50% rename from first-timers.md rename to FIRST_TIMERS.md index 846100d7..47cf5425 100644 --- a/first-timers.md +++ b/FIRST_TIMERS.md @@ -1,56 +1,60 @@ -# How To Contribute to SendGrid Repositories via GitHub - Contributing to the SendGrid is easy! All you need to do is find an open issue (see the bottom of this page for a list of repositories containing open issues), fix it and submit a pull request. Once you have submitted your pull request, the team can easily review it before it is merged into the repository. - To make a pull request, follow these steps: - 1. Log into GitHub. If you do not already have a GitHub account, you will have to create one in order to submit a change. Click the Sign up link in the upper right-hand corner to create an account. Enter your username, password, and email address. If you are an employee of SendGrid, please use your full name with your GitHub account and enter SendGrid as your company so we can easily identify you. +# How To Contribute to Twilio SendGrid Repositories via GitHub +Contributing to the Twilio SendGrid repositories is easy! All you need to do is find an open issue (see the bottom of this page for a list of repositories containing open issues), fix it and submit a pull request. Once you have submitted your pull request, the team can easily review it before it is merged into the repository. + +To make a pull request, follow these steps: + +1. Log into GitHub. If you do not already have a GitHub account, you will have to create one in order to submit a change. Click the Sign up link in the upper right-hand corner to create an account. Enter your username, password, and email address. If you are an employee of Twilio SendGrid, please use your full name with your GitHub account and enter Twilio SendGrid as your company so we can easily identify you. - 2. __[Fork](https://help.github.com/fork-a-repo/)__ the [sendgrid-java](https://github.com/sendgrid/sendgrid-java) repository: - - - - 3. __Clone__ your fork via the following commands: - - ``` - # Clone your fork of the repo into the current directory - git clone https://github.com/your_username/sendgrid-java - # Navigate to the newly cloned directory - cd sendgrid-java - # Assign the original repo to a remote called "upstream" - git remote add upstream https://github.com/sendgrid/sendgrid-java - ``` - - > Don't forget to replace *your_username* in the URL by your real GitHub username. - - 4. __Create a new topic branch__ (off the main project development branch) to - contain your feature, change, or fix: - -``` - git checkout -b -``` - - 5. __Commit your changes__ in logical chunks. Please adhere to these [git commit - message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) - or your code is unlikely be merged into the main project. Use Git's - [interactive rebase](https://help.github.com/articles/interactive-rebase) - feature to tidy up your commits before making them public. Probably you will also have to create tests (if needed) or create or update the example code that demonstrates the functionality of this change to the code. - 6. __Locally merge (or rebase)__ the upstream development branch into your topic branch: - - ``` - git pull [--rebase] upstream master - ``` - - 7. __Push__ your topic branch up to your fork: - ``` - git push origin - ``` - 8. __[Open a Pull Request](https://help.github.com/articles/creating-a-pull-request/#changing-the-branch-range-and-destination-repository/)__ - with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. - - ### Important notice - Before creating a pull request, make sure that you respect the repository's constraints regarding contributions. You can find them in the [CONTRIBUTING.md](./CONTRIBUTING.md) file. - ## Repositories with Open, Easy, Help Wanted, Issue Filters - * [Python SDK](https://github.com/sendgrid/sendgrid-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +2. __[Fork](https://help.github.com/fork-a-repo/)__ the [sendgrid-java](https://github.com/sendgrid/sendgrid-java) repository: + + + +3. __Clone__ your fork via the following commands: + +```bash +# Clone your fork of the repo into the current directory +git clone https://github.com/your_username/sendgrid-java +# Navigate to the newly cloned directory +cd sendgrid-java +# Assign the original repo to a remote called "upstream" +git remote add upstream https://github.com/sendgrid/sendgrid-java +``` + +> Don't forget to replace *your_username* in the URL by your real GitHub username. + +4. __Create a new topic branch__ (off the main project development branch) to contain your feature, change, or fix: + +```bash +git checkout -b +``` + +5. __Commit your changes__ in logical chunks. + +Please adhere to these [git commit message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) or your code is unlikely be merged into the main project. Use Git's [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public. Probably you will also have to create tests (if needed) or create or update the example code that demonstrates the functionality of this change to the code. + +6. __Locally merge (or rebase)__ the upstream development branch into your topic branch: + +```bash +git pull [--rebase] upstream main +``` + +7. __Push__ your topic branch up to your fork: + +```bash +git push origin +``` + +8. __[Open a Pull Request](https://help.github.com/articles/creating-a-pull-request/#changing-the-branch-range-and-destination-repository/)__ with a clear title and description against the `main` branch. All tests must be passing before we will review the PR. + +## Important notice + +Before creating a pull request, make sure that you respect the repository's constraints regarding contributions. You can find them in the [CONTRIBUTING.md](CONTRIBUTING.md) file. + +## Repositories with Open, Easy, Help Wanted, Issue Filters + +* [Python SDK](https://github.com/sendgrid/sendgrid-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [PHP SDK](https://github.com/sendgrid/sendgrid-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [C# SDK](https://github.com/sendgrid/sendgrid-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Ruby SDK](https://github.com/sendgrid/sendgrid-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) @@ -70,8 +74,6 @@ * [Java HTTP Client](https://github.com/sendgrid/java-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Ruby HTTP Client](https://github.com/sendgrid/ruby-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Go HTTP Client](https://github.com/sendgrid/rest/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Node.js HTTP Client](https://github.com/sendgrid/nodejs-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Open Source Data Collector](https://github.com/sendgrid/open-source-library-data-collector/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Open API Definition](https://github.com/sendgrid/sendgrid-oai/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [DX Automator](https://github.com/sendgrid/dx-automator/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Documentation](https://github.com/sendgrid/docs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) \ No newline at end of file +* [Documentation](https://github.com/sendgrid/docs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index bd239880..d83a56b6 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -59,7 +59,7 @@ public void setBypassListManagement(Setting bypassListManagement) { } /** - * Get the the footer settings that you would like included on every email. + * Get the footer settings that you would like included on every email. * * @return the setting. */ @@ -70,7 +70,7 @@ public FooterSetting getFooterSetting() { } /** - * Set the the footer settings that you would like included on every email. + * Set the footer settings that you would like included on every email. * * @param footerSetting the setting. */ @@ -183,4 +183,4 @@ public boolean equals(Object obj) { } return true; } -} \ No newline at end of file +} From cec18b0563b576e3d4602e737b9b3555a2840705 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 19 Aug 2020 18:54:22 +0000 Subject: [PATCH 312/439] [Librarian] Version Bump --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48fafd67..723ef727 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-08-19] Version 4.6.4 +-------------------------- +**Library - Docs** +- [PR #491](https://github.com/sendgrid/sendgrid-java/pull/491): add contribution guide for first-timers. Thanks to [@daniloff200](https://github.com/daniloff200)! + +**Library - Test** +- [PR #496](https://github.com/sendgrid/sendgrid-java/pull/496): Add spotbugs and checkstyle maven plugins for Travis CI. Thanks to [@rosariopfernandes](https://github.com/rosariopfernandes)! + +**Library - Chore** +- [PR #644](https://github.com/sendgrid/sendgrid-java/pull/644): update GitHub branch references to use HEAD. Thanks to [@thinkingserious](https://github.com/thinkingserious)! + + [2020-08-05] Version 4.6.3 -------------------------- **Library - Chore** From c46491045d1da79deaca339259233a7a4c08b947 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 19 Aug 2020 19:52:02 +0000 Subject: [PATCH 313/439] Release 4.6.4 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 8 ++++---- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9ba321ae..b0c84bed 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.3/sendgrid-4.6.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.3/sendgrid-4.6.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.4/sendgrid-4.6.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.4/sendgrid-4.6.4-jar.jar:. Example ``` diff --git a/README.md b/README.md index 5a575570..60b09197 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.3.** +**The default branch name for this repository has been changed to `main` as of 4.6.4.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -41,7 +41,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.3 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.4 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -69,7 +69,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.3' + implementation 'com.sendgrid:sendgrid-java:4.6.4' } repositories { @@ -88,7 +88,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.3/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.4/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index f91a2e6e..a5498ec4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.3 + 4.6.4 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.3 + 4.6.4 @@ -286,7 +286,7 @@ com.sendgrid java-http-client - 4.3.4 + 4.3.5 com.fasterxml.jackson.core @@ -330,4 +330,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index bf3e1957..9758f5d8 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.3"; + private static final String VERSION = "4.6.4"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index b1f88f7a..1092fd07 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.3"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.4"); } @Test From 20f389f796dcecb723633551fb0081cea33ad505 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 24 Aug 2020 09:57:48 -0500 Subject: [PATCH 314/439] docs: remove roadmap/milestone sections for CONTRIBUTING and README --- CONTRIBUTING.md | 3 --- README.md | 6 ------ 2 files changed, 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b0c84bed..33c41a89 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,9 +18,6 @@ Hello! Thank you for choosing to help contribute to one of the Twilio SendGrid o - [Creating a Pull Request](#creating-a-pull-request) - [Code Reviews](#code-reviews) - -We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. - There are a few ways to contribute, which we'll enumerate below: diff --git a/README.md b/README.md index 60b09197..e71eb696 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,6 @@ We appreciate your continued support, thank you! * [Usage](#usage) * [Use Cases](#use-cases) * [Announcements](#announcements) -* [Roadmap](#roadmap) * [How to Contribute](#contribute) * [Troubleshooting](#troubleshooting) * [About](#about) @@ -207,11 +206,6 @@ Please see our announcement regarding [breaking changes](https://github.com/send All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. - -# Roadmap - -If you are interested in the future direction of this project, please take a look at our open [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](https://github.com/sendgrid/sendgrid-java/pulls). We would love to hear your feedback. - # How to Contribute From 9e3cf6eda6a33529d778291d665a2487cd113607 Mon Sep 17 00:00:00 2001 From: Michael Vinicio Date: Thu, 27 Aug 2020 09:14:43 -0600 Subject: [PATCH 315/439] doc: Run *.md documents through Grammer.ly (#477) --- CHANGELOG.md | 10 +- CONTRIBUTING.md | 2 +- TROUBLESHOOTING.md | 4 +- USAGE.md | 482 ++++++++++++++++++++++----------------------- USE_CASES.md | 4 +- 5 files changed, 251 insertions(+), 251 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 723ef727..0728a93f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -152,7 +152,7 @@ all packages were update to match class location -- BIG thanks to [Bojan Trajkov ## [4.2.1] - 2018-05-08 ### Security Fix -- Update to latest Jackson recommended dependency, based on [this article](https://medium.com/@cowtowncoder/on-jackson-cves-dont-panic-here-is-what-you-need-to-know-54cd0d6e8062). +- Update to the latest Jackson recommended dependency, based on [this article](https://medium.com/@cowtowncoder/on-jackson-cves-dont-panic-here-is-what-you-need-to-know-54cd0d6e8062). ## [4.2.0] - 2018-05-04 ### Added @@ -196,7 +196,7 @@ all packages were update to match class location -- BIG thanks to [Bojan Trajkov ## [4.0.0] - 2017-04-18 ### BREAKING CHANGE -- PR #162 Update java http client dependency to [4.1.0 from 2.3.4](https://github.com/sendgrid/java-http-client/releases) +- PR #162 Update java HTTP client dependency to [4.1.0 from 2.3.4](https://github.com/sendgrid/java-http-client/releases) - BIG thanks to [Diego Camargo](https://github.com/belfazt) for the pull request! - The breaking change is that variables that were public are now private and accessible only via getters and setters - The `Request` object attributes are now only accessible through getters/setters @@ -225,7 +225,7 @@ request.addQueryParam("limit", "1"); ## [3.2.1] - 2017-04-13 ### Added - PR #175 -- Simplified `makeCall()` method. +- Simplified method `makeCall()`. - BIG thanks to [Rafał Wrzeszcz](https://github.com/rafalwrzeszcz) for the pull request! ## [3.2.0] - 2017-03-22 @@ -237,7 +237,7 @@ request.addQueryParam("limit", "1"); ## [3.1.0] - 2016-10-11 ### Added - PR #158, Solves #138 -- [Enhancement] allow using custom Client, http proxy support +- [Enhancement] allow using custom Client, HTTP proxy support - BIG thanks to [David Maicher](https://github.com/dmaicher) for the pull request! ## [3.0.9] - 2016-08-24 @@ -273,7 +273,7 @@ request.addQueryParam("limit", "1"); ## [3.0.4] - 2016-07-19 ### Fixed -- [Fix for issue #120](https://github.com/sendgrid/sendgrid-java/issues/120): Unsupported Media Type if subject has letters with accent (like 'é' ) +- [Fix for issue #120](https://github.com/sendgrid/sendgrid-java/issues/120): Unsupported Media Type if the subject has letters with an accent (like 'é' ) - Updated [java-http-client](https://github.com/sendgrid/java-http-client) dependency to [2.3.2](https://github.com/sendgrid/java-http-client/releases/tag/v2.3.2) ## [3.0.3] - 2016-07-12 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 33c41a89..dbfb552d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,7 +40,7 @@ A software bug is a demonstrable issue in the code base. In order for us to diag Before you decide to create a new issue, please try the following: 1. Check the GitHub issues tab if the identified issue has already been reported, if so, please add a +1 to the existing post. -2. Update to the latest version of this code and check if issue has already been fixed +2. Update to the latest version of this code and check if the issue has already been fixed 3. Copy and fill in the Bug Report Template we have provided below ### Please use our Bug Report Template diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index bc3b1361..02fba251 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -60,7 +60,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies ## Versions -We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guaranteed to be a breaking change. Changes are documented in the [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. +We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with your code and never auto-update to the latest version. Especially when there is a MAJOR point release since that is guaranteed to be a breaking change. Changes are documented in the [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. ## Environment Variables and Your Twilio SendGrid API Key @@ -75,7 +75,7 @@ becomes `"SENDGRID_API_KEY"` -In the first case SENDGRID_API_KEY is in reference to the name of the environment variable, while the second case references the actual Twilio SendGrid API Key. +In the first case, SENDGRID_API_KEY is in reference to the name of the environment variable, while the second case references the actual Twilio SendGrid API Key. ## Using the Package Manager diff --git a/USAGE.md b/USAGE.md index 6b0529dc..08487720 100644 --- a/USAGE.md +++ b/USAGE.md @@ -77,7 +77,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` ## Add one or more IPs to the whitelist **This endpoint allows you to add one or more IP addresses to your IP whitelist.** @@ -105,7 +105,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a list of currently whitelisted IPs **This endpoint allows you to retrieve a list of IP addresses that are currently whitelisted.** @@ -130,7 +130,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` ## Remove one or more IPs from the whitelist **This endpoint allows you to remove one or more IPs from your IP whitelist.** @@ -158,7 +158,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific whitelisted IP **This endpoint allows you to retrieve a specific IP address that has been whitelisted.** @@ -185,7 +185,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` ## Remove a specific IP from the whitelist **This endpoint allows you to remove a specific IP address from your IP whitelist.** @@ -212,7 +212,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` # ALERTS @@ -243,7 +243,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all alerts **This endpoint allows you to retrieve all of your alerts.** @@ -270,7 +270,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. } catch (IOException ex) { throw ex; } - ``` +``` ## Update an alert **This endpoint allows you to update an alert.** @@ -298,7 +298,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific alert **This endpoint allows you to retrieve a specific alert.** @@ -325,7 +325,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. } catch (IOException ex) { throw ex; } - ``` +``` ## Delete an alert **This endpoint allows you to delete an alert.** @@ -352,7 +352,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. } catch (IOException ex) { throw ex; } - ``` +``` # API KEYS @@ -360,7 +360,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. **This endpoint allows you to create a new random API Key for the user.** -A JSON request body containing a "name" property is required. If number of maximum keys is reached, HTTP 403 will be returned. +A JSON request body containing a "name" property is required. If the number of maximum keys is reached, HTTP 403 will be returned. There is a limit of 100 API Keys on your account. @@ -385,7 +385,7 @@ See the [API Key Permissions List](https://sendgrid.com/docs/API_Reference/Web_A } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all API Keys belonging to the authenticated user **This endpoint allows you to retrieve all API Keys that belong to the authenticated user.** @@ -409,13 +409,13 @@ The API Keys feature allows customers to be able to generate an API Key credenti } catch (IOException ex) { throw ex; } - ``` +``` ## Update the name & scopes of an API Key **This endpoint allows you to update the name and scopes of a given API key.** A JSON request body with a "name" property is required. -Most provide the list of all the scopes an api key should have. +Most provide the list of all the scopes an API key should have. The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). @@ -437,7 +437,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti } catch (IOException ex) { throw ex; } - ``` +``` ## Update API keys **This endpoint allows you to update the name of an existing API Key.** @@ -469,10 +469,10 @@ The API Keys feature allows customers to be able to generate an API Key credenti } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve an existing API Key -**This endpoint allows you to retrieve a single api key.** +**This endpoint allows you to retrieve a single API key.** If the API Key ID does not exist an HTTP 404 will be returned. @@ -492,12 +492,12 @@ If the API Key ID does not exist an HTTP 404 will be returned. } catch (IOException ex) { throw ex; } - ``` +``` ## Delete API keys **This endpoint allows you to revoke an existing API Key.** -Authentications using this API Key will fail after this request is made, with some small propagation delay.If the API Key ID does not exist an HTTP 404 will be returned. +Authentications using this API Key will fail after this request is made, with some small propagation delay. If the API Key ID does not exist an HTTP 404 will be returned. The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the Twilio SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). @@ -523,7 +523,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti } catch (IOException ex) { throw ex; } - ``` +``` # ASM @@ -554,7 +554,7 @@ Each user can create up to 25 different suppression groups. } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve information about multiple suppression groups **This endpoint allows you to retrieve information about multiple suppression groups.** @@ -582,7 +582,7 @@ Suppression groups, or [unsubscribe groups](https://sendgrid.com/docs/API_Refere } catch (IOException ex) { throw ex; } - ``` +``` ## Update a suppression group. **This endpoint allows you to update or change a suppression group.** @@ -610,7 +610,7 @@ Each user can create up to 25 different suppression groups. } catch (IOException ex) { throw ex; } - ``` +``` ## Get information on a single suppression group. **This endpoint allows you to retrieve a single suppression group.** @@ -637,7 +637,7 @@ Each user can create up to 25 different suppression groups. } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a suppression group. **This endpoint allows you to delete a suppression group.** @@ -666,7 +666,7 @@ Each user can create up to 25 different suppression groups. } catch (IOException ex) { throw ex; } - ``` +``` ## Add suppressions to a suppression group **This endpoint allows you to add email addresses to an unsubscribe group.** @@ -692,7 +692,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all suppressions for a suppression group **This endpoint allows you to retrieve all suppressed email addresses belonging to the given group.** @@ -715,7 +715,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups } catch (IOException ex) { throw ex; } - ``` +``` ## Search for suppressions within a group **This endpoint allows you to search a suppression group for multiple suppressions.** @@ -741,7 +741,7 @@ Suppressions are a list of email addresses that will not receive content sent un } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a suppression from a suppression group **This endpoint allows you to remove a suppressed email address from the given suppression group.** @@ -764,7 +764,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all suppressions **This endpoint allows you to retrieve a list of all suppressions.** @@ -787,7 +787,7 @@ Suppressions are a list of email addresses that will not receive content sent un } catch (IOException ex) { throw ex; } - ``` +``` ## Add recipient addresses to the global suppression group. **This endpoint allows you to add one or more email addresses to the global suppressions group.** @@ -811,7 +811,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a Global Suppression **This endpoint allows you to retrieve a global suppression. You can also use this endpoint to confirm if an email address is already globally suppressed.** @@ -836,7 +836,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Global Suppression **This endpoint allows you to remove an email address from the global suppressions group.** @@ -859,7 +859,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all suppression groups for an email address **This endpoint returns the list of all groups that the given email address has been unsubscribed from.** @@ -882,7 +882,7 @@ Suppressions are a list of email addresses that will not receive content sent un } catch (IOException ex) { throw ex; } - ``` +``` # BROWSERS @@ -916,7 +916,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` # CAMPAIGNS @@ -926,7 +926,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act Our Marketing Campaigns API lets you create, manage, send, and schedule campaigns. -Note: In order to send or schedule the campaign, you will be required to provide a subject, sender ID, content (we suggest both html and plain text), and at least one list or segment ID. This information is not required when you create a campaign. +Note: In order to send or schedule the campaign, you will be required to provide a subject, sender ID, content (we suggest both HTML and plain text), and at least one list or segment ID. This information is not required when you create a campaign. For more information: @@ -949,7 +949,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all Campaigns **This endpoint allows you to retrieve a list of all of your campaigns.** @@ -980,7 +980,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Update a Campaign Update a campaign. This is especially useful if you only set up the campaign using POST /campaigns, but didn't set many of the parameters. @@ -1006,7 +1006,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a single campaign **This endpoint allows you to retrieve a specific campaign.** @@ -1033,7 +1033,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Campaign **This endpoint allows you to delete a specific campaign.** @@ -1060,7 +1060,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Update a Scheduled Campaign **This endpoint allows to you change the scheduled time and date for a campaign to be sent.** @@ -1086,7 +1086,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Schedule a Campaign **This endpoint allows you to schedule a specific date and time for your campaign to be sent.** @@ -1112,7 +1112,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## View Scheduled Time of a Campaign **This endpoint allows you to retrieve the date and time that the given campaign has been scheduled to be sent.** @@ -1137,7 +1137,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Unschedule a Scheduled Campaign **This endpoint allows you to unschedule a campaign that has already been scheduled to be sent.** @@ -1165,7 +1165,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Send a Campaign **This endpoint allows you to immediately send a campaign at the time you make the API call.** @@ -1192,7 +1192,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Send a Test Campaign **This endpoint allows you to send a test campaign.** @@ -1220,7 +1220,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` # CATEGORIES @@ -1249,7 +1249,7 @@ Categories can help organize your email analytics by enabling you to tag emails } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Email Statistics for Categories **This endpoint allows you to retrieve all of your email statistics for each of your categories.** @@ -1280,7 +1280,7 @@ Categories allow you to group your emails together according to broad topics tha } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] **This endpoint allows you to retrieve the total sum of each email statistic for every category over the given date range.** @@ -1312,7 +1312,7 @@ Categories allow you to group your emails together according to broad topics tha } catch (IOException ex) { throw ex; } - ``` +``` # CLIENTS @@ -1343,7 +1343,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve stats by a specific client type. **This endpoint allows you to retrieve your email statistics segmented by a specific client type.** @@ -1377,7 +1377,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` # CONTACTDB @@ -1404,7 +1404,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all custom fields **This endpoint allows you to retrieve all custom fields.** @@ -1427,7 +1427,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a Custom Field **This endpoint allows you to retrieve a custom field by ID.** @@ -1450,7 +1450,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Custom Field **This endpoint allows you to delete a custom field by ID.** @@ -1473,7 +1473,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Create a List **This endpoint allows you to create a list for your recipients.** @@ -1497,7 +1497,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all lists **This endpoint allows you to retrieve all of your recipient lists. If you don't have any lists, an empty array will be returned.** @@ -1520,7 +1520,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Delete Multiple lists **This endpoint allows you to delete multiple recipient lists.** @@ -1544,7 +1544,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Update a List **This endpoint allows you to update the name of one of your recipient lists.** @@ -1569,7 +1569,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a single list This endpoint allows you to retrieve a single recipient list. @@ -1592,7 +1592,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a List **This endpoint allows you to delete a specific recipient list with the given ID.** @@ -1616,7 +1616,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Add Multiple Recipients to a List **This endpoint allows you to add multiple recipients to a list.** @@ -1642,7 +1642,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all recipients on a List **This endpoint allows you to retrieve all recipients on the list with the given ID.** @@ -1667,7 +1667,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Add a Single Recipient to a List **This endpoint allows you to add a single recipient to a list.** @@ -1690,7 +1690,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Single Recipient from a Single List **This endpoint allows you to delete a single recipient from a list.** @@ -1714,7 +1714,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Update Recipient **This endpoint allows you to update one or more recipients.** @@ -1742,7 +1742,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Add recipients **This endpoint allows you to add a Marketing Campaigns recipient.** @@ -1768,7 +1768,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve recipients **This endpoint allows you to retrieve all of your Marketing Campaigns recipients.** @@ -1796,10 +1796,10 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Delete Recipient -**This endpoint allows you to deletes one or more recipients.** +**This endpoint allows you to delete one or more recipients.** The body of an API call to this endpoint must include an array of recipient IDs of the recipients you want to delete. @@ -1822,7 +1822,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve the count of billable recipients **This endpoint allows you to retrieve the number of Marketing Campaigns recipients that you will be billed for.** @@ -1847,7 +1847,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a Count of Recipients **This endpoint allows you to retrieve the total number of Marketing Campaigns recipients.** @@ -1870,7 +1870,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve recipients matching search criteria **This endpoint allows you to perform a search on all of your Marketing Campaigns recipients.** @@ -1878,11 +1878,11 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp field_name: * is a variable that is substituted for your actual custom field name from your recipient. -* Text fields must be url-encoded. Date fields are searchable only by unix timestamp (e.g. 2/2/2015 becomes 1422835200) +* Text fields must be URL-encoded. Date fields are searchable only by Unix timestamp (e.g. 2/2/2015 becomes 1422835200) * If field_name is a 'reserved' date field, such as created_at or updated_at, the system will internally convert -your epoch time to a date range encompassing the entire day. For example, an epoch time of 1422835600 converts to -Mon, 02 Feb 2015 00:06:40 GMT, but internally the system will search from Mon, 02 Feb 2015 00:00:00 GMT through -Mon, 02 Feb 2015 23:59:59 GMT. + your epoch time to a date range encompassing the entire day. For example, an epoch time of 1422835600 converts to + Mon, 02 Feb 2015 00:06:40 GMT, but internally the system will search from Mon, 02 Feb 2015 00:00:00 GMT through + Mon, 02 Feb 2015 23:59:59 GMT. The contactdb is a database of your contacts for [Twilio SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). @@ -1903,7 +1903,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a single recipient **This endpoint allows you to retrieve a single recipient by ID from your contact database.** @@ -1926,7 +1926,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Recipient **This endpoint allows you to delete a single recipient with the given ID from your contact database.** @@ -1949,7 +1949,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve the lists that a recipient is on **This endpoint allows you to retrieve the lists that a given recipient belongs to.** @@ -1974,7 +1974,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve reserved fields **This endpoint allows you to list all fields that are reserved and can't be used for custom field names.** @@ -1997,7 +1997,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Create a Segment **This endpoint allows you to create a segment.** @@ -2041,7 +2041,7 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all segments **This endpoint allows you to retrieve all of your segments.** @@ -2066,7 +2066,7 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` ## Update a segment **This endpoint allows you to update a segment.** @@ -2093,7 +2093,7 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a segment **This endpoint allows you to retrieve a single segment with the given ID.** @@ -2119,10 +2119,10 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a segment -**This endpoint allows you to delete a segment from your recipients database.** +**This endpoint allows you to delete a segment from your recipient's database.** You also have the option to delete all the contacts from your Marketing Campaigns recipient database who were in this segment. @@ -2147,7 +2147,7 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve recipients on a segment **This endpoint allows you to retrieve all of the recipients in a segment with the given ID.** @@ -2174,7 +2174,7 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` # DEVICES @@ -2189,8 +2189,8 @@ For more information about segments in Marketing Campaigns, please see our [User |---|---|---| | Desktop | Email software on desktop computer. | I.E., Outlook, Sparrow, or Apple Mail. | | Webmail | A web-based email client. | I.E., Yahoo, Google, AOL, or Outlook.com. | -| Phone | A smart phone. | iPhone, Android, Blackberry, etc. -| Tablet | A tablet computer. | iPad, android based tablet, etc. | +| Phone | A smartphone. | iPhone, Android, Blackberry, etc. +| Tablet | A tablet computer. | iPad, Android based tablet, etc. | | Other | An unrecognized device. | Advanced Stats provide a more in-depth view of your email statistics and the actions taken by your recipients. You can segment these statistics by geographic location, device type, client type, browser, and mailbox provider. For more information about statistics, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/index.html). @@ -2216,7 +2216,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` # GEO @@ -2250,7 +2250,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` # IPS @@ -2258,7 +2258,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act **This endpoint allows you to retrieve a list of all assigned and unassigned IPs.** -Response includes warm up status, pools, assigned subusers, and authorization info. The start_date field corresponds to when warmup started for that IP. +The response includes warm-up status, pools, assigned subusers, and authorization info. The start_date field corresponds to when warmup started for that IP. A single IP address or a range of IP addresses may be dedicated to an account in order to send email for multiple domains. The reputation of this IP is based on the aggregate performance of all the senders who use it. @@ -2283,7 +2283,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all assigned IPs **This endpoint allows you to retrieve only assigned IP addresses.** @@ -2306,7 +2306,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in } catch (IOException ex) { throw ex; } - ``` +``` ## Create an IP pool. **This endpoint allows you to create an IP pool.** @@ -2336,7 +2336,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all IP pools. **This endpoint allows you to retrieve all of your IP pools.** @@ -2363,7 +2363,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu } catch (IOException ex) { throw ex; } - ``` +``` ## Update an IP pools name. **This endpoint allows you to update the name of an IP pool.** @@ -2391,7 +2391,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all IPs in a specified pool. **This endpoint allows you to list all of the IP addresses that are in a specific IP pool.** @@ -2418,7 +2418,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu } catch (IOException ex) { throw ex; } - ``` +``` ## Delete an IP pool. **This endpoint allows you to delete an IP pool.** @@ -2445,7 +2445,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu } catch (IOException ex) { throw ex; } - ``` +``` ## Add an IP address to a pool **This endpoint allows you to add an IP address to an IP pool.** @@ -2471,7 +2471,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in } catch (IOException ex) { throw ex; } - ``` +``` ## Remove an IP address from a pool. **This endpoint allows you to remove an IP address from an IP pool.** @@ -2496,8 +2496,8 @@ A single IP address or a range of IP addresses may be dedicated to an account in } catch (IOException ex) { throw ex; } - ``` -## Add an IP to warmup +``` +## Add an IP to warm up **This endpoint allows you to enter an IP address into warmup mode.** @@ -2522,7 +2522,7 @@ For more general information about warming up IPs, please see our [Classroom](ht } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all IPs currently in warmup **This endpoint allows you to retrieve all of your IP addresses that are currently warming up.** @@ -2547,7 +2547,7 @@ For more general information about warming up IPs, please see our [Classroom](ht } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve warmup status for a specific IP address **This endpoint allows you to retrieve the warmup status for a specific IP address.** @@ -2572,7 +2572,7 @@ For more general information about warming up IPs, please see our [Classroom](ht } catch (IOException ex) { throw ex; } - ``` +``` ## Remove an IP from warmup **This endpoint allows you to remove an IP address from warmup mode.** @@ -2597,7 +2597,7 @@ For more general information about warming up IPs, please see our [Classroom](ht } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all IP pools an IP address belongs to **This endpoint allows you to see which IP pools a particular IP address has been added to.** @@ -2622,7 +2622,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in } catch (IOException ex) { throw ex; } - ``` +``` # MAIL @@ -2630,7 +2630,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in **This endpoint allows you to generate a new batch ID. This batch ID can be associated with scheduled sends via the mail/send endpoint.** -If you set the SMTPAPI header `batch_id`, it allows you to then associate multiple scheduled mail/send requests together with the same ID. Then at anytime up to 10 minutes before the schedule date, you can cancel all of the mail/send requests that have this batch ID by calling the Cancel Scheduled Send endpoint. +If you set the SMTPAPI header, `batch_id`, it allows you to then associate multiple scheduled mail/send requests together with the same ID. Then at any time up to 10 minutes before the scheduled date, you can cancel all of the mail/send requests that have this batch ID by calling the Cancel Scheduled Send endpoint. More Information: @@ -2652,12 +2652,12 @@ More Information: } catch (IOException ex) { throw ex; } - ``` +``` ## Validate batch ID **This endpoint allows you to validate a batch ID.** -If you set the SMTPAPI header `batch_id`, it allows you to then associate multiple scheduled mail/send requests together with the same ID. Then at anytime up to 10 minutes before the schedule date, you can cancel all of the mail/send requests that have this batch ID by calling the Cancel Scheduled Send endpoint. +If you set the SMTPAPI header, `batch_id`, it allows you to then associate multiple scheduled mail/send requests together with the same ID. Then at any time up to 10 minutes before the scheduled date, you can cancel all of the mail/send requests that have this batch ID by calling the Cancel Scheduled Send endpoint. More Information: @@ -2679,10 +2679,10 @@ More Information: } catch (IOException ex) { throw ex; } - ``` +``` ## v3 Mail Send -This endpoint allows you to send email over Twilio SendGrid's v3 Web API, the most recent version of our API. If you are looking for documentation about the v2 Mail Send endpoint, please see our [v2 API Reference](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). +This endpoint allows you to send an email over Twilio SendGrid's v3 Web API, the most recent version of our API. If you are looking for documentation about the v2 Mail Send endpoint, please see our [v2 API Reference](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). * Top level parameters are referred to as "global". * Individual fields within the personalizations array will override any other global, or message level, parameters that are defined outside of personalizations. @@ -2709,7 +2709,7 @@ This endpoint has a helper, check it out [here](src/main/java/com/sendgrid/helpe } catch (IOException ex) { throw ex; } - ``` +``` # MAIL SETTINGS @@ -2737,7 +2737,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update address whitelist mail settings **This endpoint allows you to update your current email address whitelist settings.** @@ -2763,7 +2763,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve address whitelist mail settings **This endpoint allows you to retrieve your current email address whitelist settings.** @@ -2788,12 +2788,12 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update BCC mail settings **This endpoint allows you to update your current BCC mail settings.** -When the BCC mail setting is enabled, Twilio SendGrid will automatically send a blind carbon copy (BCC) to an address for every email sent without adding that address to the header. Please note that only one email address may be entered in this field, if you wish to distribute BCCs to multiple addresses you will need to create a distribution group or use forwarding rules. +When the BCC mail setting is enabled, Twilio SendGrid will automatically send a blind carbon copy (BCC) to an address for every email sent without adding that address to the header. Please note that only one email address may be entered in this field if you wish to distribute BCCs to multiple addresses you will need to create a distribution group or use forwarding rules. Mail settings allow you to tell Twilio SendGrid specific things to do to every email that you send to your recipients over Twilio SendGrid's [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). @@ -2814,12 +2814,12 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all BCC mail settings **This endpoint allows you to retrieve your current BCC mail settings.** -When the BCC mail setting is enabled, Twilio SendGrid will automatically send a blind carbon copy (BCC) to an address for every email sent without adding that address to the header. Please note that only one email address may be entered in this field, if you wish to distribute BCCs to multiple addresses you will need to create a distribution group or use forwarding rules. +When the BCC mail setting is enabled, Twilio SendGrid will automatically send a blind carbon copy (BCC) to an address for every email sent without adding that address to the header. Please note that only one email address may be entered in this field if you wish to distribute BCCs to multiple addresses you will need to create a distribution group or use forwarding rules. Mail settings allow you to tell Twilio SendGrid specific things to do to every email that you send to your recipients over Twilio SendGrid's [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). @@ -2839,7 +2839,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update bounce purge mail settings **This endpoint allows you to update your current bounce purge settings.** @@ -2865,7 +2865,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve bounce purge mail settings **This endpoint allows you to retrieve your current bounce purge settings.** @@ -2890,7 +2890,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update footer mail settings **This endpoint allows you to update your current Footer mail settings.** @@ -2916,7 +2916,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve footer mail settings **This endpoint allows you to retrieve your current Footer mail settings.** @@ -2941,7 +2941,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update forward bounce mail settings **This endpoint allows you to update your current bounce forwarding mail settings.** @@ -2967,7 +2967,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve forward bounce mail settings **This endpoint allows you to retrieve your current bounce forwarding mail settings.** @@ -2992,7 +2992,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update forward spam mail settings **This endpoint allows you to update your current Forward Spam mail settings.** @@ -3018,7 +3018,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve forward spam mail settings **This endpoint allows you to retrieve your current Forward Spam mail settings.** @@ -3043,7 +3043,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update plain content mail settings **This endpoint allows you to update your current Plain Content mail settings.** @@ -3069,7 +3069,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve plain content mail settings **This endpoint allows you to retrieve your current Plain Content mail settings.** @@ -3094,7 +3094,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update spam check mail settings **This endpoint allows you to update your current spam checker mail settings.** @@ -3120,7 +3120,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve spam check mail settings **This endpoint allows you to retrieve your current Spam Checker mail settings.** @@ -3145,7 +3145,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update template mail settings **This endpoint allows you to update your current legacy email template settings.** @@ -3173,7 +3173,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve legacy template mail settings **This endpoint allows you to retrieve your current legacy email template settings.** @@ -3200,7 +3200,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` # MAILBOX PROVIDERS @@ -3234,7 +3234,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` # PARTNER SETTINGS @@ -3262,7 +3262,7 @@ Our partner settings allow you to integrate your Twilio SendGrid account with ou } catch (IOException ex) { throw ex; } - ``` +``` ## Updates New Relic partner settings. **This endpoint allows you to update or change your New Relic partner settings.** @@ -3288,7 +3288,7 @@ By integrating with New Relic, you can send your Twilio SendGrid email statistic } catch (IOException ex) { throw ex; } - ``` +``` ## Returns all New Relic partner settings. **This endpoint allows you to retrieve your current New Relic partner settings.** @@ -3313,7 +3313,7 @@ By integrating with New Relic, you can send your Twilio SendGrid email statistic } catch (IOException ex) { throw ex; } - ``` +``` # SCOPES @@ -3339,7 +3339,7 @@ API Keys can be used to authenticate the use of [Twilio SendGrid's v3 Web API](h } catch (IOException ex) { throw ex; } - ``` +``` # SENDERS @@ -3349,7 +3349,7 @@ API Keys can be used to authenticate the use of [Twilio SendGrid's v3 Web API](h *You may create up to 100 unique sender identities.* -Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. ### POST /senders @@ -3368,12 +3368,12 @@ Sender Identities are required to be verified before use. If your domain has bee } catch (IOException ex) { throw ex; } - ``` +``` ## Get all Sender Identities **This endpoint allows you to retrieve a list of all sender identities that have been created for your account.** -Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. ### GET /senders @@ -3391,12 +3391,12 @@ Sender Identities are required to be verified before use. If your domain has bee } catch (IOException ex) { throw ex; } - ``` +``` ## Update a Sender Identity **This endpoint allows you to update a sender identity.** -Updates to `from.email` require re-verification. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Updates to `from.email` require re-verification. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. Partial updates are allowed, but fields that are marked as "required" in the POST (create) endpoint must not be nil if that field is included in the PATCH request. @@ -3417,12 +3417,12 @@ Partial updates are allowed, but fields that are marked as "required" in the POS } catch (IOException ex) { throw ex; } - ``` +``` ## View a Sender Identity **This endpoint allows you to retrieve a specific sender identity.** -Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. ### GET /senders/{sender_id} @@ -3440,12 +3440,12 @@ Sender Identities are required to be verified before use. If your domain has bee } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Sender Identity **This endpoint allows you to delete one of your sender identities.** -Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. ### DELETE /senders/{sender_id} @@ -3463,12 +3463,12 @@ Sender Identities are required to be verified before use. If your domain has bee } catch (IOException ex) { throw ex; } - ``` +``` ## Resend Sender Identity Verification **This endpoint allows you to resend a sender identity verification email.** -Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. ### POST /senders/{sender_id}/resend_verification @@ -3486,7 +3486,7 @@ Sender Identities are required to be verified before use. If your domain has bee } catch (IOException ex) { throw ex; } - ``` +``` # SENDER AUTHENTICATION @@ -4288,7 +4288,7 @@ Parent accounts will see aggregated stats for their account and all subuser acco } catch (IOException ex) { throw ex; } - ``` +``` # SUBUSERS @@ -4318,7 +4318,7 @@ For more information about Subusers: } catch (IOException ex) { throw ex; } - ``` +``` ## List all Subusers This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. @@ -4347,10 +4347,10 @@ For more information about Subusers: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Subuser Reputations -Subuser sender reputations give a good idea how well a sender is doing with regards to how recipients and recipient servers react to the mail that is being received. When a bounce, spam report, or other negative action happens on a sent email, it will effect your sender rating. +Subuser sender reputations give a good idea how well a sender is doing with regards to how recipients and recipient servers react to the mail that is being received. When a bounce, spam report, or other negative action happens on a sent email, it will affect your sender rating. This endpoint allows you to request the reputations for your subusers. @@ -4371,7 +4371,7 @@ This endpoint allows you to request the reputations for your subusers. } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve email statistics for your subusers. **This endpoint allows you to retrieve the email statistics for the given subusers.** @@ -4404,7 +4404,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve monthly stats for all subusers **This endpoint allows you to retrieve the monthly email statistics for all subusers over the given date range.** @@ -4438,7 +4438,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve the totals for each email statistic metric for all subusers. **This endpoint allows you to retrieve the total sums of each email statistic metric for all subusers over the given date range.** @@ -4471,7 +4471,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ } catch (IOException ex) { throw ex; } - ``` +``` ## Enable/disable a subuser This endpoint allows you to enable or disable a subuser. @@ -4498,7 +4498,7 @@ For more information about Subusers: } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a subuser This endpoint allows you to delete a subuser. This is a permanent action, once deleted a subuser cannot be retrieved. @@ -4524,7 +4524,7 @@ For more information about Subusers: } catch (IOException ex) { throw ex; } - ``` +``` ## Update IPs assigned to a subuser Each subuser should be assigned to an IP address, from which all of this subuser's mail will be sent. Often, this is the same IP as the parent account, but each subuser can have their own, or multiple, IP addresses as well. @@ -4551,7 +4551,7 @@ More information: } catch (IOException ex) { throw ex; } - ``` +``` ## Update Monitor Settings for a subuser Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. @@ -4573,7 +4573,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by } catch (IOException ex) { throw ex; } - ``` +``` ## Create monitor settings Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. @@ -4595,7 +4595,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve monitor settings for a subuser Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. @@ -4616,7 +4616,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by } catch (IOException ex) { throw ex; } - ``` +``` ## Delete monitor settings Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. @@ -4637,7 +4637,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve the monthly email statistics for a single subuser **This endpoint allows you to retrieve the monthly email statistics for a specific subuser.** @@ -4670,7 +4670,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ } catch (IOException ex) { throw ex; } - ``` +``` # SUPPRESSION @@ -4702,7 +4702,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete blocks **This endpoint allows you to delete all email addresses on your blocks list.** @@ -4733,7 +4733,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific block **This endpoint allows you to retrieve a specific email address from your blocks list.** @@ -4758,7 +4758,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a specific block **This endpoint allows you to delete a specific email address from your blocks list.** @@ -4783,7 +4783,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all bounces **This endpoint allows you to retrieve all of your bounces.** @@ -4813,7 +4813,7 @@ For more information see: } catch (IOException ex) { throw ex; } - ``` +``` ## Delete bounces **This endpoint allows you to delete all of your bounces. You can also use this endpoint to remove a specific email address from your bounce list.** @@ -4845,7 +4845,7 @@ Note: the `delete_all` and `emails` parameters should be used independently of e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a Bounce **This endpoint allows you to retrieve a specific bounce for a given email address.** @@ -4874,12 +4874,12 @@ For more information see: } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a bounce **This endpoint allows you to remove an email address from your bounce list.** -Bounces are messages that are returned to the server that sent it. This endpoint allows you to delete a single email addresses from your bounce list. +Bounces are messages that are returned to the server that sent it. This endpoint allows you to delete a single email address from your bounce list. For more information see: @@ -4904,12 +4904,12 @@ For more information see: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all invalid emails **This endpoint allows you to retrieve a list of all invalid email addresses.** -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipient's mail server. Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. @@ -4935,7 +4935,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete invalid emails **This endpoint allows you to remove email addresses from your invalid email address list.** @@ -4945,7 +4945,7 @@ There are two options for deleting invalid email addresses: 1) You can delete all invalid email addresses by setting `delete_all` to true in the request body. 2) You can delete some invalid email addresses by specifying certain addresses in an array in the request body. -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipient's mail server. Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. @@ -4968,12 +4968,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific invalid email **This endpoint allows you to retrieve a specific invalid email addresses.** -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipient's mail server. Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. @@ -4995,12 +4995,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a specific invalid email **This endpoint allows you to remove a specific email address from the invalid email address list.** -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipient's mail server. Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. @@ -5022,7 +5022,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific spam report **This endpoint allows you to retrieve a specific spam report.** @@ -5047,7 +5047,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a specific spam report **This endpoint allows you to delete a specific spam report.** @@ -5072,7 +5072,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all spam reports **This endpoint allows you to retrieve all spam reports.** @@ -5101,7 +5101,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete spam reports **This endpoint allows you to delete your spam reports.** @@ -5132,10 +5132,10 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all global suppressions -**This endpoint allows you to retrieve a list of all email address that are globally suppressed.** +**This endpoint allows you to retrieve a list of all email addresses that are globally suppressed.** A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). @@ -5159,7 +5159,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient } catch (IOException ex) { throw ex; } - ``` +``` # TEMPLATES @@ -5188,7 +5188,7 @@ Transactional templates are templates created specifically for transactional ema } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all transactional templates. **This endpoint allows you to retrieve all transactional templates.** @@ -5213,7 +5213,7 @@ Transactional templates are templates created specifically for transactional ema } catch (IOException ex) { throw ex; } - ``` +``` ## Edit a transactional template. **This endpoint allows you to edit a transactional template.** @@ -5240,7 +5240,7 @@ Transactional templates are templates created specifically for transactional ema } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a single transactional template. **This endpoint allows you to retrieve a single transactional template.** @@ -5266,7 +5266,7 @@ Transactional templates are templates created specifically for transactional ema } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a template. **This endpoint allows you to delete a transactional template.** @@ -5292,7 +5292,7 @@ Transactional templates are templates created specifically for transactional ema } catch (IOException ex) { throw ex; } - ``` +``` ## Create a new transactional template version. **This endpoint allows you to create a new version of a template.** @@ -5319,7 +5319,7 @@ For more information about transactional templates, please see our [User Guide]( } catch (IOException ex) { throw ex; } - ``` +``` ## Edit a transactional template version. **This endpoint allows you to edit a version of one of your transactional templates.** @@ -5351,7 +5351,7 @@ For more information about transactional templates, please see our [User Guide]( } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific transactional template version. **This endpoint allows you to retrieve a specific version of a template.** @@ -5382,7 +5382,7 @@ For more information about transactional templates, please see our [User Guide]( } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a transactional template version. **This endpoint allows you to delete one of your transactional template versions.** @@ -5413,7 +5413,7 @@ For more information about transactional templates, please see our [User Guide]( } catch (IOException ex) { throw ex; } - ``` +``` ## Activate a transactional template version. **This endpoint allows you to activate a version of one of your templates.** @@ -5445,7 +5445,7 @@ For more information about transactional templates, please see our [User Guide]( } catch (IOException ex) { throw ex; } - ``` +``` # TRACKING SETTINGS @@ -5475,7 +5475,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Update Click Tracking Settings **This endpoint allows you to change your current click tracking setting. You can enable, or disable, click tracking using this endpoint.** @@ -5501,7 +5501,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Click Track Settings **This endpoint allows you to retrieve your current click tracking setting.** @@ -5526,7 +5526,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Update Google Analytics Settings **This endpoint allows you to update your current setting for Google Analytics.** @@ -5556,7 +5556,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Google Analytics Settings **This endpoint allows you to retrieve your current setting for Google Analytics.** @@ -5585,7 +5585,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Update Open Tracking Settings **This endpoint allows you to update your current settings for open tracking.** @@ -5613,7 +5613,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Get Open Tracking Settings **This endpoint allows you to retrieve your current settings for open tracking.** @@ -5640,7 +5640,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Update Subscription Tracking Settings **This endpoint allows you to update your current settings for subscription tracking.** @@ -5668,7 +5668,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Subscription Tracking Settings **This endpoint allows you to retrieve your current settings for subscription tracking.** @@ -5695,7 +5695,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` # USER @@ -5727,7 +5727,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve your credit balance **This endpoint allows you to retrieve the current credit balance for your account.** @@ -5750,7 +5750,7 @@ Your monthly credit allotment limits the number of emails you may send before in } catch (IOException ex) { throw ex; } - ``` +``` ## Update your account email address **This endpoint allows you to update the email address currently on file for your account.** @@ -5778,7 +5778,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve your account email address **This endpoint allows you to retrieve the email address currently on file for your account.** @@ -5805,7 +5805,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Update your password **This endpoint allows you to update your password.** @@ -5833,7 +5833,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Update a user's profile **This endpoint allows you to update your current profile details.** @@ -5863,7 +5863,7 @@ It should be noted that any one or more of the parameters can be updated via the } catch (IOException ex) { throw ex; } - ``` +``` ## Get a user's profile Keeping your user profile up to date is important. This will help Twilio SendGrid to verify who you are as well as contact you should we need to. @@ -5888,7 +5888,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Cancel or pause a scheduled send **This endpoint allows you to cancel or pause an email that has been scheduled to be sent.** @@ -5896,7 +5896,7 @@ For more information about your user profile: If the maximum number of cancellations/pauses are added, HTTP 400 will be returned. -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends canceled less than 10 minutes before the scheduled time are not guaranteed to be canceled. ### POST /user/scheduled_sends @@ -5915,12 +5915,12 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all scheduled sends **This endpoint allows you to retrieve all cancel/paused scheduled send information.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends canceled less than 10 minutes before the scheduled time are not guaranteed to be canceled. ### GET /user/scheduled_sends @@ -5938,12 +5938,12 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen } catch (IOException ex) { throw ex; } - ``` +``` ## Update user scheduled send information **This endpoint allows you to update the status of a scheduled send for the given `batch_id`.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends canceled less than 10 minutes before the scheduled time are not guaranteed to be canceled. ### PATCH /user/scheduled_sends/{batch_id} @@ -5962,12 +5962,12 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve scheduled send **This endpoint allows you to retrieve the cancel/paused scheduled send information for a specific `batch_id`.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends canceled less than 10 minutes before the scheduled time are not guaranteed to be canceled. ### GET /user/scheduled_sends/{batch_id} @@ -5985,7 +5985,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a cancellation or pause of a scheduled send **This endpoint allows you to delete the cancellation/pause of a scheduled send.** @@ -6008,7 +6008,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen } catch (IOException ex) { throw ex; } - ``` +``` ## Update Enforced TLS settings **This endpoint allows you to update your current Enforced TLS settings.** @@ -6034,7 +6034,7 @@ The Enforced TLS settings specify whether or not the recipient is required to su } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve current Enforced TLS settings. **This endpoint allows you to retrieve your current Enforced TLS settings.** @@ -6059,7 +6059,7 @@ The Enforced TLS settings specify whether or not the recipient is required to su } catch (IOException ex) { throw ex; } - ``` +``` ## Update your username **This endpoint allows you to update the username for your account.** @@ -6087,7 +6087,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve your username **This endpoint allows you to retrieve your current account username.** @@ -6114,7 +6114,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Update Event Notification Settings **This endpoint allows you to update your current event webhook settings.** @@ -6142,7 +6142,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Event Webhook settings **This endpoint allows you to retrieve your current event webhook settings.** @@ -6169,7 +6169,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete } catch (IOException ex) { throw ex; } - ``` +``` ## Test Event Notification Settings **This endpoint allows you to test your event webhook by sending a fake event notification post to the provided URL.** @@ -6195,7 +6195,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete } catch (IOException ex) { throw ex; } - ``` +``` ## Create a parse setting **This endpoint allows you to create a new inbound parse setting.** @@ -6219,7 +6219,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all parse settings **This endpoint allows you to retrieve all of your current inbound parse settings.** @@ -6242,7 +6242,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting } catch (IOException ex) { throw ex; } - ``` +``` ## Update a parse setting **This endpoint allows you to update a specific inbound parse setting.** @@ -6266,7 +6266,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific parse setting **This endpoint allows you to retrieve a specific inbound parse setting.** @@ -6289,7 +6289,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a parse setting **This endpoint allows you to delete a specific inbound parse setting.** @@ -6312,7 +6312,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieves Inbound Parse Webhook statistics. **This endpoint allows you to retrieve the statistics for your Parse Webhook usage.** @@ -6342,4 +6342,4 @@ There are a number of pre-made integrations for the Twilio SendGrid Parse Webhoo } catch (IOException ex) { throw ex; } - ``` +``` diff --git a/USE_CASES.md b/USE_CASES.md index 5af8f674..e2afdb41 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -1,4 +1,4 @@ -This documentation provides examples for specific use cases. Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues) or make a pull request for any use cases you would like us to document here. Thank you! +This document provides examples for specific use cases. Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues) or make a pull request for any use cases you would like us to document here. Thank you! # Use Cases @@ -223,7 +223,7 @@ public class Example { # How to Setup a Domain Authentication -You can find documentation for how to setup a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](USAGE.md#sender-authentication). +You can find documentation for how to set up a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](USAGE.md#sender-authentication). Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). From 36707b71f6ef9c9f9b6a08f86862f40d4ddae028 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Fri, 28 Aug 2020 14:45:36 -0700 Subject: [PATCH 316/439] chore: move encrypted tokens to environment variables --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ff279202..54e0417b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,5 +23,4 @@ notifications: on_pull_requests: false on_success: never on_failure: change - rooms: - - secure: q2SEemDXFLu/2G2I7oD02+YsM5Q0G27j+b4P1BcReWqVHhRz9L+iyuYWhIXJ6hW0omL5V2XrZ65uqb4f/SD7b89oXRGToVxfykrBzcas1tqIIp9lldd1u2eMc59zALX4nkTlE0T4UFLwEvoeY8aXoD/dNytSy6M2F5c2nYcmoN0= + rooms: $SLACK_TOKEN From ae6ee304cfe197b3002fef1e14ef1241734dfc16 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Tue, 1 Sep 2020 13:23:02 -0700 Subject: [PATCH 317/439] Revert "chore: move encrypted tokens to environment variables" This reverts commit 36707b71 --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 54e0417b..ff279202 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,4 +23,5 @@ notifications: on_pull_requests: false on_success: never on_failure: change - rooms: $SLACK_TOKEN + rooms: + - secure: q2SEemDXFLu/2G2I7oD02+YsM5Q0G27j+b4P1BcReWqVHhRz9L+iyuYWhIXJ6hW0omL5V2XrZ65uqb4f/SD7b89oXRGToVxfykrBzcas1tqIIp9lldd1u2eMc59zALX4nkTlE0T4UFLwEvoeY8aXoD/dNytSy6M2F5c2nYcmoN0= From 47783ddd1ec52004ce45697a00163b2ac37cf1a1 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 16 Sep 2020 19:52:57 +0000 Subject: [PATCH 318/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0728a93f..cc4e2420 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-09-16] Version 4.6.5 +-------------------------- +**Library - Docs** +- [PR #477](https://github.com/sendgrid/sendgrid-java/pull/477): Run *.md documents through Grammer.ly. Thanks to [@vinird](https://github.com/vinird)! + + [2020-08-19] Version 4.6.4 -------------------------- **Library - Docs** From ad48e143c827e981402a3d14ac4449eb84575402 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 16 Sep 2020 20:09:04 +0000 Subject: [PATCH 319/439] Release 4.6.5 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dbfb552d..12132145 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.4/sendgrid-4.6.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.4/sendgrid-4.6.4-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.5/sendgrid-4.6.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.5/sendgrid-4.6.5-jar.jar:. Example ``` diff --git a/README.md b/README.md index e71eb696..c0189b90 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.4.** +**The default branch name for this repository has been changed to `main` as of 4.6.5.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.4 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.5 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.4' + implementation 'com.sendgrid:sendgrid-java:4.6.5' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.4/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.5/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index a5498ec4..5b750743 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.4 + 4.6.5 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.4 + 4.6.5 @@ -286,7 +286,7 @@ com.sendgrid java-http-client - 4.3.5 + 4.3.6 com.fasterxml.jackson.core diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 9758f5d8..f122f3e3 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.4"; + private static final String VERSION = "4.6.5"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 1092fd07..d19796fd 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.4"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.5"); } @Test From 099373157b22525065fe6c7301f297ca90d24f5f Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Thu, 17 Sep 2020 16:51:43 -0500 Subject: [PATCH 320/439] fix: update the eventwebhook sample data, example, tests, and byte handling (#649) --- examples/helpers/eventwebhook/Example.java | 56 +++++--- .../helpers/eventwebhook/EventWebhook.java | 52 +++++--- .../eventwebhook/EventWebhookTest.java | 121 ++++++++++++++++-- 3 files changed, 185 insertions(+), 44 deletions(-) diff --git a/examples/helpers/eventwebhook/Example.java b/examples/helpers/eventwebhook/Example.java index 786d5902..6077736a 100644 --- a/examples/helpers/eventwebhook/Example.java +++ b/examples/helpers/eventwebhook/Example.java @@ -1,27 +1,49 @@ import com.sendgrid.helpers.eventwebhook.EventWebhook; -import java.security.PublicKey; +import com.sendgrid.helpers.eventwebhook.EventWebhookHeader; +import com.twilio.security.RequestValidator; +import com.twilio.twiml.MessagingResponse; +import com.twilio.twiml.messaging.Body; +import com.twilio.twiml.messaging.Message; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import spark.Route; + import java.security.Security; import java.security.interfaces.ECPublicKey; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.util.HashMap; +import java.util.Map; -public class Example { +import static spark.Spark.post; +public class Example { public static void main(String[] args) { Security.addProvider(new BouncyCastleProvider()); - try { - String publicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEDr2LjtURuePQzplybdC+u4CwrqDqBaWjcMMsTbhdbcwHBcepxo7yAQGhHPTnlvFYPAZFceEu/1FwCM/QmGUhA=="; - String payload = "{\"category\":\"example_payload\",\"event\":\"test_event\",\"message_id\":\"message_id\"}"; - String signature = "MEUCIQCtIHJeH93Y+qpYeWrySphQgpNGNr/U+UyUlBkU6n7RAwIgJTz2C+8a8xonZGi6BpSzoQsbVRamr2nlxFDWYNH2j/0="; - String timestamp = "1588788367"; - EventWebhook ew = new EventWebhook(); - ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(publicKey); - boolean valid = ew.VerifySignature(ellipticCurvePublicKey, payload, signature, timestamp); - System.out.println("Valid Signature: " + valid); - } catch (Exception exception) { - Logger.getLogger(Example.class.getName()).log(Level.SEVERE, "something went wrong", exception); - } + final Route webhookHandler = (req, res) -> { + try { + final String publicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE83T4O/n84iotIvIW4mdBgQ/7dAfSmpqIM8kF9mN1flpVKS3GRqe62gw+2fNNRaINXvVpiglSI8eNEc6wEA3F+g=="; + + final String signature = req.headers(EventWebhookHeader.SIGNATURE.toString()); + final String timestamp = req.headers(EventWebhookHeader.TIMESTAMP.toString()); + final byte[] requestBody = req.bodyAsBytes(); + + final EventWebhook ew = new EventWebhook(); + final ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(publicKey); + final boolean valid = ew.VerifySignature(ellipticCurvePublicKey, requestBody, signature, timestamp); + System.out.println("Valid Signature: " + valid); + + if (valid) { + res.status(204); + } else { + res.status(403); + } + + return null; + } catch (final Exception exception) { + res.status(500); + return exception.toString(); + } + }; + + post("/sendgrid/webhook", webhookHandler); } } diff --git a/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java index 6e52bd38..0898133b 100644 --- a/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java +++ b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java @@ -1,11 +1,8 @@ package com.sendgrid.helpers.eventwebhook; -import java.security.InvalidKeyException; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.Signature; -import java.security.SignatureException; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.security.*; import java.security.interfaces.ECPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; @@ -19,7 +16,7 @@ public class EventWebhook { /** * Convert the public key string to a ECPublicKey. - * + * * @param publicKey: verification key under Mail Settings * @return a public key using the ECDSA algorithm * @throws NoSuchAlgorithmException @@ -27,17 +24,18 @@ public class EventWebhook { * @throws InvalidKeySpecException */ public java.security.interfaces.ECPublicKey ConvertPublicKeyToECDSA(String publicKey) - throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException { + throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException { byte[] publicKeyInBytes = Base64.getDecoder().decode(publicKey); KeyFactory factory = KeyFactory.getInstance("ECDSA", "BC"); return (ECPublicKey) factory.generatePublic(new X509EncodedKeySpec(publicKeyInBytes)); } + /** * Verify signed event webhook requests. - * + * * @param publicKey: elliptic curve public key - * @param payload: event payload in the request body + * @param payload: event payload string in the request body * @param signature: value obtained from the * 'X-Twilio-Email-Event-Webhook-Signature' header * @param timestamp: value obtained from the @@ -47,20 +45,44 @@ public java.security.interfaces.ECPublicKey ConvertPublicKeyToECDSA(String publi * @throws NoSuchProviderException * @throws InvalidKeyException * @throws SignatureException + * @throws IOException */ public boolean VerifySignature(ECPublicKey publicKey, String payload, String signature, String timestamp) - throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException { + throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException, IOException { + return VerifySignature(publicKey, payload.getBytes(), signature, timestamp); + } + + /** + * Verify signed event webhook requests. + * + * @param publicKey: elliptic curve public key + * @param payload: event payload bytes in the request body + * @param signature: value obtained from the + * 'X-Twilio-Email-Event-Webhook-Signature' header + * @param timestamp: value obtained from the + * 'X-Twilio-Email-Event-Webhook-Timestamp' header + * @return true or false if signature is valid + * @throws NoSuchAlgorithmException + * @throws NoSuchProviderException + * @throws InvalidKeyException + * @throws SignatureException + * @throws IOException + */ + public boolean VerifySignature(ECPublicKey publicKey, byte[] payload, String signature, String timestamp) + throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException, IOException { // prepend the payload with the timestamp - String payloadWithTimestamp = timestamp + payload; + final ByteArrayOutputStream payloadWithTimestamp = new ByteArrayOutputStream(); + payloadWithTimestamp.write(timestamp.getBytes()); + payloadWithTimestamp.write(payload); // create the signature object - Signature signatureObject = Signature.getInstance("SHA256withECDSA", "BC"); + final Signature signatureObject = Signature.getInstance("SHA256withECDSA", "BC"); signatureObject.initVerify(publicKey); - signatureObject.update(payloadWithTimestamp.getBytes()); + signatureObject.update(payloadWithTimestamp.toByteArray()); // decode the signature - byte[] signatureInBytes = Base64.getDecoder().decode(signature); + final byte[] signatureInBytes = Base64.getDecoder().decode(signature); // verify the signature return signatureObject.verify(signatureInBytes); diff --git a/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java b/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java index 434201bb..d73cedbc 100644 --- a/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java +++ b/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java @@ -1,27 +1,124 @@ package com.sendgrid.helpers.eventwebhook; -import java.security.Security; -import java.security.interfaces.ECPublicKey; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; +import java.security.Security; +import java.security.interfaces.ECPublicKey; +import java.util.Collections; +import java.util.List; + public class EventWebhookTest { + private static class Event { + public Event(final String email, + final String event, + final String reason, + final String sgEventId, + final String sgMessageId, + final String smtpId, + final long timestamp) { + this.email = email; + this.event = event; + this.reason = reason; + this.sgEventId = sgEventId; + this.sgMessageId = sgMessageId; + this.smtpId = smtpId; + this.timestamp = timestamp; + } + + public String email; + public String event; + public String reason; + @JsonProperty("sg_event_id") + public String sgEventId; + @JsonProperty("sg_message_id") + public String sgMessageId; + @JsonProperty("smtp-id") + public String smtpId; + @JsonProperty("timestamp") + public long timestamp; + } + + private static final String PUBLIC_KEY = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE83T4O/n84iotIvIW4mdBgQ/7dAfSmpqIM8kF9mN1flpVKS3GRqe62gw+2fNNRaINXvVpiglSI8eNEc6wEA3F+g=="; + private static final String SIGNATURE = "MEUCIGHQVtGj+Y3LkG9fLcxf3qfI10QysgDWmMOVmxG0u6ZUAiEAyBiXDWzM+uOe5W0JuG+luQAbPIqHh89M15TluLtEZtM="; + private static final String TIMESTAMP = "1600112502"; + private static final List EVENTS = Collections.singletonList(new Event( + "hello@world.com", + "dropped", + "Bounced Address", + "ZHJvcC0xMDk5NDkxOS1MUnpYbF9OSFN0T0doUTRrb2ZTbV9BLTA", + "LRzXl_NHStOGhQ4kofSm_A.filterdrecv-p3mdw1-756b745b58-kmzbl-18-5F5FC76C-9.0", + "", + 1600112492)); + + private static String PAYLOAD; + + @BeforeClass + public static void setUp() throws JsonProcessingException { + Security.addProvider(new BouncyCastleProvider()); + + // Be sure to include the trailing carriage return and newline! + PAYLOAD = new ObjectMapper().writeValueAsString(EVENTS) + "\r\n"; + } + @Test public void testVerifySignature() throws Exception { + Assert.assertTrue(verify( + PUBLIC_KEY, + PAYLOAD, + SIGNATURE, + TIMESTAMP + )); + } - Security.addProvider(new BouncyCastleProvider()); + @Test + public void testBadKey() throws Exception { + Assert.assertFalse(verify( + "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqTxd43gyp8IOEto2LdIfjRQrIbsd4SXZkLW6jDutdhXSJCWHw8REntlo7aNDthvj+y7GjUuFDb/R1NGe1OPzpA==", + PAYLOAD, + SIGNATURE, + TIMESTAMP + )); + } + + @Test + public void testBadPayload() throws Exception { + Assert.assertFalse(verify( + PUBLIC_KEY, + "payload", + SIGNATURE, + TIMESTAMP + )); + } - String testPublicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEDr2LjtURuePQzplybdC+u4CwrqDqBaWjcMMsTbhdbcwHBcepxo7yAQGhHPTnlvFYPAZFceEu/1FwCM/QmGUhA=="; - String testPayload = "{\"category\":\"example_payload\",\"event\":\"test_event\",\"message_id\":\"message_id\"}"; - String testSignature = "MEUCIQCtIHJeH93Y+qpYeWrySphQgpNGNr/U+UyUlBkU6n7RAwIgJTz2C+8a8xonZGi6BpSzoQsbVRamr2nlxFDWYNH2j/0="; - String testTimestamp = "1588788367"; + @Test + public void testBadSignature() throws Exception { + Assert.assertFalse(verify( + PUBLIC_KEY, + PAYLOAD, + "MEUCIQCtIHJeH93Y+qpYeWrySphQgpNGNr/U+UyUlBkU6n7RAwIgJTz2C+8a8xonZGi6BpSzoQsbVRamr2nlxFDWYNH3j/0=", + TIMESTAMP + )); + } - EventWebhook ew = new EventWebhook(); - ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(testPublicKey); - boolean isValidSignature = ew.VerifySignature(ellipticCurvePublicKey, testPayload, testSignature, - testTimestamp); + @Test + public void testBadTimestamp() throws Exception { + Assert.assertFalse(verify( + PUBLIC_KEY, + PAYLOAD, + SIGNATURE, + "timestamp" + )); + } - Assert.assertTrue(isValidSignature); + private boolean verify(final String publicKey, final String payload, final String signature, final String timestamp) throws Exception { + final EventWebhook ew = new EventWebhook(); + final ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(publicKey); + return ew.VerifySignature(ellipticCurvePublicKey, payload, signature, timestamp); } } From 48264f5076fd471571eda309caba7036974a58cf Mon Sep 17 00:00:00 2001 From: Martin Macko Date: Mon, 21 Sep 2020 16:36:37 +0200 Subject: [PATCH 321/439] docs: Update documentation for GET /templates (#504) --- USAGE.md | 1 + examples/templates/templates.java | 1 + 2 files changed, 2 insertions(+) diff --git a/USAGE.md b/USAGE.md index 08487720..6a482cb4 100644 --- a/USAGE.md +++ b/USAGE.md @@ -5206,6 +5206,7 @@ Transactional templates are templates created specifically for transactional ema Request request = new Request(); request.setMethod(Method.GET); request.setEndpoint("templates"); + request.addQueryParam("generations", "legacy,dynamic") Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); diff --git a/examples/templates/templates.java b/examples/templates/templates.java index a16c4bed..4fcf3886 100644 --- a/examples/templates/templates.java +++ b/examples/templates/templates.java @@ -42,6 +42,7 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.setMethod(Method.GET); request.setEndpoint("templates"); + request.addQueryParam("generations", "legacy,dynamic") Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); From b7de4b605d01df04e0623784e37bdef911a11ebd Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 21 Sep 2020 10:25:30 -0500 Subject: [PATCH 322/439] docs: update legacy/dynamic transactional template doc links --- USE_CASES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/USE_CASES.md b/USE_CASES.md index e2afdb41..20e9906e 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -14,7 +14,7 @@ This document provides examples for specific use cases. Please [open an issue](h # Transactional Templates -For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. +For this example, we assume you have created a [dynamic transactional template](https://sendgrid.com/docs/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates/) in the UI or via the API. Following is the template content we used for testing. Template ID (replace with your own): @@ -114,7 +114,7 @@ public class Example { # Legacy Templates -For this example, we assume you have created a [legacy template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. +For this example, we assume you have created a [legacy transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. Template ID (replace with your own): From 5c0f717933d748f4829c12193ba9236fb1e40262 Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 28 Sep 2020 20:13:08 +0000 Subject: [PATCH 323/439] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc4e2420..22a4f43b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-09-28] Version 4.6.6 +-------------------------- +**Library - Docs** +- [PR #504](https://github.com/sendgrid/sendgrid-java/pull/504): Update documentation for GET /templates. Thanks to [@LinkedList](https://github.com/LinkedList)! + +**Library - Fix** +- [PR #649](https://github.com/sendgrid/sendgrid-java/pull/649): update the eventwebhook sample data, example, tests, and byte handling. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-09-16] Version 4.6.5 -------------------------- **Library - Docs** From 1eb78b1ed660ef7ef3f70407929573ffef3d8fa5 Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 28 Sep 2020 20:49:04 +0000 Subject: [PATCH 324/439] Release 4.6.6 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 12132145..8c16dcc8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.5/sendgrid-4.6.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.5/sendgrid-4.6.5-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.6/sendgrid-4.6.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.6/sendgrid-4.6.6-jar.jar:. Example ``` diff --git a/README.md b/README.md index c0189b90..583f7245 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.5.** +**The default branch name for this repository has been changed to `main` as of 4.6.6.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.5 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.6 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.5' + implementation 'com.sendgrid:sendgrid-java:4.6.6' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.5/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.6/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 5b750743..8d26156c 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.5 + 4.6.6 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.5 + 4.6.6 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index f122f3e3..80a8733d 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.5"; + private static final String VERSION = "4.6.6"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index d19796fd..58e8e375 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.5"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.6"); } @Test From 1d838bd97789444079cc0e8e688532e1e57ac7af Mon Sep 17 00:00:00 2001 From: "Julian J. Maurer" Date: Wed, 30 Sep 2020 01:40:04 +0200 Subject: [PATCH 325/439] docs: reorganize examples (#360) --- examples/categories/README.md | 7 ++ .../categories/RetrieveAllCategories.java | 33 +++++++ .../RetrieveStatisticsForCategories.java | 36 ++++++++ .../categories/RetrieveSumsForCategories.java | 38 ++++++++ examples/categories/categories.java | 91 ------------------- 5 files changed, 114 insertions(+), 91 deletions(-) create mode 100644 examples/categories/README.md create mode 100644 examples/categories/RetrieveAllCategories.java create mode 100644 examples/categories/RetrieveStatisticsForCategories.java create mode 100644 examples/categories/RetrieveSumsForCategories.java delete mode 100644 examples/categories/categories.java diff --git a/examples/categories/README.md b/examples/categories/README.md new file mode 100644 index 00000000..4ac50544 --- /dev/null +++ b/examples/categories/README.md @@ -0,0 +1,7 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + +This folder contains various examples on using the Categories endpoint of SendGrid with Java: + +* [Retrieve all categories (GET /categories)](RetrieveAllCategories.java) +* [Retrieve Email Statistics for Categories (GET /categories/stats)](RetrieveStatisticsForCategories.java) +* [Retrieve sums of email stats for each category (GET /categories/stats/sums)](RetrieveSumsForCategories.java) \ No newline at end of file diff --git a/examples/categories/RetrieveAllCategories.java b/examples/categories/RetrieveAllCategories.java new file mode 100644 index 00000000..aa1ab2b6 --- /dev/null +++ b/examples/categories/RetrieveAllCategories.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all categories +// GET /categories + + +public class RetrieveAllCategories { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("categories"); + request.addQueryParam("category", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/categories/RetrieveStatisticsForCategories.java b/examples/categories/RetrieveStatisticsForCategories.java new file mode 100644 index 00000000..b02cf247 --- /dev/null +++ b/examples/categories/RetrieveStatisticsForCategories.java @@ -0,0 +1,36 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve Email Statistics for Categories +// GET /categories/stats + + +public class RetrieveMailStatisticsForCategories { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("categories/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("categories", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/categories/RetrieveSumsForCategories.java b/examples/categories/RetrieveSumsForCategories.java new file mode 100644 index 00000000..a82e8e2d --- /dev/null +++ b/examples/categories/RetrieveSumsForCategories.java @@ -0,0 +1,38 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] +// GET /categories/stats/sums + + +public class RetrieveSumsForCategories { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("categories/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/categories/categories.java b/examples/categories/categories.java deleted file mode 100644 index 7ac73822..00000000 --- a/examples/categories/categories.java +++ /dev/null @@ -1,91 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Retrieve all categories -// GET /categories - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("categories"); - request.addQueryParam("category", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve Email Statistics for Categories -// GET /categories/stats - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("categories/stats"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("categories", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] -// GET /categories/stats/sums - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("categories/stats/sums"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("sort_by_direction", "asc"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From afcd7f5bc91b42c5c5a0ea1d35b9ce45cbc197ee Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 14 Oct 2020 18:21:11 +0000 Subject: [PATCH 326/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22a4f43b..4e22590b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-10-14] Version 4.6.7 +-------------------------- +**Library - Docs** +- [PR #360](https://github.com/sendgrid/sendgrid-java/pull/360): reorganize examples. Thanks to [@derjayjay](https://github.com/derjayjay)! + + [2020-09-28] Version 4.6.6 -------------------------- **Library - Docs** From 8db137f058faaf08c700997e9f533be1c3b123ea Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 14 Oct 2020 19:30:28 +0000 Subject: [PATCH 327/439] Release 4.6.7 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8c16dcc8..0ccdb92b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.6/sendgrid-4.6.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.6/sendgrid-4.6.6-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.7/sendgrid-4.6.7-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.7/sendgrid-4.6.7-jar.jar:. Example ``` diff --git a/README.md b/README.md index 583f7245..f0fdb548 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.6.** +**The default branch name for this repository has been changed to `main` as of 4.6.7.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.6 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.7 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.6' + implementation 'com.sendgrid:sendgrid-java:4.6.7' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.6/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.7/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 8d26156c..37f5c201 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.6 + 4.6.7 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.6 + 4.6.7 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 80a8733d..ebab63ed 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.6"; + private static final String VERSION = "4.6.7"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 58e8e375..f6556e87 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.6"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.7"); } @Test From 1344f938821fc059b9c22f9ceb9d681eaf5779d2 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Wed, 14 Oct 2020 17:22:48 -0400 Subject: [PATCH 328/439] chore: fix spelling typos (#650) --- CHANGELOG.md | 2 +- FIRST_TIMERS.md | 14 ++++---- USAGE.md | 36 +++++++++---------- USE_CASES.md | 2 +- examples/accesssettings/Example.java | 2 +- examples/ips/RetrieveAllPools.java | 2 +- ...GetEnforedTLS.java => GetEnforcedTLS.java} | 0 examples/user/README.md | 2 +- .../java/com/sendgrid/RateLimitException.java | 2 +- .../java/com/sendgrid/helpers/mail/Mail.java | 6 ++-- .../helpers/AttachmentBuilderTest.java | 6 ++-- 11 files changed, 37 insertions(+), 37 deletions(-) rename examples/user/{GetEnforedTLS.java => GetEnforcedTLS.java} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e22590b..b4779fe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ All notable changes to this project will be documented in this file. [2020-09-16] Version 4.6.5 -------------------------- **Library - Docs** -- [PR #477](https://github.com/sendgrid/sendgrid-java/pull/477): Run *.md documents through Grammer.ly. Thanks to [@vinird](https://github.com/vinird)! +- [PR #477](https://github.com/sendgrid/sendgrid-java/pull/477): Run *.md documents through Grammar.ly. Thanks to [@vinird](https://github.com/vinird)! [2020-08-19] Version 4.6.4 diff --git a/FIRST_TIMERS.md b/FIRST_TIMERS.md index 47cf5425..9db04724 100644 --- a/FIRST_TIMERS.md +++ b/FIRST_TIMERS.md @@ -61,13 +61,13 @@ Before creating a pull request, make sure that you respect the repository's cons * [Node.js SDK](https://github.com/sendgrid/sendgrid-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Java SDK](https://github.com/sendgrid/sendgrid-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Go SDK](https://github.com/sendgrid/sendgrid-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Python STMPAPI Client](https://github.com/sendgrid/smtpapi-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [PHP STMPAPI Client](https://github.com/sendgrid/smtpapi-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [C# STMPAPI Client](https://github.com/sendgrid/smtpapi-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Ruby STMPAPI Client](https://github.com/sendgrid/smtpapi-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Node.js STMPAPI Client](https://github.com/sendgrid/smtpapi-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Java STMPAPI Client](https://github.com/sendgrid/smtpapi-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Go STMPAPI Client](https://github.com/sendgrid/smtpapi-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Python SMTPAPI Client](https://github.com/sendgrid/smtpapi-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [PHP SMTPAPI Client](https://github.com/sendgrid/smtpapi-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [C# SMTPAPI Client](https://github.com/sendgrid/smtpapi-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Ruby SMTPAPI Client](https://github.com/sendgrid/smtpapi-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Node.js SMTPAPI Client](https://github.com/sendgrid/smtpapi-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Java SMTPAPI Client](https://github.com/sendgrid/smtpapi-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Go SMTPAPI Client](https://github.com/sendgrid/smtpapi-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Python HTTP Client](https://github.com/sendgrid/python-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [PHP HTTP Client](https://github.com/sendgrid/php-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [C# HTTP Client](https://github.com/sendgrid/csharp-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) diff --git a/USAGE.md b/USAGE.md index 6a482cb4..e5b3e1d2 100644 --- a/USAGE.md +++ b/USAGE.md @@ -546,7 +546,7 @@ Each user can create up to 25 different suppression groups. Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("asm/groups"); - request.setBody("{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product) Suggestions\"}"; + request.setBody("{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product) Suggestions\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -941,7 +941,7 @@ For more information: Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("campaigns"); - request.setBody("{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our) spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + request.setBody("{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

    Check out our) spring line!

    \",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -998,7 +998,7 @@ For more information: Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("campaigns/{campaign_id}"); - request.setBody("{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + request.setBody("{\"html_content\":\"

    Check out our summer line!

    \",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -1760,7 +1760,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("contactdb/recipients"); - request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last)_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last)_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -2033,7 +2033,7 @@ For more information about segments in Marketing Campaigns, please see our [User Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("contactdb/segments"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and)_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and)_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -2084,7 +2084,7 @@ For more information about segments in Marketing Campaigns, please see our [User Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("contactdb/segments/{segment_id}"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and)_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and)_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); request.addQueryParam("segment_id", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); @@ -2701,7 +2701,7 @@ This endpoint has a helper, check it out [here](src/main/java/com/sendgrid/helpe Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\")[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiving these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The Twilio SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The Twilio SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\")[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

    Hello, world!

    \"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiving these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The Twilio SendGrid Team\",\"enable\":true,\"html\":\"

    Thanks
    The Twilio SendGrid Team

    \"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3360,7 +3360,7 @@ Sender Identities are required to be verified before use. If your domain has bee Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("senders"); - request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example) INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example) INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3409,7 +3409,7 @@ Partial updates are allowed, but fields that are marked as "required" in the POS Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("senders/{sender_id}"); - request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example) INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example) INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3511,7 +3511,7 @@ For more information on domain authentication, please see our [User Guide](https Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic)_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + request.setBody("{\"automatic)_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3785,7 +3785,7 @@ For more information on domain authentication, please see our [User Guide](https throw ex; } ``` -## Remove an IP from a domain authenticaiton. +## Remove an IP from a domain authentication. **This endpoint allows you to remove a domain's IP address from that domain's authentication.** @@ -4310,7 +4310,7 @@ For more information about Subusers: Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("subusers"); - request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\)":\"John@example.com\"}"; + request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\)":\"John@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5312,7 +5312,7 @@ For more information about transactional templates, please see our [User Guide]( Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("templates/{template_id}/versions"); - request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\")<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\")<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5344,7 +5344,7 @@ For more information about transactional templates, please see our [User Guide]( Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("templates/{template_id}/versions/{version_id}"); - request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example)_name\",\"plain_content\":\"<%body%>\"}"; + request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example)_name\",\"plain_content\":\"<%body%>\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5549,7 +5549,7 @@ For more information about tracking, please see our [User Guide](https://sendgri Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("tracking_settings/google_analytics"); - request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm)_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm)_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5661,7 +5661,7 @@ For more information about tracking, please see our [User Guide](https://sendgri Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("tracking_settings/subscription"); - request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page) html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page) html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6135,7 +6135,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("user/webhooks/event/settings"); - request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\)",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\)",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6212,7 +6212,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("user/webhooks/parse/settings"); - request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam)_check\":true}"; + request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam)_check\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); diff --git a/USE_CASES.md b/USE_CASES.md index 20e9906e..b9b0613a 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -53,7 +53,7 @@ import java.io.IOException; public class Example { public static void main(String[] args) throws IOException { Mail mail = new Mail(); - mail.setFrom(new Email("teste@example.com")); + mail.setFrom(new Email("tester@example.com")); mail.setTemplateId("d-2c214ac919e84170b21855cc129b4a5f"); Personalization personalization = new Personalization(); diff --git a/examples/accesssettings/Example.java b/examples/accesssettings/Example.java index 6fd33a36..5de41ee0 100644 --- a/examples/accesssettings/Example.java +++ b/examples/accesssettings/Example.java @@ -23,7 +23,7 @@ protected Response execute(Request request) throws IOException { return response; } - protected void printResonseInfo(Response response) { + protected void printResponseInfo(Response response) { System.out.println(response.getStatusCode()); System.out.println(response.getBody()); System.out.println(response.getHeaders()); diff --git a/examples/ips/RetrieveAllPools.java b/examples/ips/RetrieveAllPools.java index 93bf78ec..c6734071 100644 --- a/examples/ips/RetrieveAllPools.java +++ b/examples/ips/RetrieveAllPools.java @@ -13,7 +13,7 @@ // GET /ips/pools -public class RetieveAllIPPools { +public class RetrieveAllIPPools { public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); diff --git a/examples/user/GetEnforedTLS.java b/examples/user/GetEnforcedTLS.java similarity index 100% rename from examples/user/GetEnforedTLS.java rename to examples/user/GetEnforcedTLS.java diff --git a/examples/user/README.md b/examples/user/README.md index 68e8370d..befb7b4f 100644 --- a/examples/user/README.md +++ b/examples/user/README.md @@ -33,7 +33,7 @@ - [Update Username](UpdateUsername.java) ## Security Settings Examples -- [Get Enforced TLS](GetEnforedTLS.java) +- [Get Enforced TLS](GetEnforcedTLS.java) - [Update Enforced TLS](UpdateEnforcedTLS.java) ## Webhook Settings Examples diff --git a/src/main/java/com/sendgrid/RateLimitException.java b/src/main/java/com/sendgrid/RateLimitException.java index 7a2570ac..5f25a075 100644 --- a/src/main/java/com/sendgrid/RateLimitException.java +++ b/src/main/java/com/sendgrid/RateLimitException.java @@ -30,7 +30,7 @@ public Request getRequest() { } /** - * Get the number of times the action was attemted. + * Get the number of times the action was attempted. * * @return the retry count. */ diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index 24eb19de..ea2b9739 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -236,7 +236,7 @@ public List getPersonalization() { } /** - * Add a personalizaton to the email. + * Add a personalization to the email. * * @param personalization a personalization. */ @@ -506,7 +506,7 @@ public void setReplyTo(Email replyTo) { } /** - * Create a string represenation of the Mail object JSON. + * Create a string representation of the Mail object JSON. * * @return a JSON string. * @throws IOException in case of a JSON marshal error. @@ -521,7 +521,7 @@ public String build() throws IOException { } /** - * Create a string represenation of the Mail object JSON and pretty print it. + * Create a string representation of the Mail object JSON and pretty print it. * * @return a pretty JSON string. * @throws IOException in case of a JSON marshal error. diff --git a/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java b/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java index 3ea3f379..adef08aa 100644 --- a/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java +++ b/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java @@ -18,18 +18,18 @@ public void testCreateAttachments() { String content = "This test checks if the builder works fine"; InputStream contentStream = new ByteArrayInputStream(content.getBytes(Charset.forName("UTF-8"))); String contentId = "someId"; - String dispositon = "someDisposition"; + String disposition = "someDisposition"; Attachments attachments = new Attachments.Builder(fileName, contentStream) .withType(type) .withContentId(contentId) - .withDisposition(dispositon) + .withDisposition(disposition) .build(); Assert.assertEquals(attachments.getType(), type); Assert.assertEquals(attachments.getFilename(), fileName); Assert.assertEquals(attachments.getContentId(), contentId); - Assert.assertEquals(attachments.getDisposition(), dispositon); + Assert.assertEquals(attachments.getDisposition(), disposition); Assert.assertEquals(attachments.getContent(), Base64.encodeBase64String(content.getBytes(Charset.forName("UTF-8")))); } From 054d4fcc47fa7fd0f8ddfdc089763ac93c410fb6 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Thu, 15 Oct 2020 11:48:22 -0400 Subject: [PATCH 329/439] chore: Fix PR link for PRs (#651) --- PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index a8681802..f5af09c3 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -21,7 +21,7 @@ A short description of what this PR does. ### Checklist - [ ] I acknowledge that all my contributions will be made under the project's license - [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) -- [ ] I have read the [Contribution Guidelines](CONTRIBUTING.md) and my PR follows them +- [ ] I have read the [Contribution Guidelines](https://github.com/sendgrid/sendgrid-java/blob/main/CONTRIBUTING.md) and my PR follows them - [ ] I have titled the PR appropriately - [ ] I have updated my branch with the main branch - [ ] I have added tests that prove my fix is effective or that my feature works From 2eb923aef91daf5b370190af04faa149d7156216 Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 15 Oct 2020 16:23:12 +0000 Subject: [PATCH 330/439] chore: update template files --- PULL_REQUEST_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index f5af09c3..1b0763ca 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -19,13 +19,13 @@ Closes #2 A short description of what this PR does. ### Checklist -- [ ] I acknowledge that all my contributions will be made under the project's license +- [x] I acknowledge that all my contributions will be made under the project's license - [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) - [ ] I have read the [Contribution Guidelines](https://github.com/sendgrid/sendgrid-java/blob/main/CONTRIBUTING.md) and my PR follows them - [ ] I have titled the PR appropriately - [ ] I have updated my branch with the main branch - [ ] I have added tests that prove my fix is effective or that my feature works -- [ ] I have added necessary documentation about the functionality in the appropriate .md file +- [ ] I have added the necessary documentation about the functionality in the appropriate .md file - [ ] I have added inline documentation to the code I modified If you have questions, please file a [support ticket](https://twilio.com/help/contact), or create a GitHub Issue in this repository. From 0f1a5ff13e8221486cd17b66231a5cf09ac7658c Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 15 Oct 2020 16:33:49 +0000 Subject: [PATCH 331/439] chore: update template files --- PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 1b0763ca..32f9ee30 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -28,4 +28,4 @@ A short description of what this PR does. - [ ] I have added the necessary documentation about the functionality in the appropriate .md file - [ ] I have added inline documentation to the code I modified -If you have questions, please file a [support ticket](https://twilio.com/help/contact), or create a GitHub Issue in this repository. +If you have questions, please file a [support ticket](https://support.sendgrid.com/hc/en-us), or create a GitHub Issue in this repository. From f6b3386e634462c5bcf4943eff0744f0c2ac5a68 Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 15 Oct 2020 21:27:07 +0000 Subject: [PATCH 332/439] chore: update template files --- PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 32f9ee30..a2fca138 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -28,4 +28,4 @@ A short description of what this PR does. - [ ] I have added the necessary documentation about the functionality in the appropriate .md file - [ ] I have added inline documentation to the code I modified -If you have questions, please file a [support ticket](https://support.sendgrid.com/hc/en-us), or create a GitHub Issue in this repository. +If you have questions, please file a [support ticket](https://support.sendgrid.com), or create a GitHub Issue in this repository. From a38756798b05296db98de1c60ab2ea324612cac0 Mon Sep 17 00:00:00 2001 From: Twilio Date: Tue, 27 Oct 2020 21:32:27 +0000 Subject: [PATCH 333/439] chore: update template files --- LICENSE.md => LICENSE | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE.md => LICENSE (100%) diff --git a/LICENSE.md b/LICENSE similarity index 100% rename from LICENSE.md rename to LICENSE From a95ef4836597da18250a834f33308ee9da44bbb7 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 27 Oct 2020 16:42:34 -0500 Subject: [PATCH 334/439] chore: update license references --- README.md | 4 ++-- pom.xml | 4 ++-- src/test/java/com/sendgrid/LicenseTest.java | 2 +- src/test/java/com/sendgrid/TestRequiredFilesExist.java | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f0fdb548..3610fb10 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) [![Open Source Helpers](https://www.codetriage.com/sendgrid/sendgrid-java/badges/users.svg)](https://www.codetriage.com/sendgrid/sendgrid-java) -[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.md) +[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. @@ -233,4 +233,4 @@ If you've instead found a bug in the library or would like new features added, g # License -[The MIT License (MIT)](LICENSE.md) +[The MIT License (MIT)](LICENSE) diff --git a/pom.xml b/pom.xml index 37f5c201..439765b7 100644 --- a/pom.xml +++ b/pom.xml @@ -159,7 +159,7 @@ ${basedir} - LICENSE.md + LICENSE @@ -330,4 +330,4 @@ - \ No newline at end of file + diff --git a/src/test/java/com/sendgrid/LicenseTest.java b/src/test/java/com/sendgrid/LicenseTest.java index 96bf096c..1f96ef70 100644 --- a/src/test/java/com/sendgrid/LicenseTest.java +++ b/src/test/java/com/sendgrid/LicenseTest.java @@ -12,7 +12,7 @@ public class LicenseTest { @Test public void testLicenseShouldHaveCorrectYear() throws IOException { String copyrightText = null; - try (BufferedReader br = new BufferedReader(new FileReader("./LICENSE.md"))) { + try (BufferedReader br = new BufferedReader(new FileReader("./LICENSE"))) { for (String line; (line = br.readLine()) != null; ) { if (line.startsWith("Copyright")) { copyrightText = line; diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index 62eda186..4efc2f04 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -70,10 +70,10 @@ public void checkIssuesTemplateExists() { assertTrue(new File("./ISSUE_TEMPLATE.md").exists()); } - // ./LICENSE.md + // ./LICENSE @Test public void checkLicenseExists() { - assertTrue(new File("./LICENSE.md").exists()); + assertTrue(new File("./LICENSE").exists()); } // ./PULL_REQUEST_TEMPLATE.md From 2844ac05cf6f32a0fe7d7f6ef984133fba13f083 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 30 Oct 2020 14:17:14 -0700 Subject: [PATCH 335/439] chore: update badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3610fb10..75e809a3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![SendGrid Logo](twilio_sendgrid_logo.png) -[![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=main)](https://travis-ci.org/sendgrid/sendgrid-java) +[![Travis Badge](https://travis-ci.com/sendgrid/sendgrid-java.svg?branch=main)](https://travis-ci.com/sendgrid/sendgrid-java) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) From 7cf8b2835d88c3bb3830c8a62a6374b38ab60b37 Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 5 Nov 2020 21:41:46 +0000 Subject: [PATCH 336/439] [Librarian] Version Bump --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4779fe9..87888fb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-11-05] Version 4.6.8 +-------------------------- +**Library - Chore** +- [PR #651](https://github.com/sendgrid/sendgrid-java/pull/651): Fix PR link for PRs. Thanks to [@jsoref](https://github.com/jsoref)! +- [PR #650](https://github.com/sendgrid/sendgrid-java/pull/650): fix spelling typos. Thanks to [@jsoref](https://github.com/jsoref)! + + [2020-10-14] Version 4.6.7 -------------------------- **Library - Docs** From ab6708168678b7f7130e363e6f8448b1f0609186 Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 5 Nov 2020 21:56:29 +0000 Subject: [PATCH 337/439] Release 4.6.8 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 8 ++++---- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0ccdb92b..cbd779c1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.7/sendgrid-4.6.7-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.7/sendgrid-4.6.7-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.8/sendgrid-4.6.8-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.8/sendgrid-4.6.8-jar.jar:. Example ``` diff --git a/README.md b/README.md index 75e809a3..e33997ca 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.7.** +**The default branch name for this repository has been changed to `main` as of 4.6.8.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.7 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.8 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.7' + implementation 'com.sendgrid:sendgrid-java:4.6.8' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.7/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.8/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 439765b7..4bc94f9e 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.7 + 4.6.8 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.7 + 4.6.8 @@ -318,7 +318,7 @@ org.bouncycastle bcprov-jdk15on - 1.66 + 1.67 @@ -330,4 +330,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index ebab63ed..8f284f41 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.7"; + private static final String VERSION = "4.6.8"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index f6556e87..e93c1199 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.7"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.8"); } @Test From 4670d0613242dfa9bf196729898bc1b1b157598d Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 6 Nov 2020 22:49:30 +0300 Subject: [PATCH 338/439] docs: Fix code issues in examples/clients/clients.java (#357) --- examples/clients/GetEmailStatistics.java | 32 ++++++++++ .../GetEmailStatisticsByClientType.java | 32 ++++++++++ examples/clients/README.md | 6 ++ examples/clients/clients.java | 59 ------------------- 4 files changed, 70 insertions(+), 59 deletions(-) create mode 100644 examples/clients/GetEmailStatistics.java create mode 100644 examples/clients/GetEmailStatisticsByClientType.java create mode 100644 examples/clients/README.md delete mode 100644 examples/clients/clients.java diff --git a/examples/clients/GetEmailStatistics.java b/examples/clients/GetEmailStatistics.java new file mode 100644 index 00000000..632c817c --- /dev/null +++ b/examples/clients/GetEmailStatistics.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve email statistics by client type. +// GET /clients/stats + +public class GetEmailStatistics { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("clients/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/clients/GetEmailStatisticsByClientType.java b/examples/clients/GetEmailStatisticsByClientType.java new file mode 100644 index 00000000..eef0e2a2 --- /dev/null +++ b/examples/clients/GetEmailStatisticsByClientType.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve stats by a specific client type. +// GET /clients/{client_type}/stats + +public class GetEmailStatisticsByClientType { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("clients/{client_type}/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/clients/README.md b/examples/clients/README.md new file mode 100644 index 00000000..0c74bd24 --- /dev/null +++ b/examples/clients/README.md @@ -0,0 +1,6 @@ +![SendGrid Logo](https://github.com/sendgrid/sendgrid-java/blob/main/twilio_sendgrid_logo.png) + +This folder contains various examples on using the CLIENTS endpoint of SendGrid with Java: + +* [Retrieve email statistics by client type (GET /clients/stats)](GetEmailStatistics.java) +* [Retrieve stats by a specific client type (GET /clients/{client_type}/stats)](GetEmailStatisticsByClientType.java) diff --git a/examples/clients/clients.java b/examples/clients/clients.java deleted file mode 100644 index 9b755d86..00000000 --- a/examples/clients/clients.java +++ /dev/null @@ -1,59 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Retrieve email statistics by client type. -// GET /clients/stats - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("clients/stats"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("end_date", "2016-04-01"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve stats by a specific client type. -// GET /clients/{client_type}/stats - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("clients/{client_type}/stats"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("end_date", "2016-04-01"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From e612f643f632438f9d073588f248f6be4fdce8b8 Mon Sep 17 00:00:00 2001 From: Deepa Panwar Date: Sat, 7 Nov 2020 01:29:53 +0530 Subject: [PATCH 339/439] docs: Save attachment to Dropbox (#304) --- examples/dropbox/UploadToDropBox.java | 63 +++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 examples/dropbox/UploadToDropBox.java diff --git a/examples/dropbox/UploadToDropBox.java b/examples/dropbox/UploadToDropBox.java new file mode 100644 index 00000000..ae21fc76 --- /dev/null +++ b/examples/dropbox/UploadToDropBox.java @@ -0,0 +1,63 @@ +package dropbox; + +import com.dropbox.core.DbxRequestConfig; +import com.dropbox.core.v2.DbxClientV2; +import com.dropbox.core.v2.files.FileMetadata; +import com.sendgrid.Attachments; +import org.apache.commons.codec.binary.Base64; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.Charset; +/* + Add Dropbox dependencies for compiling code + Gradle : compile 'com.dropbox.core:dropbox-core-sdk:3.0.5' + maven : + + com.dropbox.core + dropbox-core-sdk + 3.0.5 + + */ +public class UploadToDropBox { + public static void main(String[] args) { + String fileName = "book3.txt"; + String type = "text/plain"; + String content = "This test checks if the builder works fine"; + InputStream contentStream = new ByteArrayInputStream(content.getBytes(Charset.forName("UTF-8"))); + String contentId = "someId"; + String dispositon = "someDisposition"; + String accessToken = "user's access token"; + String path = "/path/to/folder"; + + Attachments attachments = new Attachments.Builder(fileName, contentStream) + .withType(type) + .withContentId(contentId) + .withDisposition(dispositon) + .build(); + String returnPath = uploadToDropbox(attachments, accessToken, path); + System.out.println("Path: " + returnPath); + } + + /** + * Uploads attachment to Dropbox + * + * @param attachments attachment to be uploaded + * @param accessToken user's Dropbox access token + * @param path path of the folder in which attachment needs to be added. Should not end with / + * @return the full path to the uploaded file + */ + private static String uploadToDropbox(Attachments attachments, String accessToken, String path){ + try { + DbxRequestConfig config = DbxRequestConfig.newBuilder("sendgrid/0.1").build(); + DbxClientV2 client = new DbxClientV2(config, accessToken); + FileMetadata uploadedFile = client.files().upload(String.format("%s/%s", path, attachments.getFilename())) + .uploadAndFinish(new ByteArrayInputStream((Base64.decodeBase64(attachments.getContent())))); + return uploadedFile.getPathDisplay(); + }catch(Exception ex) { + throw new RuntimeException("Error while uploading to Dropbox", ex); + } + } + +} + From 8e95e95c4ca57dbc92523b640ac7565540370f0c Mon Sep 17 00:00:00 2001 From: David Eriksson Date: Fri, 6 Nov 2020 21:01:54 +0100 Subject: [PATCH 340/439] docs: Correct number of free emails (#628) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e33997ca..26ee7c3a 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.8 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 40,000 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables From 68b230ab238b5b716bc3038a77f2618cf09bd37c Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Fri, 6 Nov 2020 14:05:22 -0600 Subject: [PATCH 341/439] chore: format example --- examples/dropbox/UploadToDropBox.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/examples/dropbox/UploadToDropBox.java b/examples/dropbox/UploadToDropBox.java index ae21fc76..1d729cd1 100644 --- a/examples/dropbox/UploadToDropBox.java +++ b/examples/dropbox/UploadToDropBox.java @@ -9,6 +9,7 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.Charset; + /* Add Dropbox dependencies for compiling code Gradle : compile 'com.dropbox.core:dropbox-core-sdk:3.0.5' @@ -31,10 +32,10 @@ public static void main(String[] args) { String path = "/path/to/folder"; Attachments attachments = new Attachments.Builder(fileName, contentStream) - .withType(type) - .withContentId(contentId) - .withDisposition(dispositon) - .build(); + .withType(type) + .withContentId(contentId) + .withDisposition(dispositon) + .build(); String returnPath = uploadToDropbox(attachments, accessToken, path); System.out.println("Path: " + returnPath); } @@ -44,20 +45,18 @@ public static void main(String[] args) { * * @param attachments attachment to be uploaded * @param accessToken user's Dropbox access token - * @param path path of the folder in which attachment needs to be added. Should not end with / + * @param path path of the folder in which attachment needs to be added. Should not end with / * @return the full path to the uploaded file */ - private static String uploadToDropbox(Attachments attachments, String accessToken, String path){ + private static String uploadToDropbox(Attachments attachments, String accessToken, String path) { try { DbxRequestConfig config = DbxRequestConfig.newBuilder("sendgrid/0.1").build(); DbxClientV2 client = new DbxClientV2(config, accessToken); FileMetadata uploadedFile = client.files().upload(String.format("%s/%s", path, attachments.getFilename())) - .uploadAndFinish(new ByteArrayInputStream((Base64.decodeBase64(attachments.getContent())))); + .uploadAndFinish(new ByteArrayInputStream((Base64.decodeBase64(attachments.getContent())))); return uploadedFile.getPathDisplay(); - }catch(Exception ex) { + } catch (Exception ex) { throw new RuntimeException("Error while uploading to Dropbox", ex); } } - } - From baad44497006fe17097f0d01e35295fa5a655ec2 Mon Sep 17 00:00:00 2001 From: Clayton Chu Date: Fri, 6 Nov 2020 15:22:53 -0500 Subject: [PATCH 342/439] docs: Fixes Javadoc errors in Attachments.java (#418) --- .../java/com/sendgrid/helpers/mail/objects/Attachments.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 9a3ff1b4..873475d7 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -211,6 +211,7 @@ private String encodeToBase64(InputStream content) { * Set the type of this attachment builder. * * @param type the attachment type. + * @return attachment builder object. */ public Builder withType(String type) { this.type = type; @@ -221,6 +222,7 @@ public Builder withType(String type) { * Set the disposition of this attachment builder. * * @param disposition the disposition. + * @return attachment builder object. */ public Builder withDisposition(String disposition) { this.disposition = disposition; @@ -231,6 +233,7 @@ public Builder withDisposition(String disposition) { * Set the content ID of this attachment builder. * * @param contentId the content ID. + * @return attachment builder object. */ public Builder withContentId(String contentId) { this.contentId = contentId; @@ -239,6 +242,7 @@ public Builder withContentId(String contentId) { /** * Construct the attachments object. + * @return the attachments object constructed. */ public Attachments build() { Attachments attachments = new Attachments(); From b417e6c18e157349d8daa191c7554097dcb57ad6 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Fri, 6 Nov 2020 20:36:20 +0000 Subject: [PATCH 343/439] docs: Create use-cases directory (#405) Move each separate use case into their own separate files, linked from the `use-cases` directory. Closes #401. --- USE_CASES.md | 328 --------------------------- use-cases/README.md | 9 + use-cases/domain-authentication.md | 11 + use-cases/email-statistics.md | 5 + use-cases/transactional-templates.md | 107 +++++++++ 5 files changed, 132 insertions(+), 328 deletions(-) delete mode 100644 USE_CASES.md create mode 100644 use-cases/README.md create mode 100644 use-cases/domain-authentication.md create mode 100644 use-cases/email-statistics.md create mode 100644 use-cases/transactional-templates.md diff --git a/USE_CASES.md b/USE_CASES.md deleted file mode 100644 index b9b0613a..00000000 --- a/USE_CASES.md +++ /dev/null @@ -1,328 +0,0 @@ -This document provides examples for specific use cases. Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues) or make a pull request for any use cases you would like us to document here. Thank you! - -# Use Cases - -* [Send Mail Examples](examples/helpers/mail/Example.java) - * [Send a Single Email to Multiple Recipients](examples/helpers/mail/SingleEmailMultipleRecipients.java) - * [Send Multiple Emails to Multiple Recipients](examples/helpers/mail/MultipleEmailsMultipleRecipients.java) -* [Transactional Templates](#transactional-templates) -* [Legacy Templates](#legacy-templates) -* [How to Setup a Domain Authentication](#domain-authentication) -* [How to View Email Statistics](#how-to-view-email-statistics) -* [Send an Email With Twilio Email (Pilot)](#send-an-email-with-twilio-email-pilot) -* [Send an SMS Message](#send-an-sms-message) - -# Transactional Templates - -For this example, we assume you have created a [dynamic transactional template](https://sendgrid.com/docs/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates/) in the UI or via the API. Following is the template content we used for testing. - -Template ID (replace with your own): - -```text -d-2c214ac919e84170b21855cc129b4a5f -``` -Email Subject: - -```text -{{subject}} -``` -Template Body: - -```html - - - - - - Hello {{name}}, -

    - I'm glad you are trying out the template feature! -

    - I hope you are having a great day in {{city}} :) -

    - - -``` - -## With Mail Helper Class - -```java -import com.sendgrid.*; -import java.io.IOException; - -public class Example { - public static void main(String[] args) throws IOException { - Mail mail = new Mail(); - mail.setFrom(new Email("tester@example.com")); - mail.setTemplateId("d-2c214ac919e84170b21855cc129b4a5f"); - - Personalization personalization = new Personalization(); - personalization.addDynamicTemplateData("subject", "Testing Templates"); - personalization.addDynamicTemplateData("name", "Example User"); - personalization.addDynamicTemplateData("city", "Denver"); - personalization.addTo(new Email("test@example.com")); - mail.addPersonalization(personalization); - - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - try { - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody(mail.build()); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} -``` - -## Without Mail Helper Class - -```java -import com.sendgrid.*; -import java.io.IOException; - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody("{ - \"from\": {\"email\": \"test@example.com\"}, - \"personalizations\": - [{ - \"to\": [{\"email\": \"test@example.com\"}], - \"dynamic_template_data\": {\"subject\": \"Testing Templates\",\"name\": \"Example User\", \"city\": \"Denver\"} - }], - \"template_id\": \"d-2c214ac919e84170b21855cc129b4a5f\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} -``` - -# Legacy Templates - -For this example, we assume you have created a [legacy transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. - -Template ID (replace with your own): - -```text -13b8f94f-bcae-4ec6-b752-70d6cb59f932 -``` - -Email Subject: - -```text -<%subject%> -``` - -Template Body: - -```html - - - - - - Hello -name-, -

    - I'm glad you are trying out the template feature! -

    - <%body%> -

    - I hope you are having a great day in -city- :) -

    - - -``` - -## With Mail Helper Class - -```java -import com.sendgrid.*; -import java.io.IOException; - -public class Example { - public static void main(String[] args) throws IOException { - Email from = new Email("test@example.com"); - String subject = "I'm replacing the subject tag"; - Email to = new Email("test@example.com"); - Content content = new Content("text/html", "I'm replacing the body tag"); - Mail mail = new Mail(from, subject, to, content); - mail.personalization.get(0).addSubstitution("-name-", "Example User"); - mail.personalization.get(0).addSubstitution("-city-", "Denver"); - mail.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); - - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - try { - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody(mail.build()); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} -``` - -## Without Mail Helper Class - -```java -import com.sendgrid.*; -import java.io.IOException; - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody("{ - \"personalizations\": - [{ - \"to\": [{\"email\": \"test@example.com\"}], - \"substitutions\": {\"-name-\": \"Example User\", \"-city-\": \"Denver\"}, - \"subject\": \"Hello World from the Twilio SendGrid Java Library!\" - }], - \"from\": {\"email\": \"test@example.com\"}, - \"content\": - [{ - \"type\": \"text/html\", - \"value\": \"I'm replacing the body tag\" - }] - ,\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} -``` - - -# How to Setup a Domain Authentication - -You can find documentation for how to set up a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](USAGE.md#sender-authentication). - -Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). - -# How to View Email Statistics - -You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](USAGE.md#stats). - -Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email. - -# Send an Email With Twilio Email (Pilot) - -### 1. Obtain a Free Twilio Account - -Sign up for a free Twilio account [here](https://www.twilio.com/try-twilio?source=sendgrid-java). - -### 2. Set Up Your Environment Variables - -The Twilio API allows for authentication using with either an API key/secret or your Account SID/Auth Token. You can create an API key [here](https://twil.io/get-api-key) or obtain your Account SID and Auth Token [here](https://twil.io/console). - -Once you have those, follow the steps below based on your operating system. - -#### Linux/Mac - -```bash -echo "export TWILIO_API_KEY='YOUR_TWILIO_API_KEY'" > twilio.env -echo "export TWILIO_API_SECRET='YOUR_TWILIO_API_SECRET'" >> twilio.env - -# or - -echo "export TWILIO_ACCOUNT_SID='YOUR_TWILIO_ACCOUNT_SID'" > twilio.env -echo "export TWILIO_AUTH_TOKEN='YOUR_TWILIO_AUTH_TOKEN'" >> twilio.env -``` - -Then: - -```bash -echo "twilio.env" >> .gitignore -source ./twilio.env -``` - -#### Windows - -Temporarily set the environment variable (accessible only during the current CLI session): - -```bash -set TWILIO_API_KEY=YOUR_TWILIO_API_KEY -set TWILIO_API_SECRET=YOUR_TWILIO_API_SECRET - -: or - -set TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID -set TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN -``` - -Or permanently set the environment variable (accessible in all subsequent CLI sessions): - -```bash -setx TWILIO_API_KEY "YOUR_TWILIO_API_KEY" -setx TWILIO_API_SECRET "YOUR_TWILIO_API_SECRET" - -: or - -setx TWILIO_ACCOUNT_SID "YOUR_TWILIO_ACCOUNT_SID" -setx TWILIO_AUTH_TOKEN "YOUR_TWILIO_AUTH_TOKEN" -``` - -### 3. Initialize the Twilio Email Client - -```java -TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_API_KEY"), System.getenv("TWILIO_API_SECRET")); - -// or - -TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_ACCOUNT_SID"), System.getenv("TWILIO_AUTH_TOKEN")); -``` - -This client has the same interface as the `SendGrid` client. - -# Send an SMS Message - -First, follow the above steps for creating a Twilio account and setting up environment variables with the proper credentials. - -Then, install the Twilio Helper Library by following the [installation steps](https://github.com/twilio/twilio-java#installation). - -Finally, send a message. - -```java -String accountSid = System.getenv("TWILIO_ACCOUNT_SID"); -String authToken = System.getenv("TWILIO_AUTH_TOKEN"); - -Twilio.init(accountSid, authToken); - -Message message = Message.creator( - new PhoneNumber("+15558881234"), // To number - new PhoneNumber("+15559994321"), // From number - "Hello world!" // SMS body -).create(); - -System.out.println(message.getSid()); -``` - -For more information, please visit the [Twilio SMS Java documentation](https://www.twilio.com/docs/sms/quickstart/java). diff --git a/use-cases/README.md b/use-cases/README.md new file mode 100644 index 00000000..35fd401d --- /dev/null +++ b/use-cases/README.md @@ -0,0 +1,9 @@ +# Use Cases + +This directory provides examples for specific use cases. + +Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues/new) or make a pull request for any use cases you would like us to document here. Thank you! + +* [Transactional Templates](transactional-templates.md) +* [How to Setup a Domain Authentication](domain-authentication.md) +* [How to View Email Statistics](email-statistics.md) diff --git a/use-cases/domain-authentication.md b/use-cases/domain-authentication.md new file mode 100644 index 00000000..5bc6a750 --- /dev/null +++ b/use-cases/domain-authentication.md @@ -0,0 +1,11 @@ +# How to Setup a Domain Authentication + +You can find documentation for how to set up a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](USAGE.md#sender-authentication). + +Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). + +# How to View Email Statistics + +You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](USAGE.md#stats). + +Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email. diff --git a/use-cases/email-statistics.md b/use-cases/email-statistics.md new file mode 100644 index 00000000..ace54b6a --- /dev/null +++ b/use-cases/email-statistics.md @@ -0,0 +1,5 @@ +# How to View Email Statistics + +You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](USAGE.md#stats). + +Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email. diff --git a/use-cases/transactional-templates.md b/use-cases/transactional-templates.md new file mode 100644 index 00000000..bb908733 --- /dev/null +++ b/use-cases/transactional-templates.md @@ -0,0 +1,107 @@ +# Transactional Templates + +For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. + +Template ID (replace with your own): + +```text +13b8f94f-bcae-4ec6-b752-70d6cb59f932 +``` + +Email Subject: + +```text +<%subject%> +``` + +Template Body: + +```html + + + + + + Hello -name-, +

    + I'm glad you are trying out the template feature! +

    + <%body%> +

    + I hope you are having a great day in -city- :) +

    + + +``` + +## With Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + Email from = new Email("test@example.com"); + String subject = "I'm replacing the subject tag"; + Email to = new Email("test@example.com"); + Content content = new Content("text/html", "I'm replacing the body tag"); + Mail mail = new Mail(from, subject, to, content); + mail.personalization.get(0).addSubstitution("-name-", "Example User"); + mail.personalization.get(0).addSubstitution("-city-", "Denver"); + mail.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); + + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` + +## Without Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{ + \"personalizations\": + [{ + \"to\": [{\"email\": \"test@example.com\"}], + \"substitutions\": {\"-name-\": \"Example User\", \"-city-\": \"Denver\"}, + \"subject\": \"Hello World from the Twilio SendGrid Java Library!\" + }], + \"from\": {\"email\": \"test@example.com\"}, + \"content\": + [{ + \"type\": \"text/html\", + \"value\": \"I'm replacing the body tag\" + }] + ,\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` From fd6919537c9845e9ed1086905eb0e02ffd0e5721 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Fri, 6 Nov 2020 14:43:23 -0600 Subject: [PATCH 344/439] docs: add additional use cases back --- use-cases/README.md | 15 +++-- use-cases/legacy-templates.md | 104 ++++++++++++++++++++++++++++++++++ use-cases/sms.md | 19 +++++++ use-cases/twilio-email.md | 11 ++++ use-cases/twilio-setup.md | 48 ++++++++++++++++ 5 files changed, 193 insertions(+), 4 deletions(-) create mode 100644 use-cases/legacy-templates.md create mode 100644 use-cases/sms.md create mode 100644 use-cases/twilio-email.md create mode 100644 use-cases/twilio-setup.md diff --git a/use-cases/README.md b/use-cases/README.md index 35fd401d..988af54c 100644 --- a/use-cases/README.md +++ b/use-cases/README.md @@ -1,9 +1,16 @@ -# Use Cases - This directory provides examples for specific use cases. -Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues/new) or make a pull request for any use cases you would like us to document here. Thank you! +Please [open an issue](https://github.com/sendgrid/sendgrid-ruby/issues) or [make a pull request](https://github.com/sendgrid/sendgrid-ruby/pulls) for any use cases you would like us to document here. Thank you! +# Email Use Cases * [Transactional Templates](transactional-templates.md) -* [How to Setup a Domain Authentication](domain-authentication.md) +* [Legacy Templates](legacy-templates.md) + +# Twilio Use Cases +* [Twilio Setup](twilio-setup.md) +* [Send an Email With Twilio Email (Pilot)](twilio-email.md) +* [Send an SMS Message](sms.md) + +# Non-Email Use Cases +* [How to Set up a Domain Authentication](domain-authentication.md) * [How to View Email Statistics](email-statistics.md) diff --git a/use-cases/legacy-templates.md b/use-cases/legacy-templates.md new file mode 100644 index 00000000..70239088 --- /dev/null +++ b/use-cases/legacy-templates.md @@ -0,0 +1,104 @@ +# Legacy Templates + +For this example, we assume you have created a [legacy transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. + +Template ID (replace with your own): + +```text +13b8f94f-bcae-4ec6-b752-70d6cb59f932 +``` + +Email Subject: + +```text +<%subject%> +``` + +Template Body: + +```html + + + + + + Hello -name-, +

    + I'm glad you are trying out the template feature! +

    + <%body%> +

    + I hope you are having a great day in -city- :) +

    + + +``` + +## With Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; +public class Example { + public static void main(String[] args) throws IOException { + Email from = new Email("test@example.com"); + String subject = "I'm replacing the subject tag"; + Email to = new Email("test@example.com"); + Content content = new Content("text/html", "I'm replacing the body tag"); + Mail mail = new Mail(from, subject, to, content); + mail.personalization.get(0).addSubstitution("-name-", "Example User"); + mail.personalization.get(0).addSubstitution("-city-", "Denver"); + mail.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` + +## Without Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{ + \"personalizations\": + [{ + \"to\": [{\"email\": \"test@example.com\"}], + \"substitutions\": {\"-name-\": \"Example User\", \"-city-\": \"Denver\"}, + \"subject\": \"Hello World from the Twilio SendGrid Java Library!\" + }], + \"from\": {\"email\": \"test@example.com\"}, + \"content\": + [{ + \"type\": \"text/html\", + \"value\": \"I'm replacing the body tag\" + }] + ,\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` diff --git a/use-cases/sms.md b/use-cases/sms.md new file mode 100644 index 00000000..3dfe4cfa --- /dev/null +++ b/use-cases/sms.md @@ -0,0 +1,19 @@ +First, follow the [Twilio Setup](twilio-setup.md) guide for creating a Twilio account and setting up environment variables with the proper credentials. + +Then, install the Twilio Helper Library by following the [installation steps](https://github.com/twilio/twilio-java#installation). + +Finally, send a message. + +```java +String accountSid = System.getenv("TWILIO_ACCOUNT_SID"); +String authToken = System.getenv("TWILIO_AUTH_TOKEN"); +Twilio.init(accountSid, authToken); +Message message = Message.creator( + new PhoneNumber("+15558881234"), // To number + new PhoneNumber("+15559994321"), // From number + "Hello world!" // SMS body +).create(); +System.out.println(message.getSid()); +``` + +For more information, please visit the [Twilio SMS Java documentation](https://www.twilio.com/docs/sms/quickstart/java). diff --git a/use-cases/twilio-email.md b/use-cases/twilio-email.md new file mode 100644 index 00000000..a0227a0f --- /dev/null +++ b/use-cases/twilio-email.md @@ -0,0 +1,11 @@ +First, follow the [Twilio Setup](twilio-setup.md) guide for creating a Twilio account and setting up environment variables with the proper credentials. + +Then, initialize the Twilio Email Client. + +```java +TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_API_KEY"), System.getenv("TWILIO_API_SECRET")); +// or +TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_ACCOUNT_SID"), System.getenv("TWILIO_AUTH_TOKEN")); +``` + +This client has the same interface as the `SendGrid` client. diff --git a/use-cases/twilio-setup.md b/use-cases/twilio-setup.md new file mode 100644 index 00000000..7c3c37fc --- /dev/null +++ b/use-cases/twilio-setup.md @@ -0,0 +1,48 @@ +### 1. Obtain a Free Twilio Account + +Sign up for a free Twilio account [here](https://www.twilio.com/try-twilio?source=sendgrid-java). + +### 2. Set Up Your Environment Variables + +The Twilio API allows for authentication using with either an API key/secret or your Account SID/Auth Token. You can create an API key [here](https://twil.io/get-api-key) or obtain your Account SID and Auth Token [here](https://twil.io/console). + +Once you have those, follow the steps below based on your operating system. + +#### Linux/Mac + +```bash +echo "export TWILIO_API_KEY='YOUR_TWILIO_API_KEY'" > twilio.env +echo "export TWILIO_API_SECRET='YOUR_TWILIO_API_SECRET'" >> twilio.env +# or +echo "export TWILIO_ACCOUNT_SID='YOUR_TWILIO_ACCOUNT_SID'" > twilio.env +echo "export TWILIO_AUTH_TOKEN='YOUR_TWILIO_AUTH_TOKEN'" >> twilio.env +``` + +Then: + +```bash +echo "twilio.env" >> .gitignore +source ./twilio.env +``` + +#### Windows + +Temporarily set the environment variable (accessible only during the current CLI session): + +```bash +set TWILIO_API_KEY=YOUR_TWILIO_API_KEY +set TWILIO_API_SECRET=YOUR_TWILIO_API_SECRET +: or +set TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID +set TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN +``` + +Or permanently set the environment variable (accessible in all subsequent CLI sessions): + +```bash +setx TWILIO_API_KEY "YOUR_TWILIO_API_KEY" +setx TWILIO_API_SECRET "YOUR_TWILIO_API_SECRET" +: or +setx TWILIO_ACCOUNT_SID "YOUR_TWILIO_ACCOUNT_SID" +setx TWILIO_AUTH_TOKEN "YOUR_TWILIO_AUTH_TOKEN" +``` From e0454aacd20af93640115bfef9b5e5764b672632 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 9 Nov 2020 10:57:15 -0600 Subject: [PATCH 345/439] chore: update required files tests --- .../com/sendgrid/TestRequiredFilesExist.java | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index 4efc2f04..d6e000d0 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -7,21 +7,12 @@ public class TestRequiredFilesExist { - // ./Docker or docker/Docker + // ./Dockerfile @Test public void checkDockerExists() { - boolean dockerExists = new File("./Dockerfile").exists() || - new File("./docker/Dockerfile").exists(); - assertTrue(dockerExists); + assertTrue(new File("./Dockerfile").exists()); } - // // ./docker-compose.yml or ./docker/docker-compose.yml - // @Test public void checkDockerComposeExists() { - // boolean dockerComposeExists = new File("./docker-compose.yml").exists() || - // new File("./docker/docker-compose.yml").exists(); - // assertTrue(dockerComposeExists); - // } - // ./.env_sample @Test public void checkEnvSampleExists() { @@ -99,10 +90,4 @@ public void checkTroubleShootingGuideExists() { public void checkUsageGuideExists() { assertTrue(new File("./USAGE.md").exists()); } - - // ./USE_CASES.md - @Test - public void checkUseCases() { - assertTrue(new File("./USE_CASES.md").exists()); - } } From 461315ce3417505742ad28d51f0a12e2bf365278 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 9 Nov 2020 20:08:31 +0300 Subject: [PATCH 346/439] feat: Add helper for get unassigned IPs (#292) --- .../com/sendgrid/helpers/ips/IPAddress.java | 120 ++++++++++++++++++ .../com/sendgrid/helpers/ips/IPsHelper.java | 47 +++++++ 2 files changed, 167 insertions(+) create mode 100644 src/main/java/com/sendgrid/helpers/ips/IPAddress.java create mode 100644 src/main/java/com/sendgrid/helpers/ips/IPsHelper.java diff --git a/src/main/java/com/sendgrid/helpers/ips/IPAddress.java b/src/main/java/com/sendgrid/helpers/ips/IPAddress.java new file mode 100644 index 00000000..e190cdb9 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/ips/IPAddress.java @@ -0,0 +1,120 @@ +package com.sendgrid.helpers.ips; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.List; + +public class IPAddress { + + /** + * An IP address. + */ + @JsonProperty("ip") + private String ip; + + /** + * The subusers that are able to send email from this IP. + */ + @JsonProperty("subusers") + private List subUsers; + + /** + * The reverse DNS record for this IP address. + */ + @JsonProperty("rdns") + private String rdns; + + /** + * The IP pools that this IP has been added to. + */ + @JsonProperty("pools") + private List pools; + + /** + * Indicates if this IP address is currently warming up. + */ + @JsonProperty("warmup") + private boolean warmup; + + /** + * The date that the IP address was entered into warmup. + */ + @JsonProperty("start_date") + private long startDate; + + /** + * Indicates if this IP address has been whitelabeled. + */ + @JsonProperty("whitelabeled") + private boolean whitelabeled; + + /** + * The date that the IP address was assigned to the user. + */ + @JsonProperty("assigned_at") + private long assignedAt; + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public List getSubUsers() { + return subUsers; + } + + public void setSubUsers(List subUsers) { + this.subUsers = subUsers; + } + + public String getRdns() { + return rdns; + } + + public void setRdns(String rdns) { + this.rdns = rdns; + } + + public List getPools() { + return pools; + } + + public void setPools(List pools) { + this.pools = pools; + } + + public boolean isWarmup() { + return warmup; + } + + public void setWarmup(boolean warmup) { + this.warmup = warmup; + } + + public long getStartDate() { + return startDate; + } + + public void setStartDate(long startDate) { + this.startDate = startDate; + } + + public boolean isWhitelabeled() { + return whitelabeled; + } + + public void setWhitelabeled(boolean whitelabeled) { + this.whitelabeled = whitelabeled; + } + + public long getAssignedAt() { + return assignedAt; + } + + public void setAssignedAt(long assignedAt) { + this.assignedAt = assignedAt; + } +} diff --git a/src/main/java/com/sendgrid/helpers/ips/IPsHelper.java b/src/main/java/com/sendgrid/helpers/ips/IPsHelper.java new file mode 100644 index 00000000..038901e1 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/ips/IPsHelper.java @@ -0,0 +1,47 @@ +package com.sendgrid.helpers.ips; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; +import org.apache.http.HttpStatus; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * Helper class for quick and easy access to the SendGrid IP Addresses API. + */ +public class IPsHelper { + + private static final String ALL_IPS_ENDPOINT = "ips"; + + /** + * Get a list of unassigned IP addresses. + * @param sendGrid a SendGrid client. + * @return a list of unassigned ip addresses if response status is ok (200), otherwise - null + * @throws IOException in case of a network error or json parse error. + */ + public static List getAllUnassignedIPs(SendGrid sendGrid) throws IOException { + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint(ALL_IPS_ENDPOINT); + + Response response = sendGrid.api(request); + if (response != null && response.getStatusCode() == HttpStatus.SC_OK) { + List unassignedIPs = new ArrayList<>(); + List ipAddressList = new ObjectMapper().readValue(response.getBody(), new TypeReference>() {}); + for (IPAddress ipAddress : ipAddressList) { + if (ipAddress.getSubUsers() == null || ipAddress.getSubUsers().size() == 0) { + unassignedIPs.add(ipAddress.getIp()); + } + } + return unassignedIPs; + } + return null; + } + +} From b2db70ee90cc19812f33e765ed7ac64c3c8cdb71 Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 18 Nov 2020 08:33:21 -0800 Subject: [PATCH 347/439] docs: Fix broken link in readme (#656) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 26ee7c3a..f42b9e17 100644 --- a/README.md +++ b/README.md @@ -197,7 +197,7 @@ public class Example { # Use Cases -[Examples of common API use cases](USE_CASES.md), such as how to send an email with a transactional template. +[Examples of common API use cases](use-cases), such as how to send an email with a transactional template. # Announcements From fe0d5749efa4dfa9b13ea8177bf19fb8c4937371 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Nov 2020 22:12:33 +0000 Subject: [PATCH 348/439] [Librarian] Version Bump --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87888fb5..e029f5d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,20 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-11-18] Version 4.7.0 +-------------------------- +**Library - Docs** +- [PR #656](https://github.com/sendgrid/sendgrid-java/pull/656): Fix broken link in readme. Thanks to [@KakeJopulsky](https://github.com/KakeJopulsky)! +- [PR #405](https://github.com/sendgrid/sendgrid-java/pull/405): Create use-cases directory. Thanks to [@jamietanna](https://github.com/jamietanna)! +- [PR #418](https://github.com/sendgrid/sendgrid-java/pull/418): Fixes Javadoc errors in Attachments.java. Thanks to [@pacbac](https://github.com/pacbac)! +- [PR #628](https://github.com/sendgrid/sendgrid-java/pull/628): Correct number of free emails. Thanks to [@twogood](https://github.com/twogood)! +- [PR #304](https://github.com/sendgrid/sendgrid-java/pull/304): Save attachment to Dropbox. Thanks to [@deepapanwar](https://github.com/deepapanwar)! +- [PR #357](https://github.com/sendgrid/sendgrid-java/pull/357): Fix code issues in examples/clients/clients.java. Thanks to [@pushkyn](https://github.com/pushkyn)! + +**Library - Feature** +- [PR #292](https://github.com/sendgrid/sendgrid-java/pull/292): Add helper for get unassigned IPs. Thanks to [@pushkyn](https://github.com/pushkyn)! + + [2020-11-05] Version 4.6.8 -------------------------- **Library - Chore** From b829f6ec53fcf78bd0f10656fd144d27b0951179 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Nov 2020 22:33:03 +0000 Subject: [PATCH 349/439] Release 4.7.0 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cbd779c1..913fedee 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.8/sendgrid-4.6.8-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.8/sendgrid-4.6.8-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.0/sendgrid-4.7.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.0/sendgrid-4.7.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index f42b9e17..889bb68b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.8.** +**The default branch name for this repository has been changed to `main` as of 4.7.0.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 40,000 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.8' + implementation 'com.sendgrid:sendgrid-java:4.7.0' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.8/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 4bc94f9e..fcd7234c 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.8 + 4.7.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.8 + 4.7.0 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 8f284f41..4aadd3b6 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.8"; + private static final String VERSION = "4.7.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index e93c1199..7e94fcfc 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.8"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.0"); } @Test From d34ee53d19d7ed521f49c9368256e0b97cb4eb1a Mon Sep 17 00:00:00 2001 From: Pat Putnam Date: Thu, 3 Dec 2020 17:54:04 -0700 Subject: [PATCH 350/439] fix: Utilize headers set on the Request object (#657) --- src/main/java/com/sendgrid/BaseInterface.java | 10 ++-- src/test/java/com/sendgrid/SendGridTest.java | 52 +++++++++++++++++++ 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 4aadd3b6..4dd4ec0e 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -268,13 +268,9 @@ public Response api(final Request request) throws IOException { req.setEndpoint("/" + version + "/" + request.getEndpoint()); req.setBody(request.getBody()); - for (final Map.Entry header : this.requestHeaders.entrySet()) { - req.addHeader(header.getKey(), header.getValue()); - } - - for (final Map.Entry queryParam : request.getQueryParams().entrySet()) { - req.addQueryParam(queryParam.getKey(), queryParam.getValue()); - } + req.getHeaders().putAll(this.requestHeaders); + req.getHeaders().putAll(request.getHeaders()); + req.getQueryParams().putAll(request.getQueryParams()); return makeCall(req); } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 7e94fcfc..24d62a76 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -3190,4 +3190,56 @@ public void test_get_impersonate_subuser() { sg.removeImpersonateSubuser(); Assert.assertEquals(sg.getImpersonateSubuser(), null); } + + @Test + public void test_sendgrid_object_headers_are_used_in_request() throws IOException { + Client client = mock(Client.class); + SendGrid sg = new SendGrid(SENDGRID_API_KEY, client); + sg.addRequestHeader("set-on-sendgrid", "123"); + + Request request = new Request(); + + sg.api(request); + verify(client).api(argThat((Request req) -> req.getHeaders().containsKey("set-on-sendgrid"))); + } + + @Test + public void test_request_headers_are_used_in_request() throws IOException { + Client client = mock(Client.class); + SendGrid sg = new SendGrid(SENDGRID_API_KEY, client); + + Request request = new Request(); + request.addHeader("set-on-request", "456"); + + sg.api(request); + verify(client).api(argThat((Request req) -> req.getHeaders().containsKey("set-on-request"))); + } + + + @Test + public void test_sendgrid_object_and_request_headers_are_both_used_in_request() throws IOException { + Client client = mock(Client.class); + SendGrid sg = new SendGrid(SENDGRID_API_KEY, client); + sg.addRequestHeader("set-on-sendgrid", "123"); + + Request request = new Request(); + request.addHeader("set-on-request", "456"); + + sg.api(request); + verify(client).api(argThat((Request req) -> + req.getHeaders().containsKey("set-on-sendgrid") && req.getHeaders().containsKey("set-on-request"))); + } + + @Test + public void test_request_headers_override_sendgrid_object_headers() throws IOException { + Client client = mock(Client.class); + SendGrid sg = new SendGrid(SENDGRID_API_KEY, client); + sg.addRequestHeader("set-on-both", "123"); + + Request request = new Request(); + request.addHeader("set-on-both", "456"); + + sg.api(request); + verify(client).api(argThat((Request req) -> req.getHeaders().get("set-on-both").equals("456"))); + } } From f7718731f1eaf097674ce01d74da96f522b10d64 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 16 Dec 2020 22:49:53 +0000 Subject: [PATCH 351/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e029f5d9..79834a22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-12-16] Version 4.7.1 +-------------------------- +**Library - Fix** +- [PR #657](https://github.com/sendgrid/sendgrid-java/pull/657): Utilize headers set on the Request object. Thanks to [@prputnam](https://github.com/prputnam)! + + [2020-11-18] Version 4.7.0 -------------------------- **Library - Docs** From 1259edeb8570d9ea9bfdc338d3de7bfb10b62b7e Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 16 Dec 2020 22:49:56 +0000 Subject: [PATCH 352/439] Release 4.7.1 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 913fedee..b091a76e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.0/sendgrid-4.7.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.0/sendgrid-4.7.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.1/sendgrid-4.7.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.1/sendgrid-4.7.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 889bb68b..3dce3ec9 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.7.0.** +**The default branch name for this repository has been changed to `main` as of 4.7.1.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.1 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.0' + implementation 'com.sendgrid:sendgrid-java:4.7.1' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.1/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index fcd7234c..88a8dc0d 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.0 + 4.7.1 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.0 + 4.7.1 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 4dd4ec0e..44f36e73 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.0"; + private static final String VERSION = "4.7.1"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 24d62a76..2a855cef 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.1"); } @Test From c156455e485e3368351082a78e980c618ef8d16b Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 6 Jan 2021 18:16:42 +0000 Subject: [PATCH 353/439] chore: update template files --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 29aba592..e5439a92 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2020, Twilio SendGrid, Inc. +Copyright (C) 2021, Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From 7381525d6b8b5f7ada71fd00b30238c5c170def1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Feb 2021 16:42:52 -0800 Subject: [PATCH 354/439] chore: bump jackson.version from 2.10.2 to 2.12.1 (#671) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 88a8dc0d..0c87b741 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 2.10.2 + 2.12.1 https://github.com/sendgrid/sendgrid-java From 1578ffc2e26e4c0ea03a25eeafd5e166011b5599 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 24 Feb 2021 20:06:27 +0000 Subject: [PATCH 355/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79834a22..1fbc6b5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-02-24] Version 4.7.2 +-------------------------- +**Library - Chore** +- [PR #671](https://github.com/sendgrid/sendgrid-java/pull/671): bump jackson.version from 2.10.2 to 2.12.1. Thanks to [@dependabot](https://github.com/dependabot)! + + [2020-12-16] Version 4.7.1 -------------------------- **Library - Fix** From a2b4926ede929f36a3b6e9d9e9fcaba62125ae93 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 24 Feb 2021 20:20:14 +0000 Subject: [PATCH 356/439] Release 4.7.2 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b091a76e..6e129bad 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.1/sendgrid-4.7.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.1/sendgrid-4.7.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.2/sendgrid-4.7.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.2/sendgrid-4.7.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index 3dce3ec9..fb0335e3 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.7.1.** +**The default branch name for this repository has been changed to `main` as of 4.7.2.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.1 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.2 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.1' + implementation 'com.sendgrid:sendgrid-java:4.7.2' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.2/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 0c87b741..0842ac27 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.1 + 4.7.2 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.1 + 4.7.2 @@ -318,7 +318,7 @@ org.bouncycastle bcprov-jdk15on - 1.67 + 1.68 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 44f36e73..39874e5f 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.1"; + private static final String VERSION = "4.7.2"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 2a855cef..1fbaddd8 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.1"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.2"); } @Test From 25b1a9fa50c733a68b23ba1c0ec917b26bdd47ce Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 8 Mar 2021 23:26:24 -0800 Subject: [PATCH 357/439] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index fb0335e3..720d62e8 100644 --- a/README.md +++ b/README.md @@ -202,6 +202,8 @@ public class Example { # Announcements +Our Developer Experience team is conducting planned maintenance from 03/09/2021 until 03/11/2021. Our next release is scheduled for 03/15/2021. + Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. From e815bb21d73153b131b0a881bdfcd8354ddd4145 Mon Sep 17 00:00:00 2001 From: Twilio Date: Fri, 12 Mar 2021 19:28:15 +0000 Subject: [PATCH 358/439] chore: update template files --- .github/ISSUE_TEMPLATE/config.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..b24426d0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,10 @@ +contact_links: + - name: Twilio SendGrid Support + url: https://support.sendgrid.com + about: Get Support + - name: Stack Overflow + url: https://stackoverflow.com/questions/tagged/sendgrid-java+or+sendgrid+java + about: Ask questions on Stack Overflow + - name: Documentation + url: https://sendgrid.com/docs/for-developers/ + about: View Reference Documentation From 89e1ccdc689365c41afdd3004fad097edfd9676f Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 15 Mar 2021 12:49:43 -0700 Subject: [PATCH 359/439] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 720d62e8..fb0335e3 100644 --- a/README.md +++ b/README.md @@ -202,8 +202,6 @@ public class Example { # Announcements -Our Developer Experience team is conducting planned maintenance from 03/09/2021 until 03/11/2021. Our next release is scheduled for 03/15/2021. - Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. From ce541f15010416d28883aa095f6a646947585f0f Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Fri, 23 Apr 2021 11:08:16 -0700 Subject: [PATCH 360/439] chore: rotate key --- .travis.yml | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/.travis.yml b/.travis.yml index ff279202..062520ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,22 +1,20 @@ language: java jdk: openjdk8 before_install: - - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true +- echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true env: - - version=8 - - version=11 +- version=8 +- version=11 script: - - make test-docker - +- make test-docker deploy: - - provider: script - script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease - edge: true - on: - tags: true - condition: $version = 8 - branch: main - +- provider: script + script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease + edge: true + on: + tags: true + condition: "$version = 8" + branch: main notifications: slack: if: branch = main @@ -24,4 +22,4 @@ notifications: on_success: never on_failure: change rooms: - - secure: q2SEemDXFLu/2G2I7oD02+YsM5Q0G27j+b4P1BcReWqVHhRz9L+iyuYWhIXJ6hW0omL5V2XrZ65uqb4f/SD7b89oXRGToVxfykrBzcas1tqIIp9lldd1u2eMc59zALX4nkTlE0T4UFLwEvoeY8aXoD/dNytSy6M2F5c2nYcmoN0= + secure: U60cRCUgX4z+CYZXW/DjNSeCr4rxZVJBjlsGtpzNVWt2Lz7jhx/6Bx/2SChPQt1BR/6RY3kUf1hXAd3vqbwIMjvSFm/HBb4EHEWLAoqVtHjj6p9YZ+NXFzxRrarG3tBB14prRoG2t8TwdcvxnklBOYgUY5PWld3ptp+BG8iyr8A= From 9de3eaeafe4f07682555ec6237bc9bc797c5c53a Mon Sep 17 00:00:00 2001 From: Mikko Date: Fri, 30 Apr 2021 19:18:41 +0300 Subject: [PATCH 361/439] docs: Fix number of free emails in README (#679) Somewhere along the line, the number seems to have been replaced with a version number. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fb0335e3..532515fa 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.2 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 40,000 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables From 0128ca219befa395ec5cb5cc72878e802bc96cea Mon Sep 17 00:00:00 2001 From: Jennifer Mah <42650198+JenniferMah@users.noreply.github.com> Date: Tue, 11 May 2021 16:49:26 -0600 Subject: [PATCH 362/439] docs: Fix date for main branch --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 532515fa..0f1cca27 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.7.2.** +**The default branch name for this repository has been changed to `main` as of 07/27/2020.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** From 5ea0713a2283cc67e543c31f94056658c9bd61ce Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 16 Jun 2021 16:18:36 -0700 Subject: [PATCH 363/439] update slack token --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 062520ed..f456ed0c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,4 +22,4 @@ notifications: on_success: never on_failure: change rooms: - secure: U60cRCUgX4z+CYZXW/DjNSeCr4rxZVJBjlsGtpzNVWt2Lz7jhx/6Bx/2SChPQt1BR/6RY3kUf1hXAd3vqbwIMjvSFm/HBb4EHEWLAoqVtHjj6p9YZ+NXFzxRrarG3tBB14prRoG2t8TwdcvxnklBOYgUY5PWld3ptp+BG8iyr8A= + secure: NGGQe8OMWfbAOM6O7odDHtY/UVdqJ6oLQzB96QlTNkGgbyINKdufHxHaiv0SC/w4alUzzs6gw1h2WCpxw1PPl+pnVAeSVLfvRLYQApCGigWF0s5AyfVxtoG7bZOQLhsddC1ldQr12G4zclew+7k+0bgra4ENkbvv1OGiQdPJ08U= From b03272e3af731f7b86aa2eb78f33a80d62d913e4 Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Wed, 16 Jun 2021 17:08:20 -0700 Subject: [PATCH 364/439] chore: add docker credentials to travis --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f456ed0c..5518c0d2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,8 @@ env: - version=8 - version=11 script: -- make test-docker +- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + - make test-docker deploy: - provider: script script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease From e3e55d857ca2dc960313e3cbe1440117e9dd2759 Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Wed, 16 Jun 2021 17:10:54 -0700 Subject: [PATCH 365/439] chore: add docker credentials to travis --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5518c0d2..84f6b2be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,8 +6,8 @@ env: - version=8 - version=11 script: -- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - make test-docker +- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin" +- make test-docker deploy: - provider: script script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease From 0812d5c3b1c2556ab531f7cf055538505f9293bb Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Wed, 16 Jun 2021 17:14:53 -0700 Subject: [PATCH 366/439] chore: add docker credentials to travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 84f6b2be..4e3f5b5c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ env: - version=8 - version=11 script: -- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin" +- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - make test-docker deploy: - provider: script From 7ee80927a7b59de6cb30170267fdf3cc5e762859 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 30 Jun 2021 19:36:47 +0000 Subject: [PATCH 367/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fbc6b5e..e05c2625 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-06-30] Version 4.7.3 +-------------------------- +**Library - Docs** +- [PR #679](https://github.com/sendgrid/sendgrid-java/pull/679): Fix number of free emails in README. Thanks to [@mjjs](https://github.com/mjjs)! + + [2021-02-24] Version 4.7.2 -------------------------- **Library - Chore** From ce785105c95658f321c4138a124b9b14d909da65 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 30 Jun 2021 19:44:27 +0000 Subject: [PATCH 368/439] Release 4.7.3 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6e129bad..a1fc85bd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.2/sendgrid-4.7.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.2/sendgrid-4.7.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.3/sendgrid-4.7.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.3/sendgrid-4.7.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index 0f1cca27..4c5c69d6 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.2' + implementation 'com.sendgrid:sendgrid-java:4.7.3' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 0842ac27..f4052115 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.2 + 4.7.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.2 + 4.7.3 @@ -318,7 +318,7 @@ org.bouncycastle bcprov-jdk15on - 1.68 + 1.69 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 39874e5f..18d3b71c 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.2"; + private static final String VERSION = "4.7.3"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 1fbaddd8..27190868 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.2"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.3"); } @Test From 83e57c6c45d6ef32dbcf414a97f9bbcae2a0c544 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 21 Jul 2021 15:25:56 -0700 Subject: [PATCH 369/439] Remove newsletter badge --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 4c5c69d6..0668fc8b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ [![Travis Badge](https://travis-ci.com/sendgrid/sendgrid-java.svg?branch=main)](https://travis-ci.com/sendgrid/sendgrid-java) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) -[![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) [![Open Source Helpers](https://www.codetriage.com/sendgrid/sendgrid-java/badges/users.svg)](https://www.codetriage.com/sendgrid/sendgrid-java) From 9bc3c25bdcd6c68983a20560db62d46837f7d059 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Thu, 29 Jul 2021 15:01:21 -0700 Subject: [PATCH 370/439] chore: update travis config --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4e3f5b5c..05841cba 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: java jdk: openjdk8 before_install: - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true +- echo $GPG_OWNERTRUST | base64 --decode | $GPG_EXECUTABLE --import-ownertrust --batch || true env: - version=8 - version=11 From ca5c05c9992415d06e413dfe9b88f0855c8dd26d Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Thu, 29 Jul 2021 15:24:53 -0700 Subject: [PATCH 371/439] chore: remove docker credentials for PRs --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 05841cba..9d5fdc9d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,9 @@ env: - version=8 - version=11 script: -- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin +- if [[ "$TRAVIS_BRANCH" == "main" || "$TRAVIS_BRANCH" == "travis" ]] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then + echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin; + fi - make test-docker deploy: - provider: script From 468db091a68176555757c45e11812f77c3b2b3cf Mon Sep 17 00:00:00 2001 From: svcprodsec-sendgrid <70608793+svcprodsec-sendgrid@users.noreply.github.com> Date: Mon, 2 Aug 2021 12:11:55 -0400 Subject: [PATCH 372/439] fix: pom.xml to reduce vulnerabilities (#694) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JAVA-ORGAPACHEHTTPCOMPONENTS-1048058 Co-authored-by: snyk-bot --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f4052115..d26ae36d 100644 --- a/pom.xml +++ b/pom.xml @@ -286,7 +286,7 @@ com.sendgrid java-http-client - 4.3.6 + 4.3.7 com.fasterxml.jackson.core From 8b41bb94fe6c4ffa4574e1ceb0e22dc128659799 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 11 Aug 2021 16:53:15 +0000 Subject: [PATCH 373/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e05c2625..6385e5bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-08-11] Version 4.7.4 +-------------------------- +**Library - Chore** +- [PR #694](https://github.com/sendgrid/sendgrid-java/pull/694): [Snyk] Security upgrade com.sendgrid:java-http-client from 4.3.6 to 4.3.7. Thanks to [@svcprodsec-sendgrid](https://github.com/svcprodsec-sendgrid)! + + [2021-06-30] Version 4.7.3 -------------------------- **Library - Docs** From c46e5775ae058d7f9b12be5c8e170b97c32e05b9 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 11 Aug 2021 17:04:16 +0000 Subject: [PATCH 374/439] Release 4.7.4 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a1fc85bd..94cf44c0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.3/sendgrid-4.7.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.3/sendgrid-4.7.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.4/sendgrid-4.7.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.4/sendgrid-4.7.4-jar.jar:. Example ``` diff --git a/README.md b/README.md index 0668fc8b..0d9bb379 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.3' + implementation 'com.sendgrid:sendgrid-java:4.7.4' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.3/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.4/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index d26ae36d..dcf70d0d 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.3 + 4.7.4 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.3 + 4.7.4 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 18d3b71c..bca374f0 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.3"; + private static final String VERSION = "4.7.4"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 27190868..30e4d286 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.3"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.4"); } @Test From 84fe0783ff2437328f1cd3f3a8d4dfa9bf5c6f2d Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Tue, 21 Sep 2021 12:18:33 -0700 Subject: [PATCH 375/439] chore: update docker (#703) --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index 9d5fdc9d..d4b2a0ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,11 @@ language: java jdk: openjdk8 before_install: +- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - +- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" +- sudo apt-get update +- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce +- docker --version - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true - echo $GPG_OWNERTRUST | base64 --decode | $GPG_EXECUTABLE --import-ownertrust --batch || true env: From bc645f1d40ff68691db4b3c645bd20609bf96bbf Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 22 Sep 2021 20:34:25 +0000 Subject: [PATCH 376/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6385e5bb..104bf3e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-09-22] Version 4.7.5 +-------------------------- +**Library - Chore** +- [PR #703](https://github.com/sendgrid/sendgrid-java/pull/703): update docker. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + + [2021-08-11] Version 4.7.4 -------------------------- **Library - Chore** From d75ac30a74c7240ce717fbd429c1248aed05724b Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 22 Sep 2021 20:44:24 +0000 Subject: [PATCH 377/439] Release 4.7.5 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 94cf44c0..38da8a7f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.4/sendgrid-4.7.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.4/sendgrid-4.7.4-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.5/sendgrid-4.7.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.5/sendgrid-4.7.5-jar.jar:. Example ``` diff --git a/README.md b/README.md index 0d9bb379..c0f85c93 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.4' + implementation 'com.sendgrid:sendgrid-java:4.7.5' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.4/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.5/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index dcf70d0d..a12304dd 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.4 + 4.7.5 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.4 + 4.7.5 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index bca374f0..b2fb04a6 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.4"; + private static final String VERSION = "4.7.5"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 30e4d286..02e22723 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.4"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.5"); } @Test From 470872da6e48e6a80368f697e35c0a7ceb0c1cc4 Mon Sep 17 00:00:00 2001 From: Jennifer Mah <42650198+JenniferMah@users.noreply.github.com> Date: Wed, 29 Sep 2021 15:10:10 -0700 Subject: [PATCH 378/439] docs: update documentation link --- use-cases/transactional-templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/use-cases/transactional-templates.md b/use-cases/transactional-templates.md index bb908733..ba2b39e2 100644 --- a/use-cases/transactional-templates.md +++ b/use-cases/transactional-templates.md @@ -1,6 +1,6 @@ # Transactional Templates -For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. +For this example, we assume you have created a [transactional template](https://docs.sendgrid.com/ui/sending-email/create-and-edit-legacy-transactional-templates). Following is the template content we used for testing. Template ID (replace with your own): From 49e68952346b4a10cfd257eed5915ae535ae0db8 Mon Sep 17 00:00:00 2001 From: Shwetha Radhakrishna Date: Fri, 8 Oct 2021 06:52:22 -0700 Subject: [PATCH 379/439] docs: improve signed webhook events docs (#705) --- TROUBLESHOOTING.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 02fba251..44b5c885 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -18,6 +18,7 @@ If you can't find a solution below, please open an [issue](https://github.com/se - [Using the Package Manager](#using-the-package-manager) - [Android Compatibility](#android-compatibility) - [Viewing the Request Body](#viewing-the-request-body) +- [Verifying Event Webhooks](#signed-webhooks) ## Migrating from v2 to v3 @@ -114,3 +115,15 @@ You can do this right before you call `request.setBody(mail.build())` like so: ```java System.out.println(mail.build()); ``` + + +## Signed Webhook Verification + +Twilio SendGrid's Event Webhook will notify a URL via HTTP POST with information about events that occur as your mail is processed. [This](https://docs.sendgrid.com/for-developers/tracking-events/getting-started-event-webhook-security-features) article covers all you need to know to secure the Event Webhook, allowing you to verify that incoming requests originate from Twilio SendGrid. The sendgrid-java library can help you verify these Signed Event Webhooks. + +You can find the end-to-end usage example [here](examples/helpers/eventwebhook/Example.java) and the tests [here](/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java). + +If you are still having trouble getting the validation to work, follow the following instructions: +- Be sure to use the *raw* payload for validation +- Be sure to include a trailing carriage return and newline in your payload +- In case of multi-event webhooks, make sure you include the trailing newline and carriage return after *each* event From 218f51be349f82011861c4d9262344d2575e3256 Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 18 Oct 2021 18:31:16 +0000 Subject: [PATCH 380/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 104bf3e8..95307ff6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-10-18] Version 4.7.6 +-------------------------- +**Library - Docs** +- [PR #705](https://github.com/sendgrid/sendgrid-java/pull/705): improve signed webhook events docs. Thanks to [@shwetha-manvinkurke](https://github.com/shwetha-manvinkurke)! + + [2021-09-22] Version 4.7.5 -------------------------- **Library - Chore** From bb9c0eab5a4723d04178f7fd2864309862af770d Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 18 Oct 2021 18:40:25 +0000 Subject: [PATCH 381/439] Release 4.7.6 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 38da8a7f..5229ed86 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.5/sendgrid-4.7.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.5/sendgrid-4.7.5-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.6/sendgrid-4.7.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.6/sendgrid-4.7.6-jar.jar:. Example ``` diff --git a/README.md b/README.md index c0f85c93..5acaee3e 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.5' + implementation 'com.sendgrid:sendgrid-java:4.7.6' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.5/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.6/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index a12304dd..4a9f4a00 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.5 + 4.7.6 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.5 + 4.7.6 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index b2fb04a6..31bb9dfa 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.5"; + private static final String VERSION = "4.7.6"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 02e22723..b181589d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.5"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.6"); } @Test From a2c71efc7c1513d17e67cf04e414ff7c4c1adee1 Mon Sep 17 00:00:00 2001 From: Bilal Boussayoud Date: Thu, 21 Oct 2021 09:47:43 -0600 Subject: [PATCH 382/439] feat: allow personalization of the From name and email for each email recipient (#706) * feat: allow personalization of the From name and email for email recipients --- examples/helpers/mail/Example.java | 14 ++++-- .../MultipleEmailsMultipleRecipients.java | 1 + .../helpers/mail/objects/Personalization.java | 19 ++++++++ .../java/com/sendgrid/helpers/MailTest.java | 10 +++- use-cases/README.md | 1 + use-cases/personalizations.md | 48 +++++++++++++++++++ 6 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 use-cases/personalizations.md diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index 8ff7ed42..bffcdfdb 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -57,22 +57,26 @@ public static Mail buildKitchenSink() { to2.setName("Example User"); to2.setEmail("test1@example.com"); personalization2.addTo(to2); + Email fromEmail2 = new Email(); + fromEmail2.setName("Example User"); + fromEmail2.setEmail("test2@example.com"); + personalization2.setFrom(fromEmail2); to2.setName("Example User"); - to2.setEmail("test2@example.com"); + to2.setEmail("test3@example.com"); personalization2.addTo(to2); Email cc2 = new Email(); cc2.setName("Example User"); - cc2.setEmail("test3@example.com"); + cc2.setEmail("test4@example.com"); personalization2.addCc(cc2); cc2.setName("Example User"); - cc2.setEmail("test4@example.com"); + cc2.setEmail("test5@example.com"); personalization2.addCc(cc2); Email bcc2 = new Email(); bcc2.setName("Example User"); - bcc2.setEmail("test5@example.com"); + bcc2.setEmail("test6@example.com"); personalization2.addBcc(bcc2); bcc2.setName("Example User"); - bcc2.setEmail("test6@example.com"); + bcc2.setEmail("test7@example.com"); personalization2.addBcc(bcc2); personalization2.setSubject("Hello World from the Personalized Twilio SendGrid Java Library"); personalization2.addHeader("X-Test", "test"); diff --git a/examples/helpers/mail/MultipleEmailsMultipleRecipients.java b/examples/helpers/mail/MultipleEmailsMultipleRecipients.java index 35fe03b8..e96fca16 100644 --- a/examples/helpers/mail/MultipleEmailsMultipleRecipients.java +++ b/examples/helpers/mail/MultipleEmailsMultipleRecipients.java @@ -29,6 +29,7 @@ public static void main(String[] args) throws IOException { final Personalization personalization2 = new Personalization(); personalization2.addTo(new Email("test2@example.com", "Example User2")); + personalization2.setFrom(new Email("test3@example.com", "Example User3")); personalization2.addDynamicTemplateData("name", "Example User2"); personalization2.addDynamicTemplateData("city", "San Francisco"); mail.addPersonalization(personalization2); diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 82cb3de3..16e99005 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -15,6 +15,9 @@ public class Personalization { @JsonProperty("to") private List tos; + @JsonProperty("from") + private Email from; + @JsonProperty("cc") private List ccs; @@ -59,6 +62,15 @@ public void addTo(Email email) { } } + @JsonProperty("from") + public Email getFrom() { + return from; + } + + public void setFrom(Email email) { + this.from = email; + } + @JsonProperty("cc") public List getCcs() { if (ccs == null) { @@ -260,6 +272,13 @@ public boolean equals(Object obj) { } else if (!tos.equals(other.tos)) { return false; } + if (from == null) { + if (other.from != null) { + return false; + } + } else if (!from.equals(other.from)) { + return false; + } return true; } } diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index bc49a197..9cdc194c 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -78,6 +78,10 @@ public void testKitchenSink() throws IOException { to2.setName("Example User"); to2.setEmail("test@example.com"); personalization2.addTo(to2); + Email fromEmail2 = new Email(); + fromEmail2.setName("Example Sender"); + fromEmail2.setEmail("sender@example.com"); + personalization2.setFrom(fromEmail2); Email cc2 = new Email(); cc2.setName("Example User"); cc2.setEmail("test@example.com"); @@ -110,6 +114,10 @@ public void testKitchenSink() throws IOException { to3.setName("Example User"); to3.setEmail("test@example.com"); personalization3.addTo(to3); + Email fromEmail3 = new Email(); + fromEmail3.setName("Example Sender2"); + fromEmail3.setEmail("sender2@example.com"); + personalization3.setFrom(fromEmail3); Email cc3 = new Email(); cc3.setName("Example User"); cc3.setEmail("test@example.com"); @@ -247,7 +255,7 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"items\":[{\"price\":\"$ 59.95\",\"text\":\"New Line Sneakers\"},{\"text\":\"Old Line Sneakers\"}],\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender\",\"email\":\"sender@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender2\",\"email\":\"sender2@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"items\":[{\"price\":\"$ 59.95\",\"text\":\"New Line Sneakers\"},{\"text\":\"Old Line Sneakers\"}],\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } @Test diff --git a/use-cases/README.md b/use-cases/README.md index 988af54c..204d8609 100644 --- a/use-cases/README.md +++ b/use-cases/README.md @@ -5,6 +5,7 @@ Please [open an issue](https://github.com/sendgrid/sendgrid-ruby/issues) or [mak # Email Use Cases * [Transactional Templates](transactional-templates.md) * [Legacy Templates](legacy-templates.md) +* [Personalizations](personalizations.md) # Twilio Use Cases * [Twilio Setup](twilio-setup.md) diff --git a/use-cases/personalizations.md b/use-cases/personalizations.md new file mode 100644 index 00000000..494161d8 --- /dev/null +++ b/use-cases/personalizations.md @@ -0,0 +1,48 @@ +# Personalizations + +This example goes over how to send multiple emails using personalizations with the helper class. + +A similar example can be found in `examples/helpers/mail/MultipleEmailsMultipleRecipients.java`, and further documentation can be found [here](https://docs.sendgrid.com/for-developers/sending-email/personalizations). + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) { + final Mail mail = new Mail(); + + // Note that the domain of the from addresses should be the same + mail.setFrom(new Email("test@example.com", "Example User")); + mail.setSubject("I'm the original subject"); + mail.addContent(new Content("text/plain", "and this is some content")); + mail.addContent(new Content("text/html", "and this is some content")); + + final Personalization personalization1 = new Personalization(); + personalization1.addTo(new Email("test1@example.com", "Example User1")); + personalization1.addCc(new Email("test2@example.com", "Example User2")); + mail.addPersonalization(personalization1); + + final Personalization personalization2 = new Personalization(); + personalization2.addTo(new Email("test3@example.com", "Example User3")); + personalization2.setFrom(new Email("test4@example.com", "Example User4")); + personalization2.setSubject(new Subject("I'm the personalized subject")); + personalization2.addBcc(new Email("test5@example.com", "Example User5")); + mail.addPersonalization(personalization2); + + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` \ No newline at end of file From 7a58fcd4f0dca8c8de984d762bacb88717268753 Mon Sep 17 00:00:00 2001 From: Ethan Lo Date: Mon, 1 Nov 2021 18:20:04 -0400 Subject: [PATCH 383/439] fix: Add missing bypass settings to MailSettings (#707) * Add missing bypass settings to MailSettings --- examples/helpers/mail/Example.java | 11 +++ .../helpers/mail/objects/MailSettings.java | 88 +++++++++++++++++++ .../java/com/sendgrid/helpers/MailTest.java | 11 ++- 3 files changed, 109 insertions(+), 1 deletion(-) diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index bffcdfdb..174e38ba 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -149,6 +149,17 @@ public static Mail buildKitchenSink() { Setting bypassListManagement = new Setting(); bypassListManagement.setEnable(true); mailSettings.setBypassListManagement(bypassListManagement); + // Note: Bypass Spam, Bounce, and Unsubscribe management cannot + // be combined with Bypass List Management + Setting bypassSpamManagement = new Setting(); + bypassSpamManagement.setEnable(true); + mailSettings.setBypassSpamManagement(bypassSpamManagement); + Setting bypassBounceManagement = new Setting(); + bypassBounceManagement.setEnable(true); + mailSettings.setBypassBounceManagement(bypassBounceManagement); + Setting bypassUnsubscribeManagement = new Setting(); + bypassUnsubscribeManagement.setEnable(true); + mailSettings.setBypassUnsubscribeManagement(bypassUnsubscribeManagement); FooterSetting footerSetting = new FooterSetting(); footerSetting.setEnable(true); footerSetting.setText("Footer Text"); diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index d83a56b6..1bad6b09 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -18,6 +18,15 @@ public class MailSettings { @JsonProperty("bypass_list_management") private Setting bypassListManagement; + @JsonProperty("bypass_spam_management") + private Setting bypassSpamManagement; + + @JsonProperty("bypass_bounce_management") + private Setting bypassBounceManagement; + + @JsonProperty("bypass_unsubscribe_management") + private Setting bypassUnsubscribeManagement; + @JsonProperty("footer") private FooterSetting footerSetting; @@ -58,6 +67,58 @@ public void setBypassListManagement(Setting bypassListManagement) { this.bypassListManagement = bypassListManagement; } + /** + * Allows you to bypass the spam report list to ensure that the email is delivered to recipients. + * Bounce and unsubscribe lists will still be checked; addresses on these other lists will not + * receive the message. + * + * This filter cannot be combined with the bypass_list_management filter. + * @return the bypass spam setting + */ + + @JsonProperty("bypass_spam_management") + public Setting getBypassSpamManagement() { + return bypassSpamManagement; + } + + public void setBypassSpamManagement(Setting bypassSpamManagement) { + this.bypassSpamManagement = bypassSpamManagement; + } + + /** + * Allows you to bypass the bounce list to ensure that the email is delivered to recipients. + * Spam report and unsubscribe lists will still be checked; addresses on these other lists + * will not receive the message. + * + * This filter cannot be combined with the bypass_list_management filter. + * @return the bypass bounce setting + */ + @JsonProperty("bypass_bounce_management") + public Setting getBypassBounceManagement() { + return bypassBounceManagement; + } + public void setBypassBounceManagement(Setting bypassBounceManagement) { + this.bypassBounceManagement = bypassBounceManagement; + } + + /** + * Allows you to bypass the global unsubscribe list to ensure that the email is delivered + * to recipients. Bounce and spam report lists will still be checked; addresses on these + * other lists will not receive the message. This filter applies only to global unsubscribes + * and will not bypass group unsubscribes. + * + * This filter cannot be combined with the bypass_list_management filter. + * @return the bypass unsubscribe setting + */ + @JsonProperty("bypass_unsubscribe_management") + public Setting getBypassUnsubscribeManagement() { + return bypassUnsubscribeManagement; + } + + public void setBypassUnsubscribeManagement(Setting bypassUnsubscribeManagement) { + this.bypassUnsubscribeManagement = bypassUnsubscribeManagement; + } + /** * Get the footer settings that you would like included on every email. * @@ -128,6 +189,12 @@ public int hashCode() { result = prime * result + ((bccSettings == null) ? 0 : bccSettings.hashCode()); result = prime * result + ((bypassListManagement == null) ? 0 : bypassListManagement.hashCode()); + result = + prime * result + ((bypassSpamManagement == null) ? 0 : bypassSpamManagement.hashCode()); + result = + prime * result + ((bypassBounceManagement == null) ? 0 : bypassBounceManagement.hashCode()); + result = + prime * result + ((bypassUnsubscribeManagement == null) ? 0 : bypassUnsubscribeManagement.hashCode()); result = prime * result + ((footerSetting == null) ? 0 : footerSetting.hashCode()); result = prime * result + ((sandBoxMode == null) ? 0 : sandBoxMode.hashCode()); result = prime * result + ((spamCheckSetting == null) ? 0 : spamCheckSetting.hashCode()); @@ -160,6 +227,27 @@ public boolean equals(Object obj) { } else if (!bypassListManagement.equals(other.bypassListManagement)) { return false; } + if (bypassSpamManagement == null) { + if (other.bypassSpamManagement != null) { + return false; + } + } else if (!bypassSpamManagement.equals(other.bypassSpamManagement)) { + return false; + } + if (bypassBounceManagement == null) { + if (other.bypassBounceManagement != null) { + return false; + } + } else if (!bypassBounceManagement.equals(other.bypassBounceManagement)) { + return false; + } + if (bypassUnsubscribeManagement == null) { + if (other.bypassUnsubscribeManagement != null) { + return false; + } + } else if (!bypassUnsubscribeManagement.equals(other.bypassUnsubscribeManagement)) { + return false; + } if (footerSetting == null) { if (other.footerSetting != null) { return false; diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 9cdc194c..22c7f8db 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -212,7 +212,16 @@ public void testKitchenSink() throws IOException { mailSettings.setSandboxMode(sandBoxMode); Setting bypassListManagement = new Setting(); bypassListManagement.setEnable(true); + Setting bypassSpamManagement = new Setting(); + bypassSpamManagement.setEnable(true); + Setting bypassBounceManagement = new Setting(); + bypassBounceManagement.setEnable(true); + Setting bypassUnsubscribeManagement = new Setting(); + bypassUnsubscribeManagement.setEnable(true); mailSettings.setBypassListManagement(bypassListManagement); + mailSettings.setBypassSpamManagement(bypassSpamManagement); + mailSettings.setBypassBounceManagement(bypassBounceManagement); + mailSettings.setBypassUnsubscribeManagement(bypassUnsubscribeManagement); FooterSetting footerSetting = new FooterSetting(); footerSetting.setEnable(true); footerSetting.setText("Footer Text"); @@ -255,7 +264,7 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender\",\"email\":\"sender@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender2\",\"email\":\"sender2@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"items\":[{\"price\":\"$ 59.95\",\"text\":\"New Line Sneakers\"},{\"text\":\"Old Line Sneakers\"}],\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender\",\"email\":\"sender@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender2\",\"email\":\"sender2@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"items\":[{\"price\":\"$ 59.95\",\"text\":\"New Line Sneakers\"},{\"text\":\"Old Line Sneakers\"}],\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"bypass_spam_management\":{\"enable\":true},\"bypass_bounce_management\":{\"enable\":true},\"bypass_unsubscribe_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } @Test From f28554621884c0d44f1dc7564f931a8602aa7346 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 3 Nov 2021 18:51:56 +0000 Subject: [PATCH 384/439] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95307ff6..a3110c8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-11-03] Version 4.8.0 +-------------------------- +**Library - Fix** +- [PR #707](https://github.com/sendgrid/sendgrid-java/pull/707): Add missing bypass settings to MailSettings. Thanks to [@arkitex](https://github.com/arkitex)! + +**Library - Feature** +- [PR #706](https://github.com/sendgrid/sendgrid-java/pull/706): allow personalization of the From name and email for each email recipient. Thanks to [@beebzz](https://github.com/beebzz)! + + [2021-10-18] Version 4.7.6 -------------------------- **Library - Docs** From deffb1a395a6ed043ad78ae4da9dd03b22614e59 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 3 Nov 2021 19:00:15 +0000 Subject: [PATCH 385/439] Release 4.8.0 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5229ed86..f5eeef08 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.6/sendgrid-4.7.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.6/sendgrid-4.7.6-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.8.0/sendgrid-4.8.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.0/sendgrid-4.8.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 5acaee3e..d8ac5954 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.6' + implementation 'com.sendgrid:sendgrid-java:4.8.0' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.6/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 4a9f4a00..3b6a9fc1 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.6 + 4.8.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.6 + 4.8.0 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 31bb9dfa..0165c442 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.6"; + private static final String VERSION = "4.8.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index b181589d..cd8b1673 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.6"); + Assert.assertEquals(sg.getLibraryVersion(), "4.8.0"); } @Test From 0923ae3ef98517b12e40391ae739446b98dc9f41 Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Fri, 19 Nov 2021 13:04:56 -0800 Subject: [PATCH 386/439] chore: add mvn package to the makefile --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index 82e5c343..ee8f4586 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,9 @@ install: mvn clean install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B cp target/sendgrid-java-$(VERSION)-shaded.jar sendgrid-java.jar +package: + mvn package -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B + test: mvn test spotbugs:spotbugs checkstyle:check -Dcheckstyle.config.location=google_checks.xml From 9bdebbe2e066f6b3ea80baf3fdbaeda46b9bc56e Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Fri, 19 Nov 2021 14:08:01 -0800 Subject: [PATCH 387/439] chore: add jar copying to make package --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index ee8f4586..c9d7fc3c 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ install: package: mvn package -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B + cp target/sendgrid-java-$(VERSION)-shaded.jar sendgrid-java.jar test: mvn test spotbugs:spotbugs checkstyle:check -Dcheckstyle.config.location=google_checks.xml From f6b666c016c7a2ebe9835a36398821a596df9a21 Mon Sep 17 00:00:00 2001 From: Jennifer Mah <42650198+JenniferMah@users.noreply.github.com> Date: Sat, 20 Nov 2021 10:55:44 -0800 Subject: [PATCH 388/439] chore: clean up makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c9d7fc3c..0c93f25f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: install test test-integ test-docker clean +.PHONY: install package test test-integ test-docker clean VERSION := $(shell mvn help:evaluate -Dexpression=project.version --batch-mode | grep -e '^[^\[]') install: From c655b128c935d0a7a69035954765a5e364640e5d Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Tue, 30 Nov 2021 15:31:08 -0800 Subject: [PATCH 389/439] chore: migrate to github actions (#709) --- .codeclimate.yml | 8 --- .github/workflows/release.yml | 50 +++++++++++++++++++ .github/workflows/test.yml | 42 ++++++++++++++++ .maven.xml | 24 --------- .travis.yml | 34 ------------- README.md | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 8 +-- .../com/sendgrid/TestRequiredFilesExist.java | 12 ----- 8 files changed, 97 insertions(+), 83 deletions(-) delete mode 100644 .codeclimate.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/test.yml delete mode 100644 .maven.xml delete mode 100644 .travis.yml diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index 5b82009c..00000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -plugins: - checkstyle: - enabled: true - fixme: - enabled: true - pmd: - enabled: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..d4317b90 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,50 @@ +name: Release +on: + push: + tags: + - '*' + workflow_dispatch: + +jobs: + release: + name: Release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Set up Sonatype Maven + uses: actions/setup-java@v2 + with: + java-version: 8 + distribution: temurin + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg-passphrase: GPG_PASSPHRASE + + - run: mvn install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V + - name: Publish to Maven + env: + MAVEN_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + run: mvn clean deploy -DskipTests=true -B -U -Prelease + + notify-on-failure: + name: Slack notify on failure + if: ${{ failure() }} + needs: [release] + runs-on: ubuntu-latest + steps: + - uses: rtCamp/action-slack-notify@v2 + env: + SLACK_COLOR: 'danger' + SLACK_ICON_EMOJI: ':github:' + SLACK_MESSAGE: ${{ format('Failed to release {1}{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} + SLACK_TITLE: Release Failure + SLACK_USERNAME: GitHub Actions + SLACK_MSG_AUTHOR: twilio-dx + SLACK_FOOTER: Posted automatically using GitHub Actions + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + MSG_MINIMAL: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..d981dca6 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,42 @@ +name: Tests +on: + push: + branches: [ '*' ] + pull_request: + branches: [ main ] + schedule: + # Run automatically at 8AM PST Monday-Friday + - cron: '0 15 * * 1-5' + workflow_dispatch: + +jobs: + test: + name: Test + runs-on: ubuntu-latest + timeout-minutes: 20 + strategy: + matrix: + java: [8, 11] + steps: + - uses: actions/checkout@v2 + + - name: Run Unit Tests + run: make test-docker version=${{ matrix.java }} + + notify-on-failure: + name: Slack notify on failure + if: ${{ failure() && github.ref == 'refs/heads/main' && github.event_name != 'pull_request' }} + needs: [test] + runs-on: ubuntu-latest + steps: + - uses: rtCamp/action-slack-notify@v2 + env: + SLACK_COLOR: ${{ needs.test.status }} + SLACK_ICON_EMOJI: ':github:' + SLACK_MESSAGE: ${{ format('Build {2} in {1} failed{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} + SLACK_TITLE: Build Failure + SLACK_USERNAME: GitHub Actions + SLACK_MSG_AUTHOR: twilio-dx + SLACK_FOOTER: Posted automatically using GitHub Actions + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + MSG_MINIMAL: true diff --git a/.maven.xml b/.maven.xml deleted file mode 100644 index bef1ab68..00000000 --- a/.maven.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - ossrh - ${env.SONATYPE_USERNAME} - ${env.SONATYPE_PASSWORD} - - - - - - ossrh - - true - - - ${env.GPG_EXECUTABLE} - ${env.GPG_PASSPHRASE} - - - - diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d4b2a0ac..00000000 --- a/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -language: java -jdk: openjdk8 -before_install: -- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - -- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" -- sudo apt-get update -- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce -- docker --version -- echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true -- echo $GPG_OWNERTRUST | base64 --decode | $GPG_EXECUTABLE --import-ownertrust --batch || true -env: -- version=8 -- version=11 -script: -- if [[ "$TRAVIS_BRANCH" == "main" || "$TRAVIS_BRANCH" == "travis" ]] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then - echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin; - fi -- make test-docker -deploy: -- provider: script - script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease - edge: true - on: - tags: true - condition: "$version = 8" - branch: main -notifications: - slack: - if: branch = main - on_pull_requests: false - on_success: never - on_failure: change - rooms: - secure: NGGQe8OMWfbAOM6O7odDHtY/UVdqJ6oLQzB96QlTNkGgbyINKdufHxHaiv0SC/w4alUzzs6gw1h2WCpxw1PPl+pnVAeSVLfvRLYQApCGigWF0s5AyfVxtoG7bZOQLhsddC1ldQr12G4zclew+7k+0bgra4ENkbvv1OGiQdPJ08U= diff --git a/README.md b/README.md index d8ac5954..4b140912 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![SendGrid Logo](twilio_sendgrid_logo.png) -[![Travis Badge](https://travis-ci.com/sendgrid/sendgrid-java.svg?branch=main)](https://travis-ci.com/sendgrid/sendgrid-java) +[![BuildStatus](https://github.com/sendgrid/sendgrid-java/actions/workflows/test.yml/badge.svg)](https://github.com/sendgrid/sendgrid-java/actions/workflows/test.yml) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index cd8b1673..089c4a11 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -2193,25 +2193,25 @@ public void test_suppression_invalid_emails__email__delete() throws IOException } @Test - public void test_suppression_spam_report__email__get() throws IOException { + public void test_suppression_spam_reports__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/spam_report/{email}"); + request.setEndpoint("suppression/spam_reports/{email}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @Test - public void test_suppression_spam_report__email__delete() throws IOException { + public void test_suppression_spam_reports__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.setMethod(Method.DELETE); - request.setEndpoint("suppression/spam_report/{email}"); + request.setEndpoint("suppression/spam_reports/{email}"); Response response = sg.api(request); Assert.assertEquals(204, response.getStatusCode()); } diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index d6e000d0..71209ea1 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -25,18 +25,6 @@ public void checkGitIgnoreExists() { assertTrue(new File("./.gitignore").exists()); } - // ./.travis.yml - @Test - public void checkTravisExists() { - assertTrue(new File("./.travis.yml").exists()); - } - - // ./.codeclimate.yml - @Test - public void checkCodeClimateExists() { - assertTrue(new File("./.codeclimate.yml").exists()); - } - // ./CHANGELOG.md @Test public void checkChangelogExists() { From 230dfc42dfbbe0be6bacc6ef4bbe53d3454763fe Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Wed, 1 Dec 2021 11:47:20 -0800 Subject: [PATCH 390/439] chore: fix pom for release (#710) --- pom.xml | 42 +++++++++--------------------------------- 1 file changed, 9 insertions(+), 33 deletions(-) diff --git a/pom.xml b/pom.xml index 3b6a9fc1..a4189221 100644 --- a/pom.xml +++ b/pom.xml @@ -29,38 +29,6 @@ 4.8.0 - - gpg - - false - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - ${gpg.keyname} - ${gpg.passphrase} - - --pinentry-mode - loopback - - - - - - release @@ -118,6 +86,14 @@ sign + + ${gpg.keyname} + ${gpg.passphrase} + + --pinentry-mode + loopback + + @@ -330,4 +306,4 @@ - \ No newline at end of file + From d52063285c7be507c511c101be1826d104ba4b1e Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 1 Dec 2021 21:44:52 +0000 Subject: [PATCH 391/439] [Librarian] Version Bump --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3110c8b..41ca85ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-12-01] Version 4.8.1 +-------------------------- +**Library - Chore** +- [PR #710](https://github.com/sendgrid/sendgrid-java/pull/710): fix pom for release. Thanks to [@eshanholtz](https://github.com/eshanholtz)! +- [PR #709](https://github.com/sendgrid/sendgrid-java/pull/709): migrate to github actions. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + + [2021-11-03] Version 4.8.0 -------------------------- **Library - Fix** From dd2cc8066575b213a0be5ee548ca58cfe416213e Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 1 Dec 2021 22:15:33 +0000 Subject: [PATCH 392/439] Release 4.8.1 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 10 +++++----- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f5eeef08..0f00dcd1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.8.0/sendgrid-4.8.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.0/sendgrid-4.8.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.8.1/sendgrid-4.8.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.1/sendgrid-4.8.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 4b140912..500bcf5b 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.8.0' + implementation 'com.sendgrid:sendgrid-java:4.8.1' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.1/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index a4189221..875499e4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.8.0 + 4.8.1 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.8.0 + 4.8.1 @@ -262,7 +262,7 @@ com.sendgrid java-http-client - 4.3.7 + 4.3.8 com.fasterxml.jackson.core @@ -294,7 +294,7 @@ org.bouncycastle bcprov-jdk15on - 1.69 + 1.70 @@ -306,4 +306,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 0165c442..e1014b33 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.8.0"; + private static final String VERSION = "4.8.1"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 089c4a11..395e360d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.8.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.8.1"); } @Test From c49aa563676bbc4c85eb17791b3fe2214eaf6d76 Mon Sep 17 00:00:00 2001 From: Shwetha Radhakrishna Date: Thu, 16 Dec 2021 14:12:06 -0600 Subject: [PATCH 393/439] chore: update slack notification color --- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d4317b90..eac26805 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,7 +39,7 @@ jobs: steps: - uses: rtCamp/action-slack-notify@v2 env: - SLACK_COLOR: 'danger' + SLACK_COLOR: failure SLACK_ICON_EMOJI: ':github:' SLACK_MESSAGE: ${{ format('Failed to release {1}{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} SLACK_TITLE: Release Failure diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d981dca6..ba2528f3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,7 +31,7 @@ jobs: steps: - uses: rtCamp/action-slack-notify@v2 env: - SLACK_COLOR: ${{ needs.test.status }} + SLACK_COLOR: failure SLACK_ICON_EMOJI: ':github:' SLACK_MESSAGE: ${{ format('Build {2} in {1} failed{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} SLACK_TITLE: Build Failure From f461b4d40333cd89038ed4a292037fea5638181b Mon Sep 17 00:00:00 2001 From: Jennifer Mah <42650198+JenniferMah@users.noreply.github.com> Date: Tue, 4 Jan 2022 15:06:31 -0700 Subject: [PATCH 394/439] chore: update license year (#712) --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index e5439a92..5db04ff6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2021, Twilio SendGrid, Inc. +Copyright (C) 2022, Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From 471509748cc81af48dbb2ca49a07276769a95f7e Mon Sep 17 00:00:00 2001 From: Bilal Boussayoud Date: Fri, 7 Jan 2022 10:59:23 -0700 Subject: [PATCH 395/439] fix: fix sendgrid-java unit tests (#713) * switch to non-SAN cert for unit tests --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0c93f25f..5bd698c8 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ test-integ: test version ?= latest test-docker: - curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/HEAD/prism/prism.sh -o prism.sh + curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/HEAD/prism/prism-java.sh -o prism.sh version=$(version) bash ./prism.sh clean: From 7ec917cfd88e7834cf30b45f12838fe74dae9a0a Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 12 Jan 2022 20:25:58 +0000 Subject: [PATCH 396/439] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41ca85ef..3f06eeb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-01-12] Version 4.8.2 +-------------------------- +**Library - Fix** +- [PR #713](https://github.com/sendgrid/sendgrid-java/pull/713): fix sendgrid-java unit tests. Thanks to [@beebzz](https://github.com/beebzz)! + +**Library - Chore** +- [PR #712](https://github.com/sendgrid/sendgrid-java/pull/712): update license year. Thanks to [@JenniferMah](https://github.com/JenniferMah)! + + [2021-12-01] Version 4.8.1 -------------------------- **Library - Chore** From b91aae4859893636fd4a06593490086c00ae87b9 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 12 Jan 2022 20:30:05 +0000 Subject: [PATCH 397/439] Release 4.8.2 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0f00dcd1..c229cbe3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.8.1/sendgrid-4.8.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.1/sendgrid-4.8.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.8.2/sendgrid-4.8.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.2/sendgrid-4.8.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index 500bcf5b..47542863 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.8.1' + implementation 'com.sendgrid:sendgrid-java:4.8.2' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.2/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 875499e4..fce0c0e8 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.8.1 + 4.8.2 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.8.1 + 4.8.2 @@ -262,7 +262,7 @@ com.sendgrid java-http-client - 4.3.8 + 4.3.9 com.fasterxml.jackson.core diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index e1014b33..40ebdf75 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.8.1"; + private static final String VERSION = "4.8.2"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 395e360d..d5053449 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.8.1"); + Assert.assertEquals(sg.getLibraryVersion(), "4.8.2"); } @Test From 3633b3886ffa4a795639547d5304a9e43debdad4 Mon Sep 17 00:00:00 2001 From: Hunga1 Date: Thu, 3 Feb 2022 13:27:27 -0700 Subject: [PATCH 398/439] chore: merge test and deploy workflows (#715) --- .../{release.yml => test-and-deploy.yml} | 40 ++++++++++++++---- .github/workflows/test.yml | 42 ------------------- README.md | 2 +- 3 files changed, 32 insertions(+), 52 deletions(-) rename .github/workflows/{release.yml => test-and-deploy.yml} (55%) delete mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/release.yml b/.github/workflows/test-and-deploy.yml similarity index 55% rename from .github/workflows/release.yml rename to .github/workflows/test-and-deploy.yml index eac26805..8ac8e2c3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/test-and-deploy.yml @@ -1,15 +1,37 @@ -name: Release +name: Test and Deploy on: push: - tags: - - '*' + branches: [ '*' ] + tags: [ '*' ] + pull_request: + branches: [ main ] + schedule: + # Run automatically at 8AM PST Monday-Friday + - cron: '0 15 * * 1-5' workflow_dispatch: jobs: - release: - name: Release + test: + name: Test runs-on: ubuntu-latest + timeout-minutes: 20 + strategy: + matrix: + java: [8, 11] steps: + - name: Checkout sendgrid-java + - uses: actions/checkout@v2 + + - name: Run Unit Tests + run: make test-docker version=${{ matrix.java }} + + deploy: + name: Deploy + if: success() && github.ref_type == 'tag' + needs: [ test ] + runs-on: ubuntu-latest + steps: + - name: Checkout sendgrid-java - uses: actions/checkout@v2 - name: Set up Sonatype Maven @@ -33,16 +55,16 @@ jobs: notify-on-failure: name: Slack notify on failure - if: ${{ failure() }} - needs: [release] + if: failure() && github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref_type == 'tag') + needs: [ test, deploy ] runs-on: ubuntu-latest steps: - uses: rtCamp/action-slack-notify@v2 env: SLACK_COLOR: failure SLACK_ICON_EMOJI: ':github:' - SLACK_MESSAGE: ${{ format('Failed to release {1}{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} - SLACK_TITLE: Release Failure + SLACK_MESSAGE: ${{ format('Test *{0}*, Deploy *{1}*, {2}/{3}/actions/runs/{4}', needs.test.result, needs.deploy.result, github.server_url, github.repository, github.run_id) }} + SLACK_TITLE: Action Failure - ${{ github.repository }} SLACK_USERNAME: GitHub Actions SLACK_MSG_AUTHOR: twilio-dx SLACK_FOOTER: Posted automatically using GitHub Actions diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index ba2528f3..00000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Tests -on: - push: - branches: [ '*' ] - pull_request: - branches: [ main ] - schedule: - # Run automatically at 8AM PST Monday-Friday - - cron: '0 15 * * 1-5' - workflow_dispatch: - -jobs: - test: - name: Test - runs-on: ubuntu-latest - timeout-minutes: 20 - strategy: - matrix: - java: [8, 11] - steps: - - uses: actions/checkout@v2 - - - name: Run Unit Tests - run: make test-docker version=${{ matrix.java }} - - notify-on-failure: - name: Slack notify on failure - if: ${{ failure() && github.ref == 'refs/heads/main' && github.event_name != 'pull_request' }} - needs: [test] - runs-on: ubuntu-latest - steps: - - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_COLOR: failure - SLACK_ICON_EMOJI: ':github:' - SLACK_MESSAGE: ${{ format('Build {2} in {1} failed{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} - SLACK_TITLE: Build Failure - SLACK_USERNAME: GitHub Actions - SLACK_MSG_AUTHOR: twilio-dx - SLACK_FOOTER: Posted automatically using GitHub Actions - SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} - MSG_MINIMAL: true diff --git a/README.md b/README.md index 47542863..f7d63183 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![SendGrid Logo](twilio_sendgrid_logo.png) -[![BuildStatus](https://github.com/sendgrid/sendgrid-java/actions/workflows/test.yml/badge.svg)](https://github.com/sendgrid/sendgrid-java/actions/workflows/test.yml) +[![BuildStatus](https://github.com/sendgrid/sendgrid-java/actions/workflows/test-and-deploy.yml/badge.svg)](https://github.com/sendgrid/sendgrid-java/actions/workflows/test-and-deploy.yml) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) From 99028bae4fed2c4c1cc0915f8119327e86c5b41f Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Thu, 3 Feb 2022 14:29:07 -0600 Subject: [PATCH 399/439] fix: correct workflow --- .github/workflows/test-and-deploy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index 8ac8e2c3..6bac4240 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -20,7 +20,7 @@ jobs: java: [8, 11] steps: - name: Checkout sendgrid-java - - uses: actions/checkout@v2 + uses: actions/checkout@v2 - name: Run Unit Tests run: make test-docker version=${{ matrix.java }} @@ -32,7 +32,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout sendgrid-java - - uses: actions/checkout@v2 + uses: actions/checkout@v2 - name: Set up Sonatype Maven uses: actions/setup-java@v2 From 9ca89c8b0ded8471764c744cd09306764b8107d7 Mon Sep 17 00:00:00 2001 From: Shwetha Radhakrishna Date: Thu, 3 Feb 2022 16:57:31 -0600 Subject: [PATCH 400/439] chore: add gh release to workflow (#716) * chore: add gh release to workflow --- .github/workflows/test-and-deploy.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index 6bac4240..f7bf0466 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -45,7 +45,17 @@ jobs: gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} gpg-passphrase: GPG_PASSPHRASE - - run: mvn install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V + - name: Install dependencies and Build Release Artifacts + run: make install + + - name: Create GitHub Release + uses: sendgrid/dx-automator/actions/release@main + with: + assets: sendgrid-java.jar + footer: '**[Maven](https://mvnrepository.com/artifact/com.sendgrid/sendgrid-java/${version})**' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Publish to Maven env: MAVEN_USERNAME: ${{ secrets.SONATYPE_USERNAME }} From 844318b3e53629b086016cadd184b6a06a894d50 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 7 Feb 2022 12:50:41 -0600 Subject: [PATCH 401/439] fix: only do a Docker Login if the secrets are available --- .github/workflows/test-and-deploy.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index f7bf0466..b339136c 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -17,11 +17,20 @@ jobs: timeout-minutes: 20 strategy: matrix: - java: [8, 11] + java: [ 8, 11 ] + env: + DOCKER_LOGIN: ${{ secrets.DOCKER_USERNAME && secrets.DOCKER_AUTH_TOKEN }} steps: - name: Checkout sendgrid-java uses: actions/checkout@v2 + - name: Login to Docker Hub + if: env.DOCKER_LOGIN + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_AUTH_TOKEN }} + - name: Run Unit Tests run: make test-docker version=${{ matrix.java }} From bafc24ca17f4c2533c667e76e3b56776375e3096 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 9 Feb 2022 23:50:25 +0000 Subject: [PATCH 402/439] [Librarian] Version Bump --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f06eeb7..77196788 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-02-09] Version 4.8.3 +-------------------------- +**Library - Chore** +- [PR #716](https://github.com/sendgrid/sendgrid-java/pull/716): add gh release to workflow. Thanks to [@shwetha-manvinkurke](https://github.com/shwetha-manvinkurke)! +- [PR #715](https://github.com/sendgrid/sendgrid-java/pull/715): merge test and deploy workflows. Thanks to [@Hunga1](https://github.com/Hunga1)! + + [2022-01-12] Version 4.8.2 -------------------------- **Library - Fix** From 780ca3dbd5372ee9b0e01d0b6bf787dc4e2dcff9 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 9 Feb 2022 23:51:05 +0000 Subject: [PATCH 403/439] Release 4.8.3 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c229cbe3..aa3bdabe 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.8.2/sendgrid-4.8.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.2/sendgrid-4.8.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.8.3/sendgrid-4.8.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.3/sendgrid-4.8.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index f7d63183..28a7e5e9 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.8.2' + implementation 'com.sendgrid:sendgrid-java:4.8.3' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index fce0c0e8..63af227d 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.8.2 + 4.8.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.8.2 + 4.8.3 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 40ebdf75..312225d3 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.8.2"; + private static final String VERSION = "4.8.3"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index d5053449..a3ddfa0d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.8.2"); + Assert.assertEquals(sg.getLibraryVersion(), "4.8.3"); } @Test From 1ca4a0855f9b65d5ff8090fa1b9aef8d0e671667 Mon Sep 17 00:00:00 2001 From: Jennifer Mah <42650198+JenniferMah@users.noreply.github.com> Date: Thu, 24 Feb 2022 14:20:19 -0800 Subject: [PATCH 404/439] feat: add GH action to update dependencies (#717) --- .github/workflows/update-dependencies.yml | 52 +++++++++++++++++++++++ Makefile | 5 ++- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/update-dependencies.yml diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml new file mode 100644 index 00000000..d2e4152c --- /dev/null +++ b/.github/workflows/update-dependencies.yml @@ -0,0 +1,52 @@ +name: Update dependencies +on: + schedule: + # Run automatically at 7AM PST Tuesday + - cron: '0 14 * * 2' + workflow_dispatch: + +jobs: + update-dependencies-and-test: + name: Update Dependencies & Test + runs-on: ubuntu-latest + timeout-minutes: 20 + strategy: + max-parallel: 1 + matrix: + java: [ 8, 11 ] + + steps: + - name: Checkout sendgrid-java + uses: actions/checkout@v2 + + - name: Updating semver dependencies + run: make update-deps + + - name: Run Unit Tests + run: make test-docker version=${{ matrix.java }} + + - name: Add & Commit + if: matrix.java == '11' + uses: EndBug/add-and-commit@v8.0.2 + with: + add: 'pom.xml' + default_author: 'github_actions' + message: 'chore: update sendgrid-java dependencies' + + notify-on-failure: + name: Slack notify on failure + if: failure() + needs: [ update-dependencies-and-test ] + runs-on: ubuntu-latest + steps: + - uses: rtCamp/action-slack-notify@v2 + env: + SLACK_COLOR: failure + SLACK_ICON_EMOJI: ':github:' + SLACK_MESSAGE: ${{ format('Update dependencies *{0}*, {1}/{2}/actions/runs/{3}', needs.update-dependencies-and-test.result, github.server_url, github.repository, github.run_id) }} + SLACK_TITLE: Action Failure - ${{ github.repository }} + SLACK_USERNAME: GitHub Actions + SLACK_MSG_AUTHOR: twilio-dx + SLACK_FOOTER: Posted automatically using GitHub Actions + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + MSG_MINIMAL: true diff --git a/Makefile b/Makefile index 5bd698c8..3983b6aa 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: install package test test-integ test-docker clean +.PHONY: install package test test-integ test-docker update-deps clean VERSION := $(shell mvn help:evaluate -Dexpression=project.version --batch-mode | grep -e '^[^\[]') install: @@ -20,5 +20,8 @@ test-docker: curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/HEAD/prism/prism-java.sh -o prism.sh version=$(version) bash ./prism.sh +update-deps: + mvn versions:use-latest-releases versions:commit -DallowMajorUpdates=false + clean: mvn clean From 9a0631828b754d9ecb6155a90baabdd284468918 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Mon, 28 Feb 2022 12:40:14 -0800 Subject: [PATCH 405/439] chore: push Datadog Release Metric upon deploy success (#721) --- .github/workflows/test-and-deploy.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index b339136c..b8d847f2 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -72,6 +72,11 @@ jobs: GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} run: mvn clean deploy -DskipTests=true -B -U -Prelease + - name: Submit metric to Datadog + uses: sendgrid/dx-automator/actions/datadog-release-metric@main + env: + DD_API_KEY: ${{ secrets.DATADOG_API_KEY }} + notify-on-failure: name: Slack notify on failure if: failure() && github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref_type == 'tag') From 2e0344acd4348bce5783cc5edad36e8e77eecb6d Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 9 Mar 2022 12:21:55 -0800 Subject: [PATCH 406/439] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77196788..56c2628a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-03-09] Version 4.9.0 +-------------------------- +**Library - Chore** +- [PR #721](https://github.com/sendgrid/sendgrid-java/pull/721): push Datadog Release Metric upon deploy success. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + +**Library - Feature** +- [PR #717](https://github.com/sendgrid/sendgrid-java/pull/717): add GH action to update dependencies. Thanks to [@JenniferMah](https://github.com/JenniferMah)! + + [2022-02-09] Version 4.8.3 -------------------------- **Library - Chore** From f158675d27e4150311ef370ae30e3a446b67871d Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 9 Mar 2022 12:21:55 -0800 Subject: [PATCH 407/439] Release 4.9.0 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aa3bdabe..de6286e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.8.3/sendgrid-4.8.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.3/sendgrid-4.8.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.9.0/sendgrid-4.9.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.0/sendgrid-4.9.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 28a7e5e9..5d9f56e1 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.8.3' + implementation 'com.sendgrid:sendgrid-java:4.9.0' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.3/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 63af227d..e3d792f2 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.8.3 + 4.9.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.8.3 + 4.9.0 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 312225d3..07db9f28 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.8.3"; + private static final String VERSION = "4.9.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index a3ddfa0d..d55ece2b 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.8.3"); + Assert.assertEquals(sg.getLibraryVersion(), "4.9.0"); } @Test From d86854c296659df53bc809ae04f228a7fa65ef27 Mon Sep 17 00:00:00 2001 From: svcprodsec-sendgrid <70608793+svcprodsec-sendgrid@users.noreply.github.com> Date: Mon, 14 Mar 2022 12:41:06 -0400 Subject: [PATCH 408/439] chore: Security upgrade com.fasterxml.jackson.core:jackson-databind from 2.12.1 to 2.13.0 (#723) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e3d792f2..511082f4 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 2.12.1 + 2.13.0 https://github.com/sendgrid/sendgrid-java From 599814a9a58da2b7834c6b27a1de9ddc263e7643 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 23 Mar 2022 11:35:53 -0700 Subject: [PATCH 409/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56c2628a..58a316c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-03-23] Version 4.9.1 +-------------------------- +**Library - Chore** +- [PR #723](https://github.com/sendgrid/sendgrid-java/pull/723): Security upgrade com.fasterxml.jackson.core:jackson-databind from 2.12.1 to 2.13.0. Thanks to [@svcprodsec-sendgrid](https://github.com/svcprodsec-sendgrid)! + + [2022-03-09] Version 4.9.0 -------------------------- **Library - Chore** From 5015d5343b593080dfb916e29537b6c00982a283 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 23 Mar 2022 11:35:53 -0700 Subject: [PATCH 410/439] Release 4.9.1 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index de6286e2..73f9578f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.9.0/sendgrid-4.9.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.0/sendgrid-4.9.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.9.1/sendgrid-4.9.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.1/sendgrid-4.9.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 5d9f56e1..090fa97d 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.9.0' + implementation 'com.sendgrid:sendgrid-java:4.9.1' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.1/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 511082f4..ed93d8c9 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.9.0 + 4.9.1 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.9.0 + 4.9.1 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 07db9f28..74c50fec 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.9.0"; + private static final String VERSION = "4.9.1"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index d55ece2b..73d1614d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.9.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.9.1"); } @Test From 29b64073c6d94504b63d085bde496e2510663b5a Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Thu, 24 Mar 2022 10:48:12 -0500 Subject: [PATCH 411/439] chore: remove outdated announcements --- README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index 090fa97d..f9e0ea41 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,6 @@ [![Open Source Helpers](https://www.codetriage.com/sendgrid/sendgrid-java/badges/users.svg)](https://www.codetriage.com/sendgrid/sendgrid-java) [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) -**NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. - -**The default branch name for this repository has been changed to `main` as of 07/27/2020.** - **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** Version 3.X.X of this library provides full support for all Twilio SendGrid [Web API v3](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) endpoints, including the new [v3 /mail/send](https://sendgrid.com/blog/introducing-v3mailsend-sendgrids-new-mail-endpoint). @@ -201,9 +197,7 @@ public class Example { # Announcements -Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! - -All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. +All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). # How to Contribute From c868b731e63cdf3b34f4fbaa77a71a5cd7f7f705 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Fri, 25 Mar 2022 13:39:51 -0500 Subject: [PATCH 412/439] feat: add PR title validation --- .github/workflows/pr-lint.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .github/workflows/pr-lint.yml diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml new file mode 100644 index 00000000..8388f21e --- /dev/null +++ b/.github/workflows/pr-lint.yml @@ -0,0 +1,15 @@ +name: Lint PR +on: + pull_request_target: + types: [ opened, edited, reopened ] + +jobs: + validate: + name: Validate title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v4 + with: + types: chore docs fix feat test + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From ec53072c17fc6c8a2c6664c46025f8c741bbdb41 Mon Sep 17 00:00:00 2001 From: Bilal Boussayoud Date: Fri, 25 Mar 2022 15:27:37 -0600 Subject: [PATCH 413/439] fix: override default gh token (#725) * fix: override default gh token --- .github/workflows/update-dependencies.yml | 2 ++ pom.xml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml index d2e4152c..eea77a93 100644 --- a/.github/workflows/update-dependencies.yml +++ b/.github/workflows/update-dependencies.yml @@ -28,6 +28,8 @@ jobs: - name: Add & Commit if: matrix.java == '11' uses: EndBug/add-and-commit@v8.0.2 + env: + GITHUB_TOKEN: ${{ secrets.SG_JAVA_GITHUB_TOKEN }} with: add: 'pom.xml' default_author: 'github_actions' diff --git a/pom.xml b/pom.xml index ed93d8c9..3b221e3f 100644 --- a/pom.xml +++ b/pom.xml @@ -262,7 +262,7 @@ com.sendgrid java-http-client - 4.3.9 + 4.5.0 com.fasterxml.jackson.core From f370ca940014d4cc8ef731aaeed98f6e25c9be1b Mon Sep 17 00:00:00 2001 From: tomoyaY Date: Mon, 28 Mar 2022 23:13:44 +0900 Subject: [PATCH 414/439] chore: security upgrade jackson-databind from 2.13.0 to 2.13.2 (#726) --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3b221e3f..04d0d5bb 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 2.13.0 + 2.13.2 https://github.com/sendgrid/sendgrid-java @@ -306,4 +306,4 @@ - \ No newline at end of file + From 87d006f9efc13839d98147a36c6d6ce81a7f02e7 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Thu, 21 Apr 2022 14:44:34 -0500 Subject: [PATCH 415/439] test: lint PRs on synchronize events Since synchronize events clears the status checks, it needs to be re-run. --- .github/workflows/pr-lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml index 8388f21e..dc7af3d3 100644 --- a/.github/workflows/pr-lint.yml +++ b/.github/workflows/pr-lint.yml @@ -1,7 +1,7 @@ name: Lint PR on: pull_request_target: - types: [ opened, edited, reopened ] + types: [ opened, edited, synchronize, reopened ] jobs: validate: From 4c33cea86b07c1dda49ec10ac92d455a24cb384b Mon Sep 17 00:00:00 2001 From: "Gareth Paul Jones (GPJ)" Date: Mon, 9 May 2022 10:08:59 -0700 Subject: [PATCH 416/439] docs: Modify README.md in alignment with SendGrid Support (#732) --- .github/ISSUE_TEMPLATE/config.yml | 10 ------- CONTRIBUTING.md | 29 ------------------ ISSUE_TEMPLATE.md | 30 ------------------- PULL_REQUEST_TEMPLATE.md | 2 +- README.md | 10 +++---- .../com/sendgrid/TestRequiredFilesExist.java | 6 ---- 6 files changed, 6 insertions(+), 81 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 ISSUE_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index b24426d0..00000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,10 +0,0 @@ -contact_links: - - name: Twilio SendGrid Support - url: https://support.sendgrid.com - about: Get Support - - name: Stack Overflow - url: https://stackoverflow.com/questions/tagged/sendgrid-java+or+sendgrid+java - about: Ask questions on Stack Overflow - - name: Documentation - url: https://sendgrid.com/docs/for-developers/ - about: View Reference Documentation diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 73f9578f..d9f0088d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,8 +3,6 @@ Hello! Thank you for choosing to help contribute to one of the Twilio SendGrid o **All third party contributors acknowledge that any contributions they provide will be made under the same open source license that the open source project is provided under.** - [Feature Request](#feature-request) -- [Submit a Bug Report](#submit-a-bug-report) - - [Please use our Bug Report Template](#please-use-our-bug-report-template) - [Improvements to the Codebase](#improvements-to-the-codebase) - [Development Environment](#development-environment) - [Install and Run Locally](#install-and-run-locally) @@ -20,33 +18,6 @@ Hello! Thank you for choosing to help contribute to one of the Twilio SendGrid o There are a few ways to contribute, which we'll enumerate below: - -## Feature Request - -If you'd like to make a feature request, please read this section. - -The GitHub issue tracker is the preferred channel for library feature requests, but please respect the following restrictions: - -- Please **search for existing issues** in order to ensure we don't have duplicate bugs/feature requests. -- Please be respectful and considerate of others when commenting on issues - - -## Submit a Bug Report - -Note: DO NOT include your credentials in ANY code examples, descriptions, or media you make public. - -A software bug is a demonstrable issue in the code base. In order for us to diagnose the issue and respond as quickly as possible, please add as much detail as possible into your bug report. - -Before you decide to create a new issue, please try the following: - -1. Check the GitHub issues tab if the identified issue has already been reported, if so, please add a +1 to the existing post. -2. Update to the latest version of this code and check if the issue has already been fixed -3. Copy and fill in the Bug Report Template we have provided below - -### Please use our Bug Report Template - -In order to make the process easier, we've included a [sample bug report template](ISSUE_TEMPLATE.md). - ## Improvements to the Codebase diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md deleted file mode 100644 index 78ecfbd3..00000000 --- a/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,30 +0,0 @@ - - -### Issue Summary -A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. Please feel free to include screenshots, screencasts, or code examples. - -### Steps to Reproduce -1. This is the first step -2. This is the second step -3. Further steps, etc. - -### Code Snippet -```java -# paste code here -``` - -### Exception/Log -``` -# paste exception/log here -``` - -### Technical details: -* sendgrid-java version: -* java version: - diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index a2fca138..52d4bd95 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -28,4 +28,4 @@ A short description of what this PR does. - [ ] I have added the necessary documentation about the functionality in the appropriate .md file - [ ] I have added inline documentation to the code I modified -If you have questions, please file a [support ticket](https://support.sendgrid.com), or create a GitHub Issue in this repository. +If you have questions, please file a [support ticket](https://support.sendgrid.com). diff --git a/README.md b/README.md index f9e0ea41..e17f6191 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,7 @@ Version 3.X.X of this library provides full support for all Twilio SendGrid [Web This library represents the beginning of a new path for Twilio SendGrid. We want this library to be community driven and Twilio SendGrid led. We need your help to realize this goal. To help make sure we are building the right things in the right order, we ask that you create [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](CONTRIBUTING.md) or simply upvote or comment on existing issues or pull requests. -Please browse the rest of this README for further details. - -We appreciate your continued support, thank you! +**If you need help using SendGrid, please check the [Twilio SendGrid Support Help Center](https://support.sendgrid.com).** # Table of Contents @@ -27,6 +25,7 @@ We appreciate your continued support, thank you! * [How to Contribute](#contribute) * [Troubleshooting](#troubleshooting) * [About](#about) +* [Support](#support) * [License](#license) @@ -220,9 +219,10 @@ Please see our [troubleshooting guide](TROUBLESHOOTING.md) for common library is sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. -If you need help installing or using the library, please check the [Twilio SendGrid Support Help Center](https://support.sendgrid.com). + +# Support -If you've instead found a bug in the library or would like new features added, go ahead and open issues or pull requests against this repo! +If you need help installing or using the library, please check the [Twilio SendGrid Support Help Center](https://support.sendgrid.com). # License diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index 71209ea1..7675c8a2 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -43,12 +43,6 @@ public void checkContributingGuideExists() { assertTrue(new File("./CONTRIBUTING.md").exists()); } - // ./ISSUE_TEMPLATE.md - @Test - public void checkIssuesTemplateExists() { - assertTrue(new File("./ISSUE_TEMPLATE.md").exists()); - } - // ./LICENSE @Test public void checkLicenseExists() { From d27207e880c6e60dcdbad668ad2f5e09c38eb81a Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Thu, 12 May 2022 10:28:28 -0500 Subject: [PATCH 417/439] chore: drop the issue links from FIRST_TIMERS doc --- FIRST_TIMERS.md | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/FIRST_TIMERS.md b/FIRST_TIMERS.md index 9db04724..667746df 100644 --- a/FIRST_TIMERS.md +++ b/FIRST_TIMERS.md @@ -51,29 +51,3 @@ git push origin ## Important notice Before creating a pull request, make sure that you respect the repository's constraints regarding contributions. You can find them in the [CONTRIBUTING.md](CONTRIBUTING.md) file. - -## Repositories with Open, Easy, Help Wanted, Issue Filters - -* [Python SDK](https://github.com/sendgrid/sendgrid-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [PHP SDK](https://github.com/sendgrid/sendgrid-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [C# SDK](https://github.com/sendgrid/sendgrid-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Ruby SDK](https://github.com/sendgrid/sendgrid-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Node.js SDK](https://github.com/sendgrid/sendgrid-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Java SDK](https://github.com/sendgrid/sendgrid-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Go SDK](https://github.com/sendgrid/sendgrid-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Python SMTPAPI Client](https://github.com/sendgrid/smtpapi-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [PHP SMTPAPI Client](https://github.com/sendgrid/smtpapi-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [C# SMTPAPI Client](https://github.com/sendgrid/smtpapi-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Ruby SMTPAPI Client](https://github.com/sendgrid/smtpapi-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Node.js SMTPAPI Client](https://github.com/sendgrid/smtpapi-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Java SMTPAPI Client](https://github.com/sendgrid/smtpapi-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Go SMTPAPI Client](https://github.com/sendgrid/smtpapi-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Python HTTP Client](https://github.com/sendgrid/python-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [PHP HTTP Client](https://github.com/sendgrid/php-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [C# HTTP Client](https://github.com/sendgrid/csharp-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Java HTTP Client](https://github.com/sendgrid/java-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Ruby HTTP Client](https://github.com/sendgrid/ruby-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Go HTTP Client](https://github.com/sendgrid/rest/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Open API Definition](https://github.com/sendgrid/sendgrid-oai/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [DX Automator](https://github.com/sendgrid/dx-automator/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Documentation](https://github.com/sendgrid/docs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) From 5aa5da2111c886bac0a03e5b4c2c87df63f5e806 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 May 2022 13:35:23 -0700 Subject: [PATCH 418/439] [Librarian] Version Bump --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58a316c6..49c043fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-05-18] Version 4.9.2 +-------------------------- +**Library - Docs** +- [PR #732](https://github.com/sendgrid/sendgrid-java/pull/732): Modify README.md in alignment with SendGrid Support. Thanks to [@garethpaul](https://github.com/garethpaul)! + +**Library - Chore** +- [PR #726](https://github.com/sendgrid/sendgrid-java/pull/726): security upgrade jackson-databind from 2.13.0 to 2.13.2. Thanks to [@tomoyaY](https://github.com/tomoyaY)! + +**Library - Fix** +- [PR #725](https://github.com/sendgrid/sendgrid-java/pull/725): override default gh token. Thanks to [@beebzz](https://github.com/beebzz)! + + [2022-03-23] Version 4.9.1 -------------------------- **Library - Chore** From 873f34586d322fd9953edfd46bf41b45787c115b Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 May 2022 13:35:23 -0700 Subject: [PATCH 419/439] Release 4.9.2 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d9f0088d..077202cf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.9.1/sendgrid-4.9.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.1/sendgrid-4.9.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.9.2/sendgrid-4.9.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.2/sendgrid-4.9.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index e17f6191..94c401cc 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.9.1' + implementation 'com.sendgrid:sendgrid-java:4.9.2' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.2/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 04d0d5bb..df870530 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.9.1 + 4.9.2 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.9.1 + 4.9.2 @@ -306,4 +306,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 74c50fec..1c8302ab 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.9.1"; + private static final String VERSION = "4.9.2"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 73d1614d..415c7d81 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.9.1"); + Assert.assertEquals(sg.getLibraryVersion(), "4.9.2"); } @Test From 61c4d5dc4dadfbc0abf8ced5dbd1a66e7bbbb0ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 08:51:15 -0500 Subject: [PATCH 420/439] chore: bump jackson-databind from 2.13.2 to 2.13.3 (#727) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index df870530..b05e4fcf 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 2.13.2 + 2.13.3 https://github.com/sendgrid/sendgrid-java From cae0040abebb97f5d37aae60d2687d86118cef25 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 29 Jun 2022 11:49:59 -0700 Subject: [PATCH 421/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49c043fa..6a8840b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-06-29] Version 4.9.3 +-------------------------- +**Library - Chore** +- [PR #727](https://github.com/sendgrid/sendgrid-java/pull/727): bump jackson-databind from 2.13.2 to 2.13.3. Thanks to [@dependabot](https://github.com/dependabot)! + + [2022-05-18] Version 4.9.2 -------------------------- **Library - Docs** From 6b7fd6226e2e734ae05c69762528bc00d7ac4377 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 29 Jun 2022 11:49:59 -0700 Subject: [PATCH 422/439] Release 4.9.3 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 077202cf..139b3656 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.9.2/sendgrid-4.9.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.2/sendgrid-4.9.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.9.3/sendgrid-4.9.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.3/sendgrid-4.9.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index 94c401cc..fc60fb70 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.9.2' + implementation 'com.sendgrid:sendgrid-java:4.9.3' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index b05e4fcf..ef5d65c2 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.9.2 + 4.9.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.9.2 + 4.9.3 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 1c8302ab..0a812c19 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.9.2"; + private static final String VERSION = "4.9.3"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 415c7d81..2ac11fdb 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.9.2"); + Assert.assertEquals(sg.getLibraryVersion(), "4.9.3"); } @Test From 12a2ce039559a9568908314802f21ba55123e649 Mon Sep 17 00:00:00 2001 From: Raghav Katyal Date: Wed, 6 Jul 2022 16:15:04 -0700 Subject: [PATCH 423/439] Adding misc as PR type (#735) --- .github/workflows/pr-lint.yml | 2 +- PULL_REQUEST_TEMPLATE.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml index dc7af3d3..2f5232b0 100644 --- a/.github/workflows/pr-lint.yml +++ b/.github/workflows/pr-lint.yml @@ -10,6 +10,6 @@ jobs: steps: - uses: amannn/action-semantic-pull-request@v4 with: - types: chore docs fix feat test + types: chore docs fix feat test misc env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 52d4bd95..c15ea433 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -3,7 +3,7 @@ We appreciate the effort for this pull request but before that please make sure Please format the PR title appropriately based on the type of change: [!]: -Where is one of: docs, chore, feat, fix, test. +Where is one of: docs, chore, feat, fix, test, misc. Add a '!' after the type for breaking changes (e.g. feat!: new breaking feature). **All third-party contributors acknowledge that any contributions they provide will be made under the same open-source license that the open-source project is provided under.** From 146bfee5b200d2658206b09ff2a0f4f1c6e2e55c Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 3 Jan 2023 09:09:34 -0600 Subject: [PATCH 424/439] docs: updated the year in the license --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 5db04ff6..3154774a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2022, Twilio SendGrid, Inc. +Copyright (C) 2023, Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From 040d916d6b8cb2adf106ab6b910a1e00a85112af Mon Sep 17 00:00:00 2001 From: shrutiburman <87537688+shrutiburman@users.noreply.github.com> Date: Fri, 3 Nov 2023 00:22:24 +0530 Subject: [PATCH 425/439] feat: Add data residency for eu and global regions (#743) --- examples/dataresidency/setregion.java | 77 +++++++++++++++++++ src/main/java/com/sendgrid/BaseInterface.java | 25 ++++++ src/test/java/com/sendgrid/SendGridTest.java | 46 +++++++++++ 3 files changed, 148 insertions(+) create mode 100644 examples/dataresidency/setregion.java diff --git a/examples/dataresidency/setregion.java b/examples/dataresidency/setregion.java new file mode 100644 index 00000000..5dc42150 --- /dev/null +++ b/examples/dataresidency/setregion.java @@ -0,0 +1,77 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Set data residency to navigate to a region/edge. +// Currently supported: "global", "eu" + + +public class Example { + public static void main(String[] args) throws IOException { + try { + + final Mail helloWorld = buildHelloEmail(); + + Request request = new Request(); + request.setEndpoint("mail/send"); + request.setBody(helloWorld.build()); + request.setMethod(Method.POST); + + // sending to global data residency + Sendgrid sg = buildSendgridObj("global"); + Response response = sg.api(request); + System.out.println("Sending to hostname: " + sg.getHost()); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + + // sending to EU data residency + Sendgrid sg = buildSendgridObj("eu"); + Response response = sg.api(request); + System.out.println("Sending to hostname: " + sg.getHost()); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + + // not configuring any region defaults to global + Sendgrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Response response = sg.api(request); + System.out.println("Sending to hostname: " + sg.getHost()); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + + } catch (IOException ex) { + throw ex; + } + } + + public static Mail buildHelloEmail() { + Email from = new Email("test@example.com"); + String subject = "Hello World from the Twilio SendGrid Java Library"; + Email to = new Email("test@example.com"); + Content content = new Content("text/plain", "some text here"); + // Note that when you use this constructor an initial personalization object + // is created for you. It can be accessed via + // mail.personalization.get(0) as it is a List object + Mail mail = new Mail(from, subject, to, content); + Email email = new Email("test2@example.com"); + mail.personalization.get(0).addTo(email); + + return mail; + } + + public static Sendgrid buildSendgridObj(String region){ + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + sg.setDataResidency(region); + return sg; + + } +} + diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 0a812c19..bef1814f 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -17,6 +17,13 @@ public abstract class BaseInterface implements SendGridAPI { private static final int RATE_LIMIT_RESPONSE_CODE = 429; private static final int THREAD_POOL_SIZE = 8; + private static final Map allowedRegionsHostMap; + static { + //todo: change this to Map.of() when we've moved on from Java 8 + allowedRegionsHostMap = new HashMap<>(); + allowedRegionsHostMap.put("eu", "api.eu.sendgrid.com"); + allowedRegionsHostMap.put("global", "api.sendgrid.com"); + } private ExecutorService pool; /** @@ -336,4 +343,22 @@ public void run() { } }); } + + /* + * Client libraries contain setters for specifying region/edge. + * This allows support global and eu regions only. This set will likely expand in the future. + * Global should be the default + * Global region means the message should be sent through: + * HTTP: api.sendgrid.com + * EU region means the message should be sent through: + * HTTP: api.eu.sendgrid.com +*/ + public void setDataResidency(String region){ + if (allowedRegionsHostMap.containsKey(region)){ + this.host = allowedRegionsHostMap.get(region); + } + else{ + throw new IllegalArgumentException("region can only be \"eu\" or \"global\""); + } + } } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 2ac11fdb..00f66799 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -3242,4 +3242,50 @@ public void test_request_headers_override_sendgrid_object_headers() throws IOExc sg.api(request); verify(client).api(argThat((Request req) -> req.getHeaders().get("set-on-both").equals("456"))); } + + @Test + public void testSetResidency_happy_path_eu() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setDataResidency("eu"); + Assert.assertEquals(sg.getHost(), "api.eu.sendgrid.com"); + } + @Test + public void testSetResidency_happy_path_global() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setDataResidency("global"); + Assert.assertEquals(sg.getHost(), "api.sendgrid.com"); + } + + + @Test + public void testSetResidency_override_host() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setHost("api.new.com"); + sg.setDataResidency("eu"); + Assert.assertEquals(sg.getHost(), "api.eu.sendgrid.com"); + } + + @Test + public void testsetResidency_override_data_residency() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setDataResidency("eu"); + sg.setHost("api.new.com"); + Assert.assertEquals(sg.getHost(), "api.new.com"); + } + + @Test (expected = IllegalArgumentException.class) + public void testsetResidency_incorrect_region() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setDataResidency("foo"); + } + @Test (expected = IllegalArgumentException.class) + public void testsetResidency_null_region(){ + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setDataResidency(""); + } + @Test + public void testsetResidency_default_region() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + Assert.assertEquals(sg.getHost(), "api.sendgrid.com"); + } } From c81da35c271eab19f2cf63d7d8560926dc045a10 Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 6 Nov 2023 14:44:09 +0000 Subject: [PATCH 426/439] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a8840b0..a7293f35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2023-11-06] Version 4.10.0 +--------------------------- +**Library - Feature** +- [PR #743](https://github.com/sendgrid/sendgrid-java/pull/743): Add data residency for eu and global regions. Thanks to [@shrutiburman](https://github.com/shrutiburman)! + +**Library - Test** +- [PR #735](https://github.com/sendgrid/sendgrid-java/pull/735): Adding misc as PR type. Thanks to [@rakatyal](https://github.com/rakatyal)! + + [2022-06-29] Version 4.9.3 -------------------------- **Library - Chore** From 1ed873276731f12a71d0011dcf88804dca97e8ea Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 6 Nov 2023 14:44:09 +0000 Subject: [PATCH 427/439] Release 4.10.0 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 139b3656..77fc2389 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.9.3/sendgrid-4.9.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.3/sendgrid-4.9.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.10.0/sendgrid-4.10.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.0/sendgrid-4.10.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index fc60fb70..64a8aee5 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.9.3' + implementation 'com.sendgrid:sendgrid-java:4.10.0' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.3/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index ef5d65c2..bb404261 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.9.3 + 4.10.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.9.3 + 4.10.0 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index bef1814f..163490a9 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.9.3"; + private static final String VERSION = "4.10.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 00f66799..6e137eb8 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.9.3"); + Assert.assertEquals(sg.getLibraryVersion(), "4.10.0"); } @Test From d4d332faa34abf02c657c74842e496a8024a865a Mon Sep 17 00:00:00 2001 From: kebeda Date: Wed, 8 Nov 2023 06:21:13 -0600 Subject: [PATCH 428/439] =?UTF-8?q?=F0=9F=93=A6=EF=B8=8F=20chore(deps):=20?= =?UTF-8?q?updates=20bouncy=20castle=20to=201.75=20(latest=201.7x)=20(#741?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This mitigates CVE-2023-33201. ref. https://github.com/bcgit/bc-java/wiki/CVE-2023-33201 Co-authored-by: shrutiburman <87537688+shrutiburman@users.noreply.github.com> --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index bb404261..ee6657ae 100644 --- a/pom.xml +++ b/pom.xml @@ -293,8 +293,8 @@
    org.bouncycastle - bcprov-jdk15on - 1.70 + bcprov-jdk18on + 1.75 @@ -306,4 +306,4 @@ - \ No newline at end of file + From 8c5607f9dc1d566956d2d1ecea3738feb4549283 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Wed, 8 Nov 2023 08:44:57 -0500 Subject: [PATCH 429/439] Update bouncycastle to latest 1.76 (#744) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ee6657ae..c131cfa5 100644 --- a/pom.xml +++ b/pom.xml @@ -294,7 +294,7 @@ org.bouncycastle bcprov-jdk18on - 1.75 + 1.76 From 1692a4ed9115af6de0c4dcb055370931b2fe4ebe Mon Sep 17 00:00:00 2001 From: Twilio Date: Fri, 17 Nov 2023 10:32:39 +0000 Subject: [PATCH 430/439] [Librarian] Version Bump --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7293f35..50e27d1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +[2023-11-17] Version 4.10.1 +--------------------------- +**Library - Chore** +- [PR #744](https://github.com/sendgrid/sendgrid-java/pull/744): updates bouncy castle to 1.76 (latest 1.7x). Thanks to [@mrdziuban](https://github.com/mrdziuban)! +- [PR #741](https://github.com/sendgrid/sendgrid-java/pull/741): updates bouncy castle to 1.75 (latest 1.7x). Thanks to [@kebeda](https://github.com/kebeda)! + + [2023-11-06] Version 4.10.0 --------------------------- **Library - Feature** From 511e7f7f09db9fdaed832b49f779d53a7f54781f Mon Sep 17 00:00:00 2001 From: Twilio Date: Fri, 17 Nov 2023 10:32:39 +0000 Subject: [PATCH 431/439] Release 4.10.1 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 77fc2389..78483f31 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.10.0/sendgrid-4.10.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.0/sendgrid-4.10.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.10.1/sendgrid-4.10.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.1/sendgrid-4.10.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 64a8aee5..b3a3851b 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.10.0' + implementation 'com.sendgrid:sendgrid-java:4.10.1' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.1/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index c131cfa5..742055bb 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.10.0 + 4.10.1 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.10.0 + 4.10.1 @@ -306,4 +306,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 163490a9..9be558c4 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.10.0"; + private static final String VERSION = "4.10.1"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 6e137eb8..84d4c19d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.10.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.10.1"); } @Test From e5443e3213fcfa982bf56365fc7511afe58af9ea Mon Sep 17 00:00:00 2001 From: Shubham Date: Thu, 18 Jan 2024 14:04:18 +0530 Subject: [PATCH 432/439] chore: update jackson version and licence year (#745) * chore: upgraded the jackson version to 2.14.0 * chore: changed licence year to 2024 --- LICENSE | 2 +- pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/LICENSE b/LICENSE index 3154774a..d703157e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2023, Twilio SendGrid, Inc. +Copyright (C) 2024, Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/pom.xml b/pom.xml index 742055bb..ca72a7aa 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@
    - 2.13.3 + 2.14.0 https://github.com/sendgrid/sendgrid-java @@ -306,4 +306,4 @@ - \ No newline at end of file + From e9d0e9d4f475630b2a734afdc307484dbb283c0d Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 14 Feb 2024 08:35:49 +0000 Subject: [PATCH 433/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50e27d1f..0afa2205 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2024-02-14] Version 4.10.2 +--------------------------- +**Library - Chore** +- [PR #745](https://github.com/sendgrid/sendgrid-java/pull/745): update jackson version and licence year. Thanks to [@tiwarishubham635](https://github.com/tiwarishubham635)! + + [2023-11-17] Version 4.10.1 --------------------------- **Library - Chore** From 472b4df35a719b99db96e8e0a8bf1ea552feb686 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 14 Feb 2024 08:35:49 +0000 Subject: [PATCH 434/439] Release 4.10.2 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 78483f31..a5973600 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.10.1/sendgrid-4.10.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.1/sendgrid-4.10.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.10.2/sendgrid-4.10.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.2/sendgrid-4.10.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index b3a3851b..f1f3a0b8 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.10.1' + implementation 'com.sendgrid:sendgrid-java:4.10.2' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.2/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index ca72a7aa..541f1964 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.10.1 + 4.10.2 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.10.1 + 4.10.2 @@ -306,4 +306,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 9be558c4..100f235c 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.10.1"; + private static final String VERSION = "4.10.2"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 84d4c19d..9c0d3063 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.10.1"); + Assert.assertEquals(sg.getLibraryVersion(), "4.10.2"); } @Test From 8e59d61b8778b975129261075efe69022415bb9c Mon Sep 17 00:00:00 2001 From: Shubham Date: Tue, 10 Sep 2024 10:33:34 +0530 Subject: [PATCH 435/439] chore: move Bouncy Castle dependency to test scope (#767) * chore: install docker-compose * make bouncycastle test scope --- .github/workflows/test-and-deploy.yml | 5 +++++ pom.xml | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index b8d847f2..111591a6 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -31,6 +31,11 @@ jobs: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_AUTH_TOKEN }} + - name: Install Docker Compose + run: | + sudo apt-get update + sudo apt-get install -y docker-compose + - name: Run Unit Tests run: make test-docker version=${{ matrix.java }} diff --git a/pom.xml b/pom.xml index 541f1964..ea11d878 100644 --- a/pom.xml +++ b/pom.xml @@ -294,7 +294,8 @@ org.bouncycastle bcprov-jdk18on - 1.76 + 1.78.1 + test @@ -306,4 +307,4 @@ - \ No newline at end of file + From ff848fb6f1f001dffc582c9aff2cd2ce2e571eef Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Sep 2024 13:17:43 +0000 Subject: [PATCH 436/439] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0afa2205..0419d039 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2024-09-18] Version 4.10.3 +--------------------------- +**Library - Chore** +- [PR #767](https://github.com/sendgrid/sendgrid-java/pull/767): move Bouncy Castle dependency to test scope. Thanks to [@tiwarishubham635](https://github.com/tiwarishubham635)! + + [2024-02-14] Version 4.10.2 --------------------------- **Library - Chore** From 352d3538b187b76ba227ad1968fafbe20469e187 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Sep 2024 13:17:43 +0000 Subject: [PATCH 437/439] Release 4.10.3 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a5973600..c97a921f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.10.2/sendgrid-4.10.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.2/sendgrid-4.10.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.10.3/sendgrid-4.10.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.3/sendgrid-4.10.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index f1f3a0b8..090a0536 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.10.2' + implementation 'com.sendgrid:sendgrid-java:4.10.3' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index ea11d878..dad3a41a 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.10.2 + 4.10.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.10.2 + 4.10.3 @@ -307,4 +307,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 100f235c..7a45cda4 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.10.2"; + private static final String VERSION = "4.10.3"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 9c0d3063..8737cbb2 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.10.2"); + Assert.assertEquals(sg.getLibraryVersion(), "4.10.3"); } @Test From fa9bb12f73d2dfc10c7ea5a41bc2850be6fdd962 Mon Sep 17 00:00:00 2001 From: sbansla <104902068+sbansla@users.noreply.github.com> Date: Mon, 30 Jun 2025 13:19:45 +0530 Subject: [PATCH 438/439] chore: migrate ossrh to central publishing repo (#777) * chore: migrate ossrh to central publishing repo * updated license versiob --- LICENSE | 2 +- pom.xml | 16 +++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/LICENSE b/LICENSE index d703157e..126ceb1a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2024, Twilio SendGrid, Inc. +Copyright (C) 2025, Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/pom.xml b/pom.xml index dad3a41a..0d8ec8ef 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,6 @@ 4.0.0 - - org.sonatype.oss - oss-parent - 7 - com.sendgrid sendgrid-java Twilio SendGrid Java helper library @@ -39,14 +34,13 @@ - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.8 + org.sonatype.central + central-publishing-maven-plugin + 0.8.0 true - ossrh - https://oss.sonatype.org/ - true + central + true From 9f65fcf2109ca7860d6b8a1428da346fec555413 Mon Sep 17 00:00:00 2001 From: sbansla <104902068+sbansla@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:53:01 +0530 Subject: [PATCH 439/439] chore: Migrate ossrh to central (#778) * changing server-id to central --- .github/workflows/test-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index 111591a6..0a31274e 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -53,7 +53,7 @@ jobs: with: java-version: 8 distribution: temurin - server-id: ossrh + server-id: central server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}

    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 AUjP6A literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index 5ae6d8bb..8203ea1d 100644 --- a/pom.xml +++ b/pom.xml @@ -113,9 +113,19 @@ 4.3.4 - org.json - json - 20140107 + com.fasterxml.jackson.core + jackson-core + 2.5.3 + + + com.fasterxml.jackson.core + jackson-annotations + 2.5.3 + + + com.fasterxml.jackson.core + jackson-databind + 2.5.3 junit diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index e9d03406..24660543 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -29,31 +29,40 @@ public SendGrid(String apiKey) { this.requestHeaders.put("User-agent", USER_AGENT); } - public SendGrid(String apiKey, Map opts) { - this(apiKey); - if(opts.containsKey("host") == true) { - this.host = opts.get("host"); - } - } - public String getVersion() { return this.VERSION; } - public Response get(String endpoint) throws IOException { - Request request = new Request(); - request.baseUri = host; - request.requestHeaders = requestHeaders; - request.method = Method.GET; - request.endpoint = "/" + version + "/" + endpoint; - Map queryParams = new HashMap(); - queryParams.put("limit", "100"); - queryParams.put("offset", "0"); - request.queryParams = queryParams; + public Map addHeader(String key, String value){ + this.requestHeaders.put(key, value); + return this.requestHeaders; + } + + public Map removeHeader(String key){ + this.requestHeaders.remove(key); + return this.requestHeaders; + } + + public void setHost(String host){ + this.host = host; + } + + public void setVersion(String version){ + this.version = version; + } + + public Response api(Request request) throws IOException { + Request req = new Request(); + req.method = request.method; + req.baseUri = this.host; + req.endpoint = "/" + version + "/" + request.endpoint; + req.requestBody = request.requestBody; + req.requestHeaders = this.requestHeaders; + req.queryParams = request.queryParams; Response response = new Response(); try { - response = client.api(request); + response = client.api(req); } catch (IOException ex) { throw ex; } diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java new file mode 100644 index 00000000..d6c13868 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -0,0 +1,240 @@ +package com.sendgrid; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +import java.io.*; +import java.util.*; + +@JsonInclude(Include.NON_DEFAULT) +public class Mail { + @JsonProperty("from") private Email from; + @JsonProperty("subject") private String subject; + @JsonProperty("personalization") private List personalization; + @JsonProperty("content") private List content; + @JsonProperty("attachments") private List attachments; + @JsonProperty("template_id") private String templateId; + @JsonProperty("sections") private Map sections; + @JsonProperty("headers") private Map headers; + @JsonProperty("categories") private List categories; + @JsonProperty("custom_args") private Map customArgs; + @JsonProperty("send_at") private long sendAt; + @JsonProperty("batch_id") private String batchId; + @JsonProperty("asm") private ASM asm; + @JsonProperty("ip_pool_id") private int ipPoolId; + @JsonProperty("mail_settings") private MailSettings mailSettings; + @JsonProperty("tracking_settings") private TrackingSettings trackingSettings; + @JsonProperty("reply_to") private Email replyTo; + + public void setFrom(Email from) { + this.from = from; + } + + @JsonProperty("from") + public Email getFrom(Email from) { + return from; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + @JsonProperty("subject") + public String getSubject() { + return subject; + } + + public void setASM(ASM asm){ + this.asm = asm; + } + + @JsonProperty("asm") + public ASM getASM() { + return asm; + } + + @JsonProperty("personalization") + public List getPersonalization(){ + return personalization; + } + + public void addPersonalization(Personalization personalization){ + if(this.personalization == null){ + this.personalization = new ArrayList(); + this.personalization.add(personalization); + } else { + this.personalization.add(personalization); + } + } + + @JsonProperty("content") + public List getContent(){ + return content; + } + + public void addContent(Content content){ + Content c = new Content(); + c.setType(content.getType()); + c.setValue(content.getValue()); + if(this.content == null){ + this.content = new ArrayList(); + this.content.add(c); + } else { + this.content.add(c); + } + } + + @JsonProperty("attachments") + public List getAttachments(){ + return attachments; + } + + public void addAttachments(Attachments attachments){ + Attachments a = new Attachments(); + a.setContent(attachments.getContent()); + a.setType(attachments.getType()); + a.setFilename(attachments.getFilename()); + a.setDisposition(attachments.getDisposition()); + a.setContentId(attachments.getContentId()); + if(this.attachments == null){ + this.attachments = new ArrayList(); + this.attachments.add(a); + } else { + this.attachments.add(a); + } + } + + public void setTemplateId(String templateId) { + this.templateId = templateId; + } + + @JsonProperty("template_id") + public String getTemplateId() { + return this.templateId; + } + + public void addSection(String key, String value) { + if(sections == null){ + sections = new HashMap(); + sections.put(key, value); + } else { + sections.put(key, value); + } + } + + @JsonProperty("sections") + public Map getSections() { + return sections; + } + + public void addHeader(String key, String value) { + if(headers == null){ + headers = new HashMap(); + headers.put(key, value); + } else { + headers.put(key, value); + } + } + + @JsonProperty("headers") + public Map getHeaders() { + return headers; + } + + public void addCategory(String category) { + if(categories == null){ + categories = new ArrayList(); + categories.add(category); + } else { + categories.add(category); + } + } + + @JsonProperty("categories") + public List getCategories() { + return categories; + } + + public void addCustomArg(String key, String value) { + if(customArgs == null){ + customArgs = new HashMap(); + customArgs.put(key, value); + } else { + customArgs.put(key, value); + } + } + + @JsonProperty("custom_args") + public Map getCustomArgs() { + return customArgs; + } + + public void setSendAt(long sendAt) { + this.sendAt = sendAt; + } + + @JsonProperty("send_at") + public long sendAt() { + return sendAt; + } + + public void setBatchId(String batchId) { + this.batchId = batchId; + } + + @JsonProperty("batch_id") + public String getBatchId() { + return batchId; + } + + public void setIpPoolId(int ipPoolId) { + this.ipPoolId = ipPoolId; + } + + @JsonProperty("ip_pool_id") + public int getIpPoolId() { + return ipPoolId; + } + + public void setMailSettings(MailSettings mailSettings) { + this.mailSettings = mailSettings; + } + + @JsonProperty("mail_settings") + public MailSettings getMailSettings() { + return mailSettings; + } + + public void setTrackingSettings(TrackingSettings trackingSettings) { + this.trackingSettings = trackingSettings; + } + + @JsonProperty("tracking_settings") + public TrackingSettings getTrackingSettings() { + return trackingSettings; + } + + public void setReplyTo(Email replyTo) { + this.replyTo = replyTo; + } + + @JsonProperty("reply_to") + public Email getReplyto() { + return replyTo; + } + + public String build() throws IOException { + try { + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(this); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java new file mode 100644 index 00000000..4a70f7fd --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java @@ -0,0 +1,18 @@ +package com.sendgrid; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_DEFAULT) +public class ASM { + public int group_id; + public int[] groups_to_display; + + public void setGroupID(int group_id) { + this.group_id = group_id; + } + + public void setGroupsToDisplay(int[] GroupsToDisplay) { + this.groups_to_display = Arrays.copyOf(GroupsToDisplay, GroupsToDisplay.length); + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java new file mode 100644 index 00000000..40a63115 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -0,0 +1,58 @@ +package com.sendgrid; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class Attachments { + @JsonProperty("content") private String content; + @JsonProperty("type") private String type; + @JsonProperty("filename") private String filename; + @JsonProperty("disposition") private String disposition; + @JsonProperty("content_id") private String contentId; + + public void setContent(String content) { + this.content = content; + } + + @JsonProperty("content") + public String getContent() { + return content; + } + + public void setType(String type) { + this.type = type; + } + + @JsonProperty("type") + public String getType() { + return type; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + @JsonProperty("filename") + public String getFilename() { + return filename; + } + + public void setDisposition(String disposition) { + this.disposition = disposition; + } + + @JsonProperty("disposition") + public String getDisposition() { + return disposition; + } + + public void setContentId(String contentId) { + this.contentId = contentId; + } + + @JsonProperty("content_id") + public String getContentId() { + return contentId; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java new file mode 100644 index 00000000..06571238 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -0,0 +1,29 @@ +package com.sendgrid; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class BccSettings { + @JsonProperty("enable") private boolean enable; + @JsonProperty("email") private Email email; + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setEmail(Email email) { + this.email = email; + } + + @JsonProperty("email") + public Email getEmail() { + return this.email; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java new file mode 100644 index 00000000..e14094b7 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -0,0 +1,29 @@ +package com.sendgrid; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class ClickTrackingSetting { + @JsonProperty("enable") private boolean enable; + @JsonProperty("enable_text") private boolean enableText; + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setEnableText(boolean enableText) { + this.enableText = enableText; + } + + @JsonProperty("enable_text") + public boolean getEnableText() { + return enableText; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java new file mode 100644 index 00000000..2bf319f3 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -0,0 +1,29 @@ +package com.sendgrid; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class Content { + @JsonProperty("type") private String type; + @JsonProperty("value") private String value; + + public void setType(String type) { + this.type = type; + } + + @JsonProperty("type") + public String getType() { + return type; + } + + public void setValue(String value) { + this.value = value; + } + + @JsonProperty("value") + public String getValue() { + return value; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java new file mode 100644 index 00000000..bd5564f8 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -0,0 +1,29 @@ +package com.sendgrid; +import java.util.*; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class Email { + @JsonProperty("name") private String name; + @JsonProperty("email") private String email; + + public void setName(String name) { + this.name = name; + } + + @JsonProperty("name") + public String getName() { + return name; + } + + public void setEmail(String email) { + this.email = email; + } + + @JsonProperty("email") + public String getEmail() { + return email; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java new file mode 100644 index 00000000..a0c8888c --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -0,0 +1,38 @@ +package com.sendgrid; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class FooterSetting { + @JsonProperty("enable") private boolean enable; + @JsonProperty("text") private String text; + @JsonProperty("html") private String html; + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setText(String text) { + this.text = text; + } + + @JsonProperty("text") + public String getText() { + return text; + } + + public void setHtml(String html) { + this.html = html; + } + + @JsonProperty("html") + public String getHtml() { + return html; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java new file mode 100644 index 00000000..aca53953 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -0,0 +1,70 @@ +package com.sendgrid; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class GoogleAnalyticsSetting { + + @JsonProperty("enable") private boolean enable; + @JsonProperty("utm_source") private String campaignSource; + @JsonProperty("utm_term") private String campaignTerm; + @JsonProperty("utm_content") private String campaignContent; + @JsonProperty("utm_name") private String campaignName; + @JsonProperty("utm_medium") private String campaignMedium; + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setCampaignSource(String campaignSource) { + this.campaignSource = campaignSource; + } + + @JsonProperty("utm_source") + public String getCampaignSource() { + return campaignSource; + } + + public void setCampaignTerm(String campaignTerm) { + this.campaignTerm = campaignTerm; + } + + @JsonProperty("utm_term") + public String getCampaignTerm() { + return campaignTerm; + } + + public void setCampaignContent(String campaignContent) { + this.campaignContent = campaignContent; + } + + @JsonProperty("utm_content") + public String getCampaignContent() { + return campaignContent; + } + + public void setCampaignName(String campaignName) { + this.campaignName = campaignName; + } + + @JsonProperty("utm_name") + public String getCampaignName() { + return campaignName; + } + + public void setCampaignMedium(String campaignMedium) { + this.campaignMedium = campaignMedium; + } + + @JsonProperty("utm_medium") + public String getCampaignMedium() { + return campaignMedium; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java new file mode 100644 index 00000000..fd468f5b --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -0,0 +1,59 @@ +package com.sendgrid; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class MailSettings { + @JsonProperty("bcc") private BccSettings bccSettings; + @JsonProperty("bypass_list_management") private Setting bypassListManagement; + @JsonProperty("footer") private FooterSetting footerSetting; + @JsonProperty("sandbox_mode") private Setting sandBoxMode; + @JsonProperty("spam_check") private SpamCheckSetting spamCheckSetting; + + public void setBccSettings(BccSettings bccSettings) { + this.bccSettings = bccSettings; + } + + @JsonProperty("bcc") + public BccSettings getBccSettings() { + return bccSettings; + } + + public void setBypassListManagement(Setting bypassListManagement) { + this.bypassListManagement = bypassListManagement; + } + + @JsonProperty("bypass_list_management") + public Setting getBypassListManagement() { + return bypassListManagement; + } + + public void setFooterSetting(FooterSetting footerSetting) { + this.footerSetting = footerSetting; + } + + @JsonProperty("footer") + public FooterSetting getFooterSetting() { + return footerSetting; + } + + public void setSandboxMode(Setting sandBoxMode) { + this.sandBoxMode = sandBoxMode; + } + + @JsonProperty("sandbox_mode") + public Setting getSandBoxMode() { + return sandBoxMode; + } + + public void setSpamCheckSetting(SpamCheckSetting spamCheckSetting) { + this.spamCheckSetting = spamCheckSetting; + } + + @JsonProperty("spam_check") + public SpamCheckSetting getSpamCheck() { + return spamCheckSetting; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java new file mode 100644 index 00000000..d6d2ad18 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -0,0 +1,29 @@ +package com.sendgrid; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class OpenTrackingSetting { + @JsonProperty("enable") private boolean enable; + @JsonProperty("substitution_tag") private String substitutionTag; + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setSubstitutionTag(String substitutionTag) { + this.substitutionTag = substitutionTag; + } + + @JsonProperty("substitution_tag") + public String getSubstitutionTag() { + return substitutionTag; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java new file mode 100644 index 00000000..c1d579f6 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -0,0 +1,143 @@ +package com.sendgrid; +import java.util.*; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class Personalization { + @JsonProperty("to") private List to; + @JsonProperty("cc") private List cc; + @JsonProperty("bcc") private List bcc; + @JsonProperty("subject") private String subject; + @JsonProperty("headers") private Map headers; + @JsonProperty("substitutions") private Map substitutions; + @JsonProperty("custom_args") private Map customArgs; + @JsonProperty("categories") private List categories; + @JsonProperty("send_at") private long sendAt; + + public void addTo(Email email) { + Email e = new Email(); + e.setName(email.getName()); + e.setEmail(email.getEmail()); + if(to == null){ + to = new ArrayList(); + to.add(e); + } else { + to.add(e); + } + } + + @JsonProperty("to") + public List getTo() { + return to; + } + + public void addCc(Email email) { + Email e = new Email(); + e.setName(email.getName()); + e.setEmail(email.getEmail()); + if(cc == null){ + cc = new ArrayList(); + cc.add(e); + } else { + cc.add(e); + } + } + + @JsonProperty("cc") + public List getCc() { + return cc; + } + + public void addBcc(Email email) { + Email e = new Email(); + e.setName(email.getName()); + e.setEmail(email.getEmail()); + if(bcc == null){ + bcc = new ArrayList(); + bcc.add(e); + } else { + bcc.add(e); + } + } + + @JsonProperty("bcc") + public List getBcc() { + return bcc; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + @JsonProperty("subject") + public String getSubject() { + return subject; + } + + public void addHeader(String key, String value) { + if(headers == null){ + headers = new HashMap(); + headers.put(key, value); + } else { + headers.put(key, value); + } + } + + @JsonProperty("headers") + public Map getHeaders() { + return headers; + } + + public void addSubstitution(String key, String value) { + if(substitutions == null){ + substitutions = new HashMap(); + substitutions.put(key, value); + } else { + substitutions.put(key, value); + } + } + + @JsonProperty("substitutions") + public Map getSubstitutions() { + return substitutions; + } + + public void addCustomArg(String key, String value) { + if(customArgs == null){ + customArgs = new HashMap(); + customArgs.put(key, value); + } else { + customArgs.put(key, value); + } + } + + @JsonProperty("custom_args") + public Map getCustomArgs() { + return customArgs; + } + + public void addCategory(String category) { + if(categories == null){ + categories = new ArrayList(); + categories.add(category); + } else { + categories.add(category); + } + } + + @JsonProperty("categories") + public List getCategories() { + return categories; + } + + public void setSendAt(long sendAt) { + this.sendAt = sendAt; + } + + @JsonProperty("send_at") + public long sendAt() { + return sendAt; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java new file mode 100644 index 00000000..7ab141ee --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -0,0 +1,19 @@ +package com.sendgrid; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class Setting { + @JsonProperty("enable") private boolean enable; + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java new file mode 100644 index 00000000..7e1275a7 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -0,0 +1,38 @@ +package com.sendgrid; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class SpamCheckSetting { + @JsonProperty("enable") private boolean enable; + @JsonProperty("threshold") private int spamThreshold; + @JsonProperty("post_to_url") private String postToUrl; + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setSpamThreshold(int spamThreshold) { + this.spamThreshold = spamThreshold; + } + + @JsonProperty("threshold") + public int getSpamThreshold() { + return spamThreshold; + } + + public void setPostToUrl(String postToUrl) { + this.postToUrl = postToUrl; + } + + @JsonProperty("post_to_url") + public String getPostToUrl() { + return postToUrl; + } +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java new file mode 100644 index 00000000..6885699f --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -0,0 +1,50 @@ +package com.sendgrid; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class SubscriptionTrackingSetting { + @JsonProperty("enable") private boolean enable; + @JsonProperty("text") private String text; + @JsonProperty("html") private String html; + @JsonProperty("substitution_tag") private String substitutionTag; + + public void setEnable(boolean enable) { + this.enable = enable; + } + + @JsonProperty("enable") + public boolean getEnable() { + return enable; + } + + public void setText(String text) { + this.text = text; + } + + @JsonProperty("text") + public String getText() { + return text; + } + + public void setHtml(String html) { + this.html = html; + } + + @JsonProperty("html") + public String getHtml() { + return html; + } + + public void setSubstitutionTag(String substitutionTag) { + this.substitutionTag = substitutionTag; + } + + @JsonProperty("substitution_tag") + public String getSubstitutionTag() { + return substitutionTag; + } + +} \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java new file mode 100644 index 00000000..631eb4ce --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java @@ -0,0 +1,49 @@ +package com.sendgrid; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(Include.NON_DEFAULT) +public class TrackingSettings { + @JsonProperty("click_tracking") private ClickTrackingSetting clickTrackingSetting; + @JsonProperty("open_tracking") private OpenTrackingSetting openTrackingSetting; + @JsonProperty("subscription_tracking") private SubscriptionTrackingSetting subscriptionTrackingSetting; + @JsonProperty("ganalytics") private GoogleAnalyticsSetting googleAnalyticsSetting; + + public void setClickTrackingSetting(ClickTrackingSetting clickTrackingSetting) { + this.clickTrackingSetting = clickTrackingSetting; + } + + @JsonProperty("click_tracking") + public ClickTrackingSetting getClickTrackingSetting() { + return clickTrackingSetting; + } + + public void setOpenTrackingSetting(OpenTrackingSetting openTrackingSetting) { + this.openTrackingSetting = openTrackingSetting; + } + + @JsonProperty("open_tracking") + public OpenTrackingSetting getOpenTrackingSetting() { + return openTrackingSetting; + } + + public void setSubscriptionTrackingSetting(SubscriptionTrackingSetting subscriptionTrackingSetting) { + this.subscriptionTrackingSetting = subscriptionTrackingSetting; + } + + @JsonProperty("subscription_tracking") + public SubscriptionTrackingSetting getSubscriptionTrackingSetting() { + return subscriptionTrackingSetting; + } + + public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSetting) { + this.googleAnalyticsSetting = googleAnalyticsSetting; + } + + @JsonProperty("ganalytics") + public GoogleAnalyticsSetting getGoogleAnalyticsSetting() { + return googleAnalyticsSetting; + } +} \ No newline at end of file diff --git a/src/test/java/com/sendgrid/MailTest.java b/src/test/java/com/sendgrid/MailTest.java new file mode 100644 index 00000000..e69de29b diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index d2e443d3..abf3b55f 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -7,13 +7,10 @@ import java.util.HashMap; import java.util.Map; -import org.skyscreamer.jsonassert.JSONAssert; - -import org.json.JSONObject; +import org.junit.Assert; +import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.*; - public class SendGridTest { private final String SENDGRID_API_KEY = ""; @@ -21,7 +18,7 @@ public class SendGridTest { @Test public void testVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - assertEquals(sg.getVersion(), "3.0.0"); + Assert.assertEquals(sg.getVersion(), "3.0.0"); } @Test @@ -40,7 +37,7 @@ public void testBuildGradleVersion() { line = br.readLine(); } br.close(); - fail("build.gradle version does not match"); + Assert.assertTrue("build.gradle version does not match", false); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { From 989ed6f829ab801823a6df1e94cfa682825b35ee Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 21 Apr 2016 13:10:22 -0700 Subject: [PATCH 007/439] Ready for v3beta branch launch --- .github/ISSUE_TEMPLATE | 17 + .travis.yml | 3 +- CHANGELOG.md | 6 + CONTRIBUTING.md | 200 ++++++++ README.md | 386 +++----------- USAGE.md | 30 ++ build.gradle | 8 +- examples/Example.java | 83 +-- examples/Mail/Example.java | 126 ++++- maven-help.png | Bin 27711 -> 0 bytes pom.xml | 41 +- publishing.md | 52 -- src/main/java/com/sendgrid/SendGrid.java | 143 +++--- src/main/java/com/sendgrid/helpers/README.md | 24 + .../java/com/sendgrid/helpers/mail/Mail.java | 476 +++++++++--------- .../sendgrid/helpers/mail/objects/ASM.java | 35 +- .../helpers/mail/objects/Attachments.java | 103 ++-- .../helpers/mail/objects/BccSettings.java | 40 +- .../mail/objects/ClickTrackingSetting.java | 40 +- .../helpers/mail/objects/Content.java | 32 +- .../sendgrid/helpers/mail/objects/Email.java | 42 +- .../helpers/mail/objects/FooterSetting.java | 59 +-- .../mail/objects/GoogleAnalyticsSetting.java | 117 +++-- .../helpers/mail/objects/MailSettings.java | 98 ++-- .../mail/objects/OpenTrackingSetting.java | 40 +- .../helpers/mail/objects/Personalization.java | 256 +++++----- .../helpers/mail/objects/Setting.java | 20 +- .../mail/objects/SpamCheckSetting.java | 61 +-- .../objects/SubscriptionTrackingSetting.java | 77 ++- .../mail/objects/TrackingSettings.java | 80 +-- src/test/java/com/sendgrid/MailTest.java | 0 src/test/java/com/sendgrid/MockSendGrid.java | 26 + src/test/java/com/sendgrid/SendGridTest.java | 158 ++++-- .../java/com/sendgrid/helpers/MailTest.java | 221 ++++++++ src/test/resources/image.png | Bin 16731 -> 0 bytes src/test/resources/test.txt | 1 - 36 files changed, 1769 insertions(+), 1332 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE create mode 100644 CONTRIBUTING.md create mode 100644 USAGE.md delete mode 100644 maven-help.png delete mode 100644 publishing.md delete mode 100644 src/test/java/com/sendgrid/MailTest.java create mode 100644 src/test/java/com/sendgrid/MockSendGrid.java create mode 100644 src/test/java/com/sendgrid/helpers/MailTest.java delete mode 100644 src/test/resources/image.png delete mode 100644 src/test/resources/test.txt diff --git a/.github/ISSUE_TEMPLATE b/.github/ISSUE_TEMPLATE new file mode 100644 index 00000000..ee3ea5c2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE @@ -0,0 +1,17 @@ +#### Issue Summary + +A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. Please feel free to include screenshots, screencasts, code examples. + + +#### Steps to Reproduce + +1. This is the first step +2. This is the second step +3. Further steps, etc. + +Any other information you want to share that is relevant to the issue being reported. Especially, why do you consider this to be a bug? What do you expect to happen instead? + +#### Technical details: + +* sendgrid-java Version: master (latest commit: [commit number]) +* Java Version: X.X \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 30b2d3d4..881ccd72 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,6 @@ jdk: - oraclejdk8 - oraclejdk7 - openjdk7 -- openjdk6 after_script: - "./gradlew build" - "./scripts/s3upload.sh" @@ -21,6 +20,6 @@ notifications: template: - '%{repository} Build %{build_number} on branch %{branch} by %{author}: %{message} - View on GitHub' + View on GitHub' format: html notify: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 974bb5ef..ad24b539 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +## [3.0.0] - XXXX-XX-XX +### Added +- Breaking change to support the v3 Web API +- New HTTP client +- v3 Mail Send helper + ## [2.2.2] - 2015-5-23 ### Fixed - Subsitution orders being swapped via [#65](https://github.com/sendgrid/sendgrid-java/pull/65) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..f4735495 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,200 @@ +Hello! Thank you for choosing to help contribute to the sendgrid-python library. There are many ways you can contribute and help is always welcome. + +We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. + +* [Feature Request](#feature_request) +* [Submit a Bug Report](#submit_a_bug_report) +* [Improvements to the Codebase](#improvements_to_the_codebase) +* [Understanding the Code Base](#understanding_the_codebase) +* [Testing](#testing) +* [Style Guidelines & Naming Conventions](#style_guidelines_and_naming_conventions) +* [Creating a Pull Request](#creating_a_pull_request) + +There are a few ways to contribute, which we'll enumerate below: + + +## Feature Request + +If you'd like to make a feature request, please read this section. + +The GitHub issue tracker is the preferred channel for library feature requests, but please respect the following restrictions: + +- Please **search for existing issues** in order to ensure we don't have duplicate bugs/feature requests. +- Please be respectful and considerate of others when commenting on issues + + +## Submit a Bug Report + +Note: DO NOT include your credentials in ANY code examples, descriptions, or media you make public. + +A software bug is a demonstrable issue in the code base. In order for us to diagnose the issue and respond as quickly as possible, please add as much detail as possible into your bug report. + +Before you decide to create a new issue, please try the following: + +1. Check the Github issues tab if the identified issue has already been reported, if so, please add a +1 to the existing post. +2. Update to the latest version of this code and check if issue has already been fixed +3. Copy and fill in the Bug Report Template we have provided below + +### Please use our Bug Report Template + +In order to make the process easier, we've included a sample bug report template (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. + +``` +Short and descriptive example bug report title + +#### Issue Summary + +A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. Please feel free to include screenshots, screencasts, code examples. + + +#### Steps to Reproduce + +1. This is the first step +2. This is the second step +3. Further steps, etc. + +Any other information you want to share that is relevant to the issue being reported. Especially, why do you consider this to be a bug? What do you expect to happen instead? + +#### Technical details: + +* sendgrid-java Version: master (latest commit: 2cb34372ef0f31352f7c90015a45e1200cb849da) +* Java Version: 1.8 +``` + + +## Improvements to the Codebase + +We welcome direct contributions to the sendgrid-python code base. Thank you! + +### Development Environment ### + +#### Install and run locally #### + +### Creating a Helper ### + +##### Prerequisites ##### + +* Java 1.7 through 1.8 +* java-http-client + +##### Initial setup: ##### + +``` +git clone https://github.com/sendgrid/sendgrid-java.git +cd sendgrid-java +``` + +##### Execute: ##### + +See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/master/examples) to get started quickly. + +You will need to setup the following environment to use the SendGrid example: + +``` +echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env +echo "sendgrid.env" >> .gitignore +source ./sendgrid.env +node examples/example.js +``` + + +## Understanding the Code Base + +**/examples** + +Working examples that demonstrate usage. To run the example code + +```bash +cd examples +javac -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example.java && java -classpath ./jackson-annotations-2.7.0.jar:./jackson-databind-2.7.3.jar:./jackson-core-2.7.3.jar:../build/libs/sendgrid-3.0.0-jar.jar:. Example +``` + +**/tests** + +Tests for HTTP client. + +**/sendgrid** + +The interface to the SendGrid API. + + +## Testing + +All PRs require passing tests before the PR will be reviewed. + +All test files are in the `[tests](https://github.com/sendgrid/sendgrid-java/tree/master/tests)` directory. + +For the purposes of contributing to this repo, please update the [`test_v3_endpoints.py`](https://github.com/sendgrid/sendgrid-java/blob/master/test/test_v3_endpoints.py) file with unit tests as you modify the code. + +```java +./gradlew test -i +``` + + +## Style Guidelines & Naming Conventions + +Generally, we follow the style guidelines as suggested by the official language. However, we ask that you conform to the styles that already exist in the library. If you wish to deviate, please explain your reasoning. + +* []() + +Please run your code through + +### Directory Structure + +* `examples` for example calls +* `test`, for all tests + +## Creating a Pull Request + +1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, + and configure the remotes: + + ```bash + # Clone your fork of the repo into the current directory + git clone https://github.com/sendgrid/sendgrid-java + # Navigate to the newly cloned directory + cd sendgrid-java + # Assign the original repo to a remote called "upstream" + git remote add upstream https://github.com/sendgrid/sendgrid-java + ``` + +2. If you cloned a while ago, get the latest changes from upstream: + + ```bash + git checkout + git pull upstream + ``` + +3. Create a new topic branch (off the main project development branch) to + contain your feature, change, or fix: + + ```bash + git checkout -b + ``` + +4. Commit your changes in logical chunks. Please adhere to these [git commit + message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) + or your code is unlikely be merged into the main project. Use Git's + [interactive rebase](https://help.github.com/articles/interactive-rebase) + feature to tidy up your commits before making them public. + +4a. Create tests. + +4b. Create or update the example code that demonstrates the functionality of this change to the code. + +5. Locally merge (or rebase) the upstream development branch into your topic branch: + + ```bash + git pull [--rebase] upstream master + ``` + +6. Push your topic branch up to your fork: + + ```bash + git push origin + ``` + +7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) + with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. + +If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. diff --git a/README.md b/README.md index e1729593..389a8030 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,8 @@ -# SendGrid-Java +[![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) [![BuildStatus](https://maven-badges.herokuapp.com/maven-central/com.sendgrid/sendgrid-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.sendgrid/sendgrid-java) -This Java module allows you to quickly and easily send emails through SendGrid using Java. +**This library allows you to quickly and easily use the SendGrid Web API via Java.** -[![BuildStatus](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) -[![BuildStatus](https://maven-badges.herokuapp.com/maven-central/com.sendgrid/sendgrid-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.sendgrid/sendgrid-java) - -### Warning - -Version ``2.x.x``, behaves differently in the ``addTo`` method. In the past this method defaulted to using the ``SMTPAPI`` header. Now you must explicitly call the ``addSmtpApiTo`` method. More on the ``SMTPAPI`` section. - -```java -// SendGridExample.java -import com.sendgrid.*; - -public class SendGridExample { - public static void main(String[] args) { - SendGrid sendgrid = new SendGrid('YOUR_SENDGRID_API_KEY'); - - SendGrid.Email email = new SendGrid.Email(); - email.addTo("example@example.com"); - email.setFrom("other@example.com"); - email.setSubject("Hello World"); - email.setText("My first email with SendGrid Java!"); - - try { - SendGrid.Response response = sendgrid.send(email); - System.out.println(response.getMessage()); - } - catch (SendGridException e) { - System.err.println(e); - } - } -} -``` -Compile and run this example with - -```bash -$ javac -classpath sendgrid-2.2.1-jar.jar:. SendGridExample.java && java -classpath sendgrid-2.2.1-jar.jar:. SendGridExample -``` - -## Installation +# Installation Choose your installation method - Maven w/ Gradle (recommended), Maven or Jar file. @@ -51,7 +14,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:2.2.1' + compile 'com.sendgrid:sendgrid-java:3.0.0' } repositories { @@ -82,315 +45,90 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies import com.sendgrid.*; ``` -## Usage - -To begin using this library, initialize the SendGrid object with your SendGrid API Key. To configure API keys, visit https://sendgrid.com/beta/settings/api_keys. - -```java -import com.sendgrid.SendGrid; -SendGrid sendgrid = new SendGrid('YOUR_SENDGRID_API_KEY'); -``` - -Add your message details. - -```java -Email email = new Email(); -email.addTo("example@example.com"); -email.addToName("Example Guy"); -email.setFrom("other@example.com"); -email.setSubject("Hello World"); -email.setText("My first email through SendGrid"); -``` - -Send it. - -```java -sendgrid.send(email); -``` - -### To - -#### addTo - -```java -email.addTo("foo@example.com"); -// or -email.addTo(new String[]{"foo@other.com", "bar@other.com"}); -// or -email.addTo("foo.bar@other.com", "Foo Bar"); -``` - -#### setTo - -```java -email.setTo(new String[]{"foo@other.com", "bar@other.com"}); -``` - -#### addToName - -```java -email.addToName("Foo"); -// or -email.addToName(new String[]{"Foo", "Bar"}); -``` - -#### setToName - -```java -email.setToName(new String[]{"Foo", "Bar"}); -``` - -#### addCc - -```java -email.addCc("foo@example.com"); -// or -email.addCc(new String[]{"foo@other.com", "bar@other.com"}); -``` - -#### setCc - -```java -email.setCc(new String[]{"foo@other.com", "bar@other.com"}); -``` - -#### addBcc - -```java -email.addBcc("foo@example.com"); -// or -email.addBcc(new String[]{"foo@other.com", "bar@other.com"}); -``` - -#### setBcc - -```java -email.setBcc(new String[]{"foo@other.com", "bar@other.com"}); -``` - -### From - -#### setFrom - -```java -email.setFrom("other@example.com"); -``` - -#### setFromName - -```java -email.setFromName("Other Dude"); -``` - -#### setReplyTo - -```java -email.setReplyTo("no-reply@nowhere.com"); -``` - -#### setSubject - -```java -email.setSubject("Hello World"); -``` - -#### setText +## Dependencies +) +- [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) -```java -email.setText("This is some text of the email."); -``` - -#### setHtml - -```java -email.setHtml("