일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Valid groups
- Swing
- 크롬 디버깅
- vue-cookies
- devtools
- 타임리프 리로드
- oracle
- spring
- 그룹별 유효성 검사
- HTML
- Tomcat
- sqlplus
- GUI
- node.js
- 톰캣
- java
- 유효성 그룹
- JavaScript
- db
- 코딩테스트연습
- MySQL
- chrome mobile debug
- C언어
- 프로그래머스
- 프로젝트
- C
- Thymeleaf
- CSS
- js
- CLASS
Archives
개발 기록
java 메일 보내기[Gmail] 본문
java를 통해 메일을 보낼 수 있는데 이때 필요한 라이브러리가 있다.(링크 첨부)
-모든 라이브러리는 메이븐사이트에서 다운로드 했습니다!
우선 메일을 보내려면 필요한 설정이 있다. 우선 구글 계정에서 낮은 단계의 앱사용을 허용.
다음은 smtp에 관한 설정을 키와 밸류를 이용한 Map컬렉션에 담아두자. 컬렉션 중 Properties을 사용.
Properties props = new Properties(); //key-vaule 쌍으로 데이터를 처리하는 Map컬렉션 생성
props.put("mail.smtp.host", "smtp.gmail.com"); //smtp의 서버주소인데 나는 gmail을 이용할 것이다.
props.put("mail.smtp.port", 465); //smtp 서버 포트 번호(다른 smtp를 이용할 때는 그에 맞는 포트 번호를 사용해야함)
props.put("mail.smtp.auth", "true"); //권한 생성
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.trust", "smtp.gmail.com"); //ssl 사용시
그 다음은 세션을 생성해야 한다.
전송자의 메일 주소와 앱 비밀번호(링크 첨부)를 입력한다. 앱 비밀번호는 구글의 설정에서 생성할 수 있다.
저기서 앱 비밀번호를 누르고 비밀번호를 생성하면 된다. 이때 앱비밀번호 가 안보이는 사람은 구글 2단계 인증 먼저
진행을 해야 앱 비밀번호를 발급 받을 수 있다. 또 다른 설정이 필요한데
설정에 들어가서 POP/IMAP 탭(링크 첨부)으로 간다음 POP을 사용 설정 해야한다.
위 사진과 같이 설정까지 마쳤다면 앱 비밀번호를 발급 받고 세션을 생성하자!
Session session = Session.getDefaultInstance(props, new Authenticator() {
protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new javax.mail.PasswordAuthentication("전송자@gamil.com", "앱 비밀번호");
}
});
세션 생성후 보낼 메세지에 관한 설정을 해준다.
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(t_sender.getText()));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(t_receiver.getText()));
message.setSubject(t_title.getText()); //메일 주소
message.setContent(area.getText(), "text/html;charset=utf8"); //html을 지원하는 내용일 경우 인코딩 지정
Transport.send(message);
JOptionPane.showMessageDialog(this, "메일 전송 완료");
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
최종 코드
package app0603.email;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.PasswordAuthentication;
import java.security.MessageDigest;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
//메일 보내기!!!!!!!!!!!!!!
public class MailSendApp extends JFrame{
JTextField t_receiver;
JTextField t_sender;
JTextField t_title;
JTextArea area;
JButton bt;
Properties props; //키-밸류 쌍으로 데이터를 처리하는 Map컬렉션
public MailSendApp() {
t_sender = new JTextField("보내는 사람 주소", 25);
t_receiver = new JTextField(25);
t_title = new JTextField(25);
area = new JTextArea();
bt = new JButton("전송");
area.setPreferredSize(new Dimension(250, 150));
add(t_sender);
add(t_receiver);
add(t_title);
add(area);
add(bt);
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Thread thread = new Thread() { //메일 전송은 쓰레드에서 처리
public void run() {
sendMail();
}
};
thread.start();
}
});
setLayout(new FlowLayout());
setBounds(100, 100, 300, 310);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
//메일 보내기
public void sendMail() {
props = new Properties(); //Map 유형 중 하나
props.put("mail.smtp.host", "smtp.gmail.com"); //smtp 서버 주소 작성
props.put("mail.smtp.port", 465); //smtp 서버 포트 번호
props.put("mail.smtp.auth", "true"); //권한 트루
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.trust", "smtp.gmail.com"); //ssl 사용시
Session session = Session.getDefaultInstance(props, new Authenticator() {
protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new javax.mail.PasswordAuthentication("송신자 메일주소", "앱 비밀번호");
}
});
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(t_sender.getText()));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(t_receiver.getText()));
message.setSubject(t_title.getText()); //메일 주소
message.setContent(area.getText(), "text/html;charset=utf8"); //html을 지원하는 내용일 경우 인코딩 지정
Transport.send(message);
JOptionPane.showMessageDialog(this, "메일 전송 완료");
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new MailSendApp();
}
}
실행 결과
송신자와 발신자의 주소를 넣은 뒤 전송 버튼을 누르면
전송이 잘 됐다고 한다. 이제 메일을 받는 곳으로 가보면,
아주 잘 전송되는 것을 확인할 수 있다!
'Java > javaSE' 카테고리의 다른 글
Calendar 클래스[달력 만들기] (0) | 2021.06.02 |
---|---|
파일의 입출력[java / io] (0) | 2021.06.02 |
Thread-쓰레드[java] (0) | 2021.05.27 |
자바 GUI 띄우기[JFrame] (0) | 2021.05.12 |
overriding[java] (0) | 2021.05.03 |
Comments