728x90
안녕하세요 이번 게시글에서는 SMTP를 이용한 이메일 발송 기능에 대해서 설명드리겠습니다. 우선 시연영상부터 보여드리겠습니다.
다음은 전체 코드입니다.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
public class EmailSender extends JFrame {
// 사용자 인터페이스 구성요소 선언
private JTextField txtTo;
private JTextField txtSubject;
private JTextArea txtMessage;
private JButton btnSend;
// 생성자
public EmailSender() {
createUI(); // 사용자 인터페이스 생성 메소드 호출
}
// 사용자 인터페이스를 생성하고 초기화하는 메소드
private void createUI() {
setTitle("Java Swing Email Sender"); // 창 제목 설정
setSize(500, 300); // 창 크기 설정
setLocationRelativeTo(null); // 창을 화면 중앙에 배치
setDefaultCloseOperation(EXIT_ON_CLOSE); // 창 닫기 버튼 동작 정의
// 콘텐츠 팬에 대한 레이아웃 설정
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
// "To" 입력 필드 구성
JPanel panelTo = new JPanel();
panelTo.setLayout(new FlowLayout(FlowLayout.LEFT));
panelTo.add(new JLabel("To:"));
txtTo = new JTextField(30);
panelTo.add(txtTo);
// "Subject" 입력 필드 구성
JPanel panelSubject = new JPanel();
panelSubject.setLayout(new FlowLayout(FlowLayout.LEFT));
panelSubject.add(new JLabel("Subject:"));
txtSubject = new JTextField(30);
panelSubject.add(txtSubject);
// "Message" 입력 영역 구성
JPanel panelMessage = new JPanel();
panelMessage.setLayout(new BorderLayout());
txtMessage = new JTextArea(10, 30);
panelMessage.add(new JLabel("Message:"), BorderLayout.NORTH);
panelMessage.add(new JScrollPane(txtMessage), BorderLayout.CENTER);
// "Send" 버튼 구성
btnSend = new JButton("Send");
btnSend.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sendEmail(); // 버튼 클릭 시 이메일 발송 메소드 호출
}
});
// 각 패널을 프레임에 추가
add(panelTo);
add(panelSubject);
add(panelMessage);
add(btnSend);
pack(); // 콘텐츠에 맞게 창 크기 조절
setVisible(true); // 창을 보이게 설정
}
// 이메일을 발송하는 메소드
private void sendEmail() {
// SMTP 서버 설정
String host = "smtp.gmail.com"; // SMTP 서버 주소
// naver인 경우 smtp.naver.com
final String username = "your_email@gmail.com"; // 사용자 이메일 주소
final String password = "your_app_password"; // 앱 비밀번호 또는 이메일 비밀번호
int port = 465; // SMTP 서버 포트
// naver인 경우 587
// 메일 서버 연결을 위한 프로퍼티 설정
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
// 사용자 인증을 위한 세션 생성
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// 이메일 메시지 설정
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(username)); // 발신자 설정
message.addRecipient(Message.RecipientType.TO, new InternetAddress(txtTo.getText())); // 수신자 설정
message.setSubject(txtSubject.getText()); // 제목 설정
message.setText(txtMessage.getText()); // 내용 설정
// 메일 발송
Transport.send(message);
JOptionPane.showMessageDialog(null, "Email sent successfully!");
} catch (MessagingException me) {
me.printStackTrace();
JOptionPane.showMessageDialog(null, "Error sending email.");
}
}
// 프로그램의 진입점(main 메소드)
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new EmailSender(); // 이메일 발송자 객체 생성 및 프로그램 시작
}
});
}
}
* gmail 인경우 주의 사항
이메일을 보낼 계정에 2단계 인증 설정이 되어 있는 경우 해당 계정의 비밀번호가 아니라 발급받은 2단계 인증 비밀번호를 입력해야합니다.
google account 설정 > 보안 > 2단계 인증 으로 가면
이 부분에서 앱 비밀번호 생성후 해당 비밀번호를 입력해야 합니다.
그렇지 않다면 아래의 에러가 발생하게 됩니다.
Message Sending Failedjavax.mail.AuthenticationFailedException: 534-5.7.9 Application-specific password required.
'Java' 카테고리의 다른 글
[JAVA] 클래스 상속을 활용한 게임만들기 (2) | 2024.02.27 |
---|---|
[Java] 영화진흥위원회 오픈API 사용한 영화 정보 출력 예제 (0) | 2024.02.18 |
[Java] Swing을 활용해 간단한 알람 만들기 (0) | 2023.12.23 |
[Java] Java Swing으로 회원가입 & 로그인 프로그램 만들기(2) (0) | 2023.12.14 |
[JAVA] 스레드로 일기장 자동 백업 프로그램 만들기 (0) | 2023.12.13 |