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();
    }
}

+ Recent posts