개발 기록

java 메일 보내기[Gmail] 본문

Java/javaSE

java 메일 보내기[Gmail]

청군로 2021. 6. 4. 13:06

java를 통해 메일을 보낼 수 있는데 이때 필요한 라이브러리가 있다.(링크 첨부)

-activation.jar

-javax.mail.jar

-javax.mail-api.jar

-모든 라이브러리는 메이븐사이트에서 다운로드 했습니다!

 

우선 메일을 보내려면 필요한 설정이 있다. 우선 구글 계정에서 낮은 단계의 앱사용을 허용.

 

다음은 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