이메일이 발송되지 않는다는 연락을 받음.
이메일은 고객 측에서 메일서버 변경되어 정보가 바뀌기 전까지는 이메일 발송을 잘 했던 상태.
변경 정보로 telnet 호출 하였을 때 잘 된는데 이메일만 발송되지 않는다고 하였다.
로그에는 아래와 같이 나옴.
### emailSend START ###
### Email EmailException : Local address contains control or whitespace
원인은 이메일 발송 시 From 주소(local address) 에 공백 문자, 탭 문자, 줄바꿈 문자 등이 포함되어 있다는 것이었다.
이메일 발송 코드는 다음과 같이 되어있었음.
email.setFrom(bundle.getString(mode + "From"));
혹시나 하는 마음에 trim()을 추가하였으나 이러면 war를 다시 전달해야 한다.
email.setFrom(bundle.getString(mode + "From").trim());
그래서 고객이 설정하면서 여백이 들어갔나 싶어서 고객의 파일 그대로를 받아 열어봤다.
'공백이 있으면 방향키 눌렀을 때 한칸 더 갈테니 지워야지'라는 안일한 생각으로 파일을 열어봤으나 커서는 더 움직이지 않았다.'
war를 전달하여 배포하는 방식으로 운영 중인데, 운영 환경에서 vi로 수정 후 이러는 것이기에 운영환경(unix, Window) 차이로 잘못된 문자(CR/LF)가 포함되었을 것 같았다.
1. cat -A property.properties | grep From 입력
2. Globals.mail.From=emailId@google.com^M$ <- 이렇게 출력 됨
^M은 Windows 개행 문자 \r (Carriage Return)이었고 이로 인해 공백 오류가 발생한 거였다.
VS 코드로 파일을 열어보니 CRLF 형태인 걸 확인. LF로 변경하였다.
이후 다시 cat -A property.properties | grep From 입력하였고 다음과 같이 출력되었다.
Globals.mail.From=emailId@google.com$