Post

Java 메일 발송

1. SMTP란

SMTP(Simple Mail Transfer Protocol)는 전자 우편을 송신하고 수신하는 데 사용되는 TCP/IP 프로토콜이다. 일반적으로 POP3 또는 IMAP(Internet Message Access Protocol)와 함께 사용되어 메시지를 서버 메일함에 저장하고 사용자를 위해 서버에서 주기적으로 메시지를 다운로드한다.

2. 메일 발송

1) SMTP 설정

  • 네이버 SMTP 설정

smtp

2) Dependency 추가

  • pom.xml
1
2
3
4
5
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

3) 계정 인증

  • MyAuthentication.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

class MyAuthentication extends Authenticator {

    PasswordAuthentication account;

    public MyAuthentication() {
        String id = "From ID";
        String pwd = "From Password";
        account = new PasswordAuthentication(id, pwd);
    }

    public PasswordAuthentication getPasswordAuthentication() {
        return account;
    }
}

4) 발송

  • SendMail.java
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;

public class SendMail {

    public void send(String title, String contents) {
        Properties prop = System.getProperties();
        prop.put("mail.smtp.starttls.enable", "true");
        prop.put("mail.smtp.host", "smtp.naver.com");
        prop.put("mail.smtp.auth", "true");
        prop.put("mail.smtp.port", "587");

        Authenticator authentication = new MyAuthentication();
        Session session = Session.getDefaultInstance(prop, authentication);
        MimeMessage msg = new MimeMessage(session);

        try {
            msg.setSentDate(new Date());
            InternetAddress internetAddress = new InternetAddress();

            internetAddress = new InternetAddress("dejavuhyo<from_email@naver.com>"); // 보내는사람
            msg.setFrom(internetAddress);

            InternetAddress ia = new InternetAddress("to_email@naver.com"); // 받는사람
            msg.setRecipient(Message.RecipientType.TO, ia);

            msg.setSubject(title, "UTF-8");
            msg.setText(contents, "UTF-8");
            msg.setHeader("content-Type", "text/html");

            javax.mail.Transport.send(msg);
        } catch (AddressException ae) {
            ae.printStackTrace();
        } catch (MessagingException me) {
            me.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SendMail sendMail = new SendMail();
        sendMail.send("제목", "내용");
    }
}

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.