ꡬκΈλ§ ν΄λ λμ€μ§ μλ μλ¬λ₯Ό ν΄κ²°νλ κ³Όμ μ μκ°νλ©°, μ λ°μνκ³ μ΄λ»κ² ν΄κ²°νλμ§ μκ°νλ κΈμ λλ€.
SMTP κΈ°λ₯μ λν΄ μ€λͺ νμ§ μμ΅λλ€.
μλ‘
μμ΄λΉμ€λΉμ νμκ°μ ν λ, νμμ΄ μ λ ₯ν μ΄λ©μΌμ΄ μ μ μ΄λ©μΌμΈμ§ νμΈνκ³ μ μΈμ¦λ²νΈλ₯Ό 보λ΄κ³ μ νμ΅λλ€.
κ·Έλμ, μλμ κ°μ μ½λλ‘ λ€μ΄λ² μλ²μ λ©μΌμ 보λμΌλ, `jakarta.mail.internet.addressexception: local address contains control or whitespace` μλ¬κ° javaMailSender.send(message) μμ λ°μνμμ΅λλ€.
public void sendVerificationEmail(String memberEmail) {
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(env.getProperty("spring.mail.username"));
message.setTo(memberEmail);
message.setSubject("Airdnb ν΄λ‘ νλ‘μ νΈμμ λ³΄λΈ μΈμ¦λ²νΈ μ
λλ€");
message.setText(createRandomUUID());
>>>> javaMailSender.send(message); <<<< μλ¬ λ°μ μμΉ
} catch (MailException e) {
}
}
ν΄κ²°κ³Όμ μκ°
1.μλ¬λ₯Ό μ§μνκ³ , ꡬκΈλ§μ ν΅ν΄ νκ³ μ νμ΅λλ€.
μλ¬λ₯Ό μ§μνμλ©΄, λ΄ λ‘컬 λ€νΈμν¬ μ£Όμμ control μ΄λ κ³΅λ°±μ΄ ν¬ν¨λμ΄ μλ€λλ° μλΏμ§ μμμ ꡬκΈλ§μ ν΄λ³΄μμ΅λλ€. ꡬκΈλ§μ νμΌλ μ μ΄λ° μ€λ₯κ° λ°μνκ³ , μ΄λ»κ² ν΄κ²°νλμ§ λμμλ κΈμ μ°Ύμ§ λͺ»ν΄μ StackTrace λ₯Ό κ±°μ¬λ¬ μ¬λΌκ°κ³ μ νμ΅λλ€.
2. StackTrace λ₯Ό νκ³ μ¬μ°μΌλ‘ λ€μ΄κ°κΈ°
StackTrace μ€, InternetAddress.java:1352 μ 보면, String μ for λ¬ΈμΌλ‘ λλ©΄μ char c κ° ν΄λΉ ifλ¬Έμ μ°ΈμΌ κ²½μ° ν΄λΉ μμΈκ° λ°μνλ κ²μ νμΈνμμ΅λλ€.
- InternetAddress.java:1352
if (c <= 040 || c == 0177)
throw new AddressException(
"Local address contains control or whitespace", addr);
if λ¬Έμ μλ―Έλ₯Ό ν΄μν΄λ³΄κ² μ΅λλ€. λ¨Όμ , 040 μ 0177 μ μ«μ νκΈ°λ²μ 8μ§λ²μ΄λ 10μ§λ²μΌλ‘ λ°κΎΈκ² μ΅λλ€.
8μ§λ² '040'μ 10μ§λ² '32'λ‘ μΉνλλ©°, 8μ§λ² '0177'μ 10μ§λ² '127'λ‘ μΉνλ©λλ€. κ·Έλ¦¬κ³ , 10μ§λ²μ ASCII λ¬Έμμ λμλ©λλ€.
μ¦, char c κ° ASCII λ¬Έμλ‘ 32 λ³΄λ€ μκ±°λ 127 κ³Ό κ°λ€λ©΄ μλ¬κ° λ°μνκ² λ©λλ€.
ASCII λ¬Έμ μμ 32λ³΄λ€ μκ³ , 127μΈ λ¬Έμλ₯Ό 곡백문μ λ° μ μ΄λ¬ΈμλΌ ν©λλ€.
κ·Έλ λ€λ©΄, μ΄λ€ String μμ 곡백문μμ μ μ΄λ¬Έμκ° μλμ§ νμΈνκΈ° μν΄ String μ μ΄λμ λ°λμ§ StackTrace λ₯Ό λ€μ μΆμ νμμ΅λλ€.
κ·Έ κ²°κ³Όλ‘ JavaMailSenderImpl.java:314 μμ String μ SimpleMailMessage μμ λμ€λ κ²μ νμΈνμμ΅λ€.
- JavaMailSenderImpl.java:314
@Override
public void send(SimpleMailMessage... simpleMessages) throws MailException {
List<MimeMessage> mimeMessages = new ArrayList<>(simpleMessages.length);
for (SimpleMailMessage simpleMessage : simpleMessages) {
MimeMailMessage message = new MimeMailMessage(createMimeMessage());
>>> 314λΌμΈ simpleMessage.copyTo(message); <<<
mimeMessages.add(message.getMimeMessage());
}
doSend(mimeMessages.toArray(new MimeMessage[0]), simpleMessages);
}
λλ²κΉ μΌλ‘ SimpleMailMessage μ μ΄λ€ κ°λ€μ΄ λ€μ΄κ°λλ₯Ό νμΈνμκ³ , ν΄λΌμ΄μΈνΈκ° μμ²νλ λ°μ΄ν°μ 곡백 λ¬ΈμμΈ '\r\n' κ° μλ κ²μ νμΈνμμ΅λλ€.
μ¦, 컨νΈλ‘€λ¬μμ λ°μ μμ² JSONμ΄ νμ±λμ§ μκ³ , λ¬Έμ κ·Έλλ‘μΈ String μΌλ‘ Service κΉμ§ λμ΄κ° κ²μ΄ μμΈμ΄μκ³ , 컨νΈλ‘€λ¬μμλ { "email": "gromit1234@naver.com" } μΈ JSONμ @RequestBody String email μΌλ‘ λ°κ³ μμμ΅λλ€.
λ¨μνκ² @RequestBody μ¬μ©νλ©΄, JSONμ΄ νμ±λμ΄ μνλ κ°λ§ λμ¬ κ²μ΄λΌ μκ°νλ μ§μμ μ€λ₯κ° μμΈμ΄μμ΅λλ€...
μ΄ μ§μμ μ€λ₯λ₯Ό κΉμνλμ μ€νλ§ λ©μμ§ μ»¨λ²ν° κ°μλ‘ λ°λ‘ μ‘μμ΅λλ€π
@ResponseBody λ @RequestBody κ° μμ μ, μ€νλ§ λΆνΈλ ν΄λμ€ νμ
κ³Ό λ―Έλμ΄ νμ
(ν€λμ Content-Type || Accept)μ boolean λ°©μμΌλ‘ 체ν¬ν΄μ μ΄λ€ λ©μμ§ μ»¨λ²ν°λ₯Ό μ¬μ©ν κ²μΈμ§ κ²°μ νλ€κ³ ν©λλ€.
0 = ByteArrayHttpMessageConvertor (λ°μ΄νΈ μ²λ¦¬)
1 = StringHttpMessageConvertor (λ¬Έμ μ²λ¦¬)
2 = MappingJackson2HttpMessageConvertor (κ°μ²΄/JSON μ²λ¦¬)
3= Jaxb2RootElementHttpMessageConverter (XML μ²λ¦¬)
...(μ€λ΅)
λ¬Έμλ₯Ό μ²λ¦¬νλ StringHttpMessageConvertor μ ν΄λμ€ νμ μ String , λ―Έλμ΄ νμ μ */* μ΄κΈ° λλ¬Έμ @RequestBody String email μ κ²½μ°, MappingJackson2HttpMessageConvertor λμ μ StringHttpMessageConvertor κ° μ νλμ΄ JSON μ΄ νμ±λμ§ μλ κ²μ΄μμ΅λλ€.
κ·Έλμ EmailVertificationDto ν΄λμ€λ₯Ό λ§λ€κ³ , @RequestBody μ ν΄λμ€νμ μ Object λ‘ λ§λ€μ΄μ€μΌλ‘μ¨ μ§μμ μ€λ₯λ₯Ό μ‘κ³ ν΄κ²°νκ² λμμ΅λλ€.
λ§μΉλ©°
μ½λμ€μΏΌλλ₯Ό λ€λλ©° Learning By Doing λ°©μμΌλ‘ νμ΅ν κ²λ€μ΄ κΈ°μ΅μ μ€λ λ¨κ³ , μ΄ν΄κ° ν¨μ μλλ κ²μ λͺΈμ 체νν΄μμλλ°, μ΄λ² μΌμ κ³κΈ°λ‘ νμ€ν μΈκ°μ κ·Έλ₯ λ£λ κ²μ λ΄κ²λ λ§μ§ μλ λ°©μμμ νμΈ ν μ μμμ΅λλ€.
μ΄λ‘ μΈν΄, μμΌλ‘λ 무μμ λ§λ€μ΄κ°λ©° νμν 곡λΆλ₯Ό μ§νν κ³νμ΄λ©° Learning By Doing λ‘ νμ΅ν΄ λκ° κ²μ λλ€.
μ½λμ€μΏΌλ λ§λ§μΈπ(?)
- SimpleMailMessage μ λν΄ μκ³ μΆλ€λ©΄ ? Spring Mail Guide μ 3.Mail Server Properties 보기
- λ€μν λ©μμ§ μ»¨λ²ν°λ₯Ό μκ³ μΆλ€λ©΄ ? https://www.baeldung.com/spring-httpmessageconverter-rest μ 2.2 The Default Message Converters 보기