Spring Boot integrates with SendGrid to send mail.
below is the minimum code needed to send an email with the SendGrid.
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;
@RestController
public class SendGridController {
@Autowired
private SendGrid sendGrid;
@GetMapping("/send")
public ResponseEntity sendMail() throws IOException {
Request request = new Request();
request.setBody("{\"personalizations\":[{\"to\":[{\"email\":\"[email protected]\"}],\"subject\":\"WeSome.Org\"}],\"from\":{\"email\":\"[email protected]\"},\"content\":[{\"type\":\"text/plain\",\"value\": \"I am learning SendGrid from WeSome.Org because its fun\"}]}");
Response response;
try {
request.setMethod(Method.POST);
request.setEndpoint("mail/send");
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 'commons-logging:commons-logging:1.2'
implementation('org.springframework.boot:spring-boot-starter-web')
}
test {
useJUnitPlatform()
}
send.grid.api.key=Your SendGrid Api Key
curl --location --request GET 'localhost:8080/send/'
SendGrid V3 API internally calls https://api.sendgrid.com/v3/mail/send
Creating the Mail body in JSON format is error-prone, to avoid this use SendGrid provides Mail class which internally creates a personalization object.
Below is the minimum code needed to send an email with the SendGrid Mail Helper Class.
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 com.sendgrid.helpers.mail.Mail;
import com.sendgrid.helpers.mail.objects.Content;
import com.sendgrid.helpers.mail.objects.Email;
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;
@RestController
public class SendGridController {
@Autowired
private SendGrid sendGrid;
@GetMapping("/send")
public ResponseEntity sendMail() throws IOException {
Email from = new Email("[email protected]");
String subject = "WeSome.Org";
Email to = new Email("[email protected]");
Content content = new Content("text/plain", "I am learning SendGrid from WeSome.Org");
Mail mail = new Mail(from, subject, to, content);
Request request = new Request();
Response response;
try {
request.setMethod(Method.POST);
request.setEndpoint("mail/send");
request.setBody(mail.build());
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 'commons-logging:commons-logging:1.2'
implementation('org.springframework.boot:spring-boot-starter-web')
}
test {
useJUnitPlatform()
}
send.grid.api.key=Your SendGrid Api Key
curl --location --request GET 'localhost:8080/send/'