일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ollama langflow
- memcached
- JavaScript
- jpa entity자동
- MySQL
- 초기 구축
- custom valid
- 리눅스
- java9
- Next.js 14
- NextJS
- spring boot
- SpringBoot
- React
- Java
- generate pojos
- java8
- jvm
- generate entity
- header setting
- swagger
- JPA
- 헤더 설정
- spring
- docker 설치
- dto valid
- 도커
- 초기 세팅
- docker
- CentOS6
- Today
- Total
개발자의 길
[자바]smtp프로토콜 이용, 이메일 실제 존재 여부 체크 본문
열심히 만들었지만....;;
완벽히 체크가 안된다..
각 메일 서버 마다 응답하는 형식이 조금 틀릴줄이야..
그래도 가장 많이 쓰는 메일 서버는 체크가 된다.
리눅스에 올려서 사용해야된다. [host -t mx 도메인]명령이 리눅스 명령이라 로컬에서 테스트가 안된다.반드시 리눅스에 올려서 테스트 요망.ㅋ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
public class test implements Serializable{
private static Socket smtp;
private static BufferedReader input;
private static PrintStream output;
//네이버
private static List smtpServer;
private static String serverReply;
private static int port =25;
private static String from;
private static String to;
private static String subject;
private static String message;
public static boolean mailExistCheck(String email) throws Exception{
String result="fail";
try{
from ="test@test.com";
to=email;
smtpServer=getSTMPServer(to);
System.out.println(smtpServer);
// smtpServer="mx2.hotmail.com";
for(int i=0;i<smtpServer.size();i++){
try{
smtp= new Socket((String)smtpServer.get(i),port);
break;
}catch(Exception e){
}
}
//10초이상 기다리면 잘 빠져 나가기
smtp.setSoTimeout(10000);
input = new BufferedReader(new InputStreamReader(smtp.getInputStream()));
output=new PrintStream(smtp.getOutputStream(),true);
if(email.substring(email.indexOf("@")+1).equals("gmail.com") || email.substring(email.indexOf("@")+1).equals("yahoo.com") || email.substring(email.indexOf("@")+1).equals("yahoo.co.kr") ){
from="<"+from+">";
to="<"+to+">";
}
serverReply=input.readLine();
if(serverReply.charAt(0)=='2' || serverReply.charAt(0)=='3'){
output.println("HELO "+email.substring(email.indexOf("@")+1));
serverReply=input.readLine();
// System.out.println(serverReply);
output.println("MAIL FROM:"+from);
serverReply=input.readLine();
// System.out.println(serverReply);
output.println("RCPT TO:"+to);
serverReply=input.readLine();
// System.out.println(serverReply);
if(serverReply.startsWith("250")){
result="success";
}else{
result="fail";
}
// output.println("DATA");
// serverReply=input.readLine();
// System.out.println(serverReply);
// output.println("test");
// output.println(".");
// serverReply=input.readLine();
// System.out.println(serverReply);
}else{
System.out.println("Error connection to SMTP server "+smtpServer+" on port"+port);
}
}catch(Exception e){
result="fail";
}finally{
output.close();
input.close();
smtp.close();
}
if(result.equals("success")){
return true;
}else{
return false;
}
}
public static void main(String[] args) throws Exception{
long atime=System.currentTimeMillis();
System.out.println("start");
System.out.println("result==="+mailExistCheck(args[0]));
long btime=System.currentTimeMillis();
System.out.println(btime-atime);
}
public static List getSTMPServer(String email) throws Exception{
List<String> result=new ArrayList<String>();
//도메인 가져오기
String domain=email.substring(email.indexOf("@")+1);
String line="";
String status="";
Runtime r= Runtime.getRuntime();
//smtp 서버 가져 오는 리눅스 명령어
String command="host -t mx "+domain;
Process proc= r.exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while ((line = reader.readLine()) != null) {
StringTokenizer lineResult = new StringTokenizer(line, " ");
lineResult.nextToken();lineResult.nextToken();lineResult.nextToken();lineResult.nextToken();
lineResult.nextToken();
status=lineResult.nextToken();
line=lineResult.nextToken(); //smtp 서버
result.add(line.substring(0,line.length()-1));
}
return result;
}
}
'4. JAVA' 카테고리의 다른 글
Quartz의 CronTrigger를 이용한 Java 프로그램 스케쥴링 (0) | 2010.04.23 |
---|---|
JAVA SAX 이용하여 XML Parser 만들기 (0) | 2010.04.15 |
[자바]SMTP프로토콜을 이용하여 메일 보내기 구현(SOCKET) (11) | 2010.03.21 |
자바에서 소스레벨에서 네트웍 데이타 가져오기 (openConnection 이용) (0) | 2010.03.13 |
jar 파일 만들기.(도스커맨드(cmd) 창에서).. (0) | 2010.02.03 |
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.