이메일 검증이 왜 필요할까?
이메일 검증을 통해 해결할 수 있는 문제들이 있다.
- 유저의 이메일 기재 실수
- 이메일을 통해 뭔가 하려고 할 때
- 악의적인 이메일 방지 등
JavaScript: validator
Java: Apache Commons Validator
- Validator 인터페이스를 상속받아 구현체를 작성
이메일 서버 확인 = MX 레코드(Mail Exchange Record) 검증
MX 레코드는 도메인 이름 시스템(DNS)에서 특정 도메인에 대해 이메일을 수신할 메일 서버를 지정 하는 데 사용한다. 즉, 어떤 이메일이 특정 도메인으로 발송될 때, 해당 이메일을 어떤 메일 서버가 처리할지를 결정합니다.
=> 이를 통해 이메일이 제대로 전달될 수 있음을 보장한다.
MX 레코드를 조회하는 방법
Python: dnspython 라이브러리
Java: JNDI (Java Naming and Directory Interface)
단계
프로젝트를 진행하고 있는데, 상용 API 신청이 가장 쉬워보이나, 신청 + 개발 + 테스트 + 금액 이슈로 인해 상용 API는 사용할 수 없게 되었다. 따라서, 실제 유효한 이메일인지는 체크하기 어려워진 상황이다. 이메일 형식, 길이 체크는 너무나 간단하니, 남은 것은 이메일 도메인이 유효한 지와 SMTP 프로토콜을 통해 이메일 존재를 확인하는 것이었다. 하지만, SMTP 프로토콜은 스팸 문제로 인해 특정 이메일 도메인들은 그냥 전부 success, fail 등으로 내고 있다. 그래서,
이메일 도메인이 유효한 지 체크하는 방법만이 남았다.
public static boolean checkMXRecord(String domain) {
try {
Hashtable<String, String> env = new Hashtable<>();
env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
DirContext ictx = new InitialDirContext(env);
Attributes attrs = ictx.getAttributes(domain, new String[]{"MX"});
Attribute attr = attrs.get("MX");
if (attr == null) {
return false;
}
return true;
} catch (NamingException e) {
return false;
}
}
intoDNS - check DNS server and mail server health
MX레코드 확인하는 방법
java pattern, matcher