1. userapi 하위 모듈 생성
2. 'SendMailForm' 클래스
- 이메일 전송 요청에 필요한 데이터를 모델링
package com.example.userapi.client.mailgun;
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Builder
@Data
public class SendMailForm {
private String from;
private String to;
private String subject;
private String text;
}
3. 'MailClient' 인터페이스
package com.example.userapi.client;
import com.example.userapi.client.mailgun.SendMailForm;
import feign.Response;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.PostMapping;
@FeignClient(name="mailgun",url="https://api.mailgun.net/v3/")
@Qualifier("mailgun")
public interface MailgunClient {
@PostMapping("(메일건 API 키).mailgun.org/messages")
Response sendEmail(@SpringQueryMap SendMailForm form);
}
- Mailgun의 이메일 전송 API를 호출하기 위한 Feign 클라이언트 정의
- Feign: 선언적 웹 서비스 클라이언트, HTTP 요청을 손쉽게 보낼 수 있게 해줌
- @FeignClient(name="mailgun", url="https://api.mailgun.net/v3/"): 이 클라이언트의 이름을 "mailgun"으로 지정하고, Mailgun API의 기본 URL을 설정
- @Qualifier("mailgun"): 이 클라이언트의 빈(bean)에 "mailgun"이라는 구체적인 식별자를 부여
- sendEmail 메소드: @PostMapping 어노테이션을 사용하여 Mailgun의 이메일 전송 API 엔드포인트를 지정. SendMailForm 객체를 받아 Mailgun API에 전송하고, Response 객체로 결과를 반환.
4. Mailgun basic code (참고)
import java.io.File;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
public class MGSample {
// ...
public static JsonNode sendSimpleMessage() throws UnirestException {
HttpResponse<JsonNode> request = Unirest.post("https://api.mailgun.net/v3/" + YOUR_DOMAIN_NAME + "/messages"),
.basicAuth("api", API_KEY)
.queryString("from", "Excited User <USER@YOURDOMAIN.COM>")
.queryString("to", "artemis@example.com")
.queryString("subject", "hello")
.queryString("text", "testing")
.asJson();
return request.getBody();
}
}
* 이 구성을 통해, Spring 애플리케이션은 MailgunClient 인터페이스를 사용하여 Mailgun API에 이메일 전송 요청을 할 수 있으며, SendMailForm 객체를 사용하여 필요한 요청 데이터를 쉽게 전달할 수 있습니다.
5. 'EmailSendService' 클래스
package com.example.userapi.client.service;
import com.example.userapi.client.MailgunClient;
import com.example.userapi.client.mailgun.SendMailForm;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class EmailSendService {
private final MailgunClient mailgunClient;
public void sendEmail() {
SendMailForm form = SendMailForm.builder()
.from("zerobase-test.my.com")
.to("zerobase-test.my.com")
.subject("Test email from zero base")
.text("my text")
.build();
mailgunClient.sendEmail(form);
}
}
6. sendEmail 테스트
package com.example.userapi.client.service;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class EmailSendServiceTest {
@Autowired
private EmailSendService emailSendService;
@Test
public void EmailTest(){
emailSendService.sendEmail();
}
}