SendGrid provides an HTTP GET method that allows retrieving all of global email statistics between a start and end date.
SendGrid has a parent-child account relationship, in most of the cases, parents can see most of the static and reports of child account, same for Global Email Statistics, parents account can see combined stats for their account and all of its sub-user accounts, but Subuser accounts can see their own stats only.
package org.wesome.sendgrid;
import com.sendgrid.SendGrid;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class SendGridApplication {
@Value("${send.grid.api.key}")
private String sendGridApiKey;
public static void main(String[] args) {
SpringApplication.run(SendGridApplication.class, args);
}
@Bean
public SendGrid sendGrid() {
SendGrid sendGrid = new SendGrid(sendGridApiKey);
return sendGrid;
}
}
package org.wesome.sendgrid.controller;
import com.sendgrid.Method;
import com.sendgrid.Request;
import com.sendgrid.Response;
import com.sendgrid.SendGrid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.time.LocalDate;
@RestController
public class SendGridController {
@Autowired
private SendGrid sendGrid;
@GetMapping
public ResponseEntity sendGridAPI() throws IOException {
Request request = new Request();
Response response;
try {
LocalDate end_date = LocalDate.now();
LocalDate start_date = end_date.minusDays(30);
request.setMethod(Method.GET);
request.setEndpoint("stats");
request.addQueryParam("aggregated_by", "day");
request.addQueryParam("limit", "1");
request.addQueryParam("start_date", String.valueOf(start_date));
request.addQueryParam("end_date", String.valueOf(end_date));
request.addQueryParam("offset", "1");
response = sendGrid.api(request);
System.out.println("Headers := \n" + response.getHeaders());
System.out.println("Body := \n" + response.getBody());
System.out.println("StatusCode := \n" + response.getStatusCode());
} catch (IOException ex) {
throw ex;
}
return new ResponseEntity(HttpStatus.valueOf(response.getStatusCode()).getReasonPhrase(), HttpStatus.valueOf(response.getStatusCode()));
}
}
plugins {
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'org.springframework.boot' version '2.5.5'
id 'java'
}
group = 'org.wesome'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation 'com.sendgrid:sendgrid-java:4.4.5'
implementation('org.springframework.boot:spring-boot-starter-web')
}
test {
useJUnitPlatform()
}
send.grid.api.key=Your SendGrid Api Key
curl --location --request GET 'localhost:8080/'