ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [java] 자바를 사용해서 메일 보내기 (feat. SMTP Protocol)
    Java 2020. 2. 7. 03:00
    반응형
    SMTP 프로토콜과 자바를 사용해서 메일전송을 해보려고 한다.
    현재 운영 중인 블로그에 추가할 것이당 :)

    간단하게 SMTP 메일 전송에 대한 개념을 이해하자.

    [happy@naver.com]가 [funny@gmail.com] 에게 메일을 보냈다!
    ->happy의 메일은 naver 메일서버를 거치고 gmail 메일서버를 거친 후 funny에게 전달된다.

    SMTP Protocol(Simple Mail Transfer Protocol)
      - 전자 메일 전송을 위한 표준 프로토콜.
      - 클라이언트트가 서버에 이메일을 전달하는데 사용된다.

    POP3 Protocol(Post Office Protocol)
      - 서버에서 이메일을 수신할 수 있도록 한다.
      - 서버의 이메일은 삭제됨.

    IMAY Protocol(Internet Message Access Protocol)
      - 서버에서 이메일을 수신할 수 있도록 한다.
      - 서버에 이메일을 보관함. (트래픽 증가, CPU 사용 증가)

    메일 전송 과정?

    1. 사용중인 계정의 메일 Server에 SMTP 프로토콜을 이용해서 data 전송
    2. data를 전달받은 메일 Server는 수신측 메일 Server에게 data를 전송
    3. 수신측 메일 Server에서 정상적으로 data를 받게되면 수신자의 메일 계정이 있는지 확인
    4. 만약 수신자의 계정이 없거나 휴면상태일 경우, 메일 data는 return되며 발신자에게 전달.
    5. 수신자의 계정이 존재한다면 메일 Server는 POP3 또는 IMAP 프로토콜을 이용해서 data를 수신자 계정에게 전달

    이번에는 Naver의 메일 Server를 이용해서 작업해보았다.( Google에서도 제공해줌)

    물리적인 서버를 구축해서 메일 Server를 구축해서 사용해도 되지만.. (전 직장에서 사용했당..)

    그건 다음 기회에...

     

    dependency 추가

    <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.4.7</version> 
    </dependency>
    

     

    MailController.java

    @PostMapping("/contact")
    public String mailSender() throws AddressException, MessagingException{
    	
        // naver smtp server를 사용한다.
        String host = "smtp.naver.com";
        
        // naver smtp port
        int port=465;
        
        // 발신자의 메일 주소
        String username = "zzz@naver.com";  
        
        // 발신자의 PASSWORD
        final String password = "비밀번호";  
       
        // 수신자의 메일 주소
        String recipient = "xxx@xxx.xxx";
        
        // 수신자에게 보낼 메일 제목
        String subject = "제목"; 
        
        // 수신자에게 보낼 메일 내용
        String contents = "내용";
        
        // SMTP 서버 설정 정보 세팅
        Properties props = System.getProperties(); 
        // smtp 서버
        props.put("mail.smtp.host", host);  
        // smtp 포트
        props.put("mail.smtp.port", port);  
        props.put("mail.smtp.auth", "true");  
        props.put("mail.smtp.ssl.enable", "true"); 
        props.put("mail.smtp.ssl.trust", host);  
        
        //Session 생성 & 발신자 smtp 서버 로그인 인증 
        Session session = Session.getInstance(props,  new javax.mail.Authenticator() { 
        	protected javax.mail.PasswordAuthentication getPasswordAuthentication() {  
        	return new javax.mail.PasswordAuthentication(username, password);  
        	}  
        });  
        
        session.setDebug(true); // 디버그 모드 
        
        //MimeMessage 생성 & 메일 세팅
        Message mimeMessage = new MimeMessage(session); 
        mimeMessage.setFrom(new InternetAddress(username)); // 발신자
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient)); // 수신자
        
        // 여러사람에게 메일을 보내고 싶을때?
        // InternetAddress[] addArray = new InternetAddress[3]; 
        // addArray[0] = new InternetAddress("aaa@aaa.aaa"); 
        // addArray[1] = new InternetAddress("bbb@bbb.bbb"); 
        // addArray[2] = new InternetAddress("ccc@ccc.ccc"); 
        // message.addRecipients(Message.RecipientType.TO, addArray);
    
    
        mimeMessage.setSubject(subject); // 제목  
        mimeMessage.setText(body); // 내용  
        
        // 평서문이 아닌 html 태그를 보내고 싶다면?
        // mimeMessage.setContent("<h1>안녕하세용?</h1>","text/html; charset=UTF-8")
        
        Transport.send(mimeMessage); // 전송
    
        return "index";
    }

    여러사람에게 메일을 보내거나 평서문이 아닌 태그로 메일을 꾸며볼 수 있다.

     

    naver계정으로 발신자를 사용할 경우엔

    환경설정을 해주어야 인증과정에서 문제없이 메일이 도착한다.

     

    오늘도 무사히 코딩을 마친 스스로에게 박수 !!!

    반응형

    댓글

Designed by Tistory.