Spring boot "spring-boot-starter-mail"을 통해 전자 메일 보내기
Spring boot를 사용하여 이메일을 보내려고 하는데 다음과 같은 메시지가 표시됩니다.
java.lang.UnsupportedOperationException: Method not yet implemented
at javax.mail.internet.MimeMessage.<init>(MimeMessage.java:89)
at org.springframework.mail.javamail.SmartMimeMessage.<init>(SmartMimeMessage.java:52)
at org.springframework.mail.javamail.JavaMailSenderImpl.createMimeMessage(JavaMailSenderImpl.java:325)
이 메이븐 항목을 사용했습니다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.6.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
application.properties:
spring.mail.host=smtp.gmail.com
spring.mail.port= 25
spring.mail.username= test
spring.mail.password= test
내 코드:
@Autowired
private JavaMailSender javaMailSender;
private void send() {
MimeMessage mail = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mail, true);
helper.setTo("mymail@mail.co.uk");
helper.setReplyTo("someone@localhost");
helper.setFrom("someone@localhost");
helper.setSubject("Lorem ipsum");
helper.setText("Lorem ipsum dolor sit amet [...]");
} catch (MessagingException e) {
e.printStackTrace();
} finally {}
javaMailSender.send(mail);
//return helper;
}
이것은 직선적인 것처럼 보이지만 내가 놓치고 있는 것은 무엇입니까!
제가 추천하는 것은 it.ozimov: spring-boot-email-core 라이브러리를 사용하는 것입니다. 이 라이브러리는 이 모든 구현을 다음과 같은 단일 구성 요소 뒤에 숨깁니다.EmailService
음, 저도 도서관을 개발하고 있어요 :).
예를 들어 다음과 같습니다.
@Autowired
public EmailService emailService;
public void sendEmail(){
final Email email = DefaultEmail.builder()
.from(new InternetAddress("mymail@mail.co.uk"))
.replyTo(new InternetAddress("someone@localhost"))
.to(Lists.newArrayList(new InternetAddress("someone@localhost")))
.subject("Lorem ipsum")
.body("Lorem ipsum dolor sit amet [...]")
.encoding(Charset.forName("UTF-8")).build();
emailService.send(email);
}
다음을 포함합니다.application.properties
:
spring.mail.host=your.smtp.com
spring.mail.port=587
spring.mail.username=test
spring.mail.password=test
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
또한 프리마커, 콧수염, 페블과 같은 일부 템플릿 엔진을 지원하지만 더 많은 템플릿 엔진을 사용하도록 확장할 수 있습니다.또한 전자 메일 예약 및 우선 순위 지정(예: 암호 복구의 경우 높은 우선 순위, 뉴스레터의 경우 낮은 우선 순위)도 지원합니다.
LinkedIn에서 사용 방법을 설명하는 기사가 있습니다.여기 있습니다.
의 두 번째 버전이 있습니다.javax.mail.internet.MimeMessage
경유로 끌어들인 것 외에 클래스 경로에서.spring-boot-starter-mail
일반적인 범인은 제로니모의 자바메일 스펙자입니다.어떤 병이든 응용프로그램의 종속성에서 제외해야 합니다.출처가 확실하지 않은 경우 응용프로그램 실행-verbose:class
말씀드리겠습니다.
사용 안 함javaMailSender.createMimeMessage();
을 사용해 보다MimeMessagePreparator
&MimeMessageHelper
대신
이것은 저에게 효과가 있었습니다.
private TemplateEngine templateEngine;
@Autowired
private JavaMailSender mailSender;
@Autowired
public MailContentBuilder mailContentBuilder;
public void sendEmail(Users user, VerificationToken verificationToken) throws Exception {
MimeMessagePreparator messagePreparator = mimeMessage -> {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
String name = user.getFirstname();
String vtoken = verificationToken.getVtoken();
String url = "http://3.16.214.183:8888/home/".concat(String.valueOf(user.getUserid())).concat("/").concat(vtoken);
String content = mailContentBuilder.build(name, url);
helper.setTo(user.getEmail());
helper.setSubject("AppName - Please Verify Your Email");
helper.setText(content, true);
};
try {
mailSender.send(messagePreparator);
} catch (MailException e) {
e.printStackTrace();
}
}
이러한 의존성만 필요한 것처럼 보였습니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
속성을 설정했습니다.
spring.mail.host=smtp.gmail.com
spring.mail.port=465
spring.mail.username=user.myapp@gmail.com
spring.mail.password=password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback=false
참고로, 선택한 포트는 임의가 아닙니다. 예를 들어 Gmail에는 465가 필요했습니다.또한 Gmail 계정이 제대로 작동하려면 전송 중인 Gmail 계정을 변경해야 합니다.저는 오래 전에 이것을 했지만, 저는 그 예외를 전에 본 적이 있다고 확신합니다.이 예에서 사용된 람다는 해당 문제를 해결하는 데 도움이 될 수 있지만 안타깝게도 기억이 나지 않습니다.명확한 설명이 필요하거나 제가 작업한 예제의 코드를 더 보고 싶으면 언제든지 연락하세요.
언급URL : https://stackoverflow.com/questions/33213060/sending-email-via-spring-boot-spring-boot-starter-mail
'programing' 카테고리의 다른 글
HATEOAS 메서드를 찾을 수 없습니다. (0) | 2023.06.28 |
---|---|
체크 제약 조건이 0.00보다 큰 DECTIVE 열에 값을 삽입하면 SQL 오류 1292 잘못된 DOUBLE 값이 표시됩니다. (0) | 2023.06.23 |
막대 그래프에서 Y축 수치를 백분율로 변경하려면 어떻게 해야 합니까? (0) | 2023.06.23 |
Oracle SQL Developer용 JDK 설치의 전체 경로 이름 (0) | 2023.06.23 |
SpringBootTest로 측면을 테스트하는 방법은 무엇입니까? (0) | 2023.06.23 |