메세지 전송 / 메일보내기

준동이·2023년 4월 19일
0
post-custom-banner

메시지 전송

회원가입 - 이메일이나 기타 메시지 전송을 통해 본인 확인.
게시판에 글을 남긴 경우 답글이 왔는지 확인하는 경우

메시지 전송 파트

1.이메일
2.SMS(Short Message Service) - 유료(대행 업체를통해 신청해야 사용 가능)
3.Kakao Talk(우리나라 중심) - 회원가입을 해야한다.
4.아이폰은 자체적으로 있는게 있음 ..

이메일
메일을 작성하면 -> 메일서버로 작성 -> 상대방의 메일서버로 전송 -> 상대방이 메일서버 자체에서 가져올 수 있고 우체국 프로토콜(서버)을 통해 메일이 전송

smtp(Simple Mail Transfer Protocol)

메일서버 쓰기
계정 쪽에서 메일 계정 사용용의 보안등급 설정



메일보내기

프로그램이 이상하면 사진처럼 작성한 것들을 지우고 이클립스 재실행 해보기.
줄쳐진 코드들은 직접 입력한 것. 그리서 왼쪽에 jar파일들이 생성이 된 것.



1.인증을 위한 클래스 생성.
Brower를 눌러서 사진처럼 상속을 받는다.



  1. 메일을 보내는 본체 만들기
    MyAuthenticator 클래스
package com.exam.mail;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class MyAuthenticator extends Authenticator {
	// 구글에 로그인 할 수 있는 아이디
	private String fromEmail;
	
	// 구글에 로그인 할 수 있는 비밀번호(새롭게 생성된 16자리 만들었던 비밀번호)
	private String fromPassword;

	// 생성자를 통해 데이터들을 집어넣기
	public MyAuthenticator(String fromEmail, String fromPassword) {
		this.fromEmail = fromEmail;
		this.fromPassword = fromPassword;
	}
	
	// 이 클래스의 아이디와 패스워드를 가지고 와서 로그인 시키
	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
		// TODO Auto-generated method stub
		return new PasswordAuthentication(fromEmail, fromPassword);
	}
}



MailSender 클래스

package com.exam.mail;

import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

//메일을 보내는 본체 만들기	
public class MailSender {

	private String fromEmail;
	private String fromPassword;
	
	
	public MailSender(String fromEmail, String fromPassword) {
		this.fromEmail = fromEmail;
		this.fromPassword = fromPassword;
	}
	
	public void sendMail(String toEmail, String toName, String subject, String content) {
		// Gogle SMTP 서버에 대한 접속환경 설정
		try {
			// 접속환경 설정
			Properties props = new Properties();
//			props.put("mail.smptp.starttls.enable", "true");
//			props.put("mail.smptp.host", "smtp.gmail.com");
//			
//			// 접속 포트
//			props.put("mail.smtp.port", "587");
//			props.put("mail.smtp.auth", "true");
//			
//			props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
//			props.put("mail.smtp.ssl.protocols", "TLSv1.2");
			
			
			props.put("mail.smtp.starttls.enable", "true");
			props.put("mail.transport.protocol", "smtp");
			props.put("mail.smtp.host", "smtp.gmail.com");
			props.put("mail.smtp.port", "465");
			props.put("mail.smtp.auth", "true");
			props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
			
			
			// 인증 환경
			MyAuthenticator authenticator = new MyAuthenticator(fromEmail, fromPassword);
			
			// 인증에 통해서 접속
			// 접속 상태
			Session session = Session.getDefaultInstance(props, authenticator);
			
			// 접속을 통해 메세지 형태 만들기
			MimeMessage msg = new MimeMessage(session);
			
			// 내가 전송할 것에 대한 형태 만들기
			// 텍스트방식의 문자셋은 다국어 처리한다는
			msg.setHeader("Content-type", "text/plain;charset=utf-8");
			
			// 이 이메일의 이사람한테 보낼거야
			msg.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail, toName, "utf-8"));
			
			msg.setSubject(subject);
			msg.setContent(content,"text.plain; charset=utf-8");
			
			// 보낼 시간 / 즉시 보내게 설정했음 특정 날짜 넣어주면 예약이 됨.
			msg.setSentDate(new java.util.Date());
			
			// 전송
			Transport.send(msg);
			
			System.out.println("메일이 전송되었습니다.");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		}
	}
	
}



App 클래스

package com.exam.mail;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
    	// 구글 로그인을 위한 예약
    	MailSender mailSender = new MailSender("ehdwns977@gmail.com", "qpvnzdzyscrlrjoj");
    	
    	// 메일을 보내기 위해
    	String toEmail = "marigold9797@gmail.com";
    	String toName = "이동준";
    	String subject = "주녕 ~";
    	String content = "반가워 ~ ";
        
    	// 이 메일들을 전송
    	mailSender.sendMail(toEmail, toName, subject, content);
    }
}



메일 전송으로 - html로 받을 수 있다.

모양 만들어서 전송 가능

MailSender 코드 html로 변경

msg.setHeader("Content-type", "text/html;charset=utf-8");
			
			// 이 이메일의 이사람한테 보낼거야
			msg.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail, toName, "utf-8"));
			
			msg.setSubject(subject);
			msg.setContent(content,"text.html; charset=utf-8");
			



App 클래스 코드 html로 변경

package com.exam.mail;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
    	// 구글 로그인을 위한 예약
    	MailSender mailSender = new MailSender("구글 로그인 이메일", "비밀번호");
    	
    	// 메일을 보내기 위해
    	String toEmail = "ehdwns977@gmail.com";
    	String toName = "테스터";
    	String subject = "테스트 메일 제목";
    	// String content = "반가워 ~ ";
    	
    	// html로 작성 해보기
    	String content = "<html>"
    			+ "<head>"
    			+ "<meta charset='utf-8/>"
    			+ "</head>"
    			+ "<body>"
    			+ "<font color = 'blue'>내용 테스트</font>"
    			+ "</body>"
    			+ "</html>";
    	
    	// 이 메일들을 전송
    	mailSender.sendMail(toEmail, toName, subject, content);
    }
}



이미지로 받기 - 상대경로가 아닌 절대경로 입력해줘야 한다.

html 이미지 코드 추가

// html로 작성 해보기
    	String content = "<html>"
    			+ "<head>"
    			+ "<meta charset='utf-8/>"
    			+ "</head>"
    			+ "<body>"
    			+ "<font color = 'blue'>내용 테스트</font>"
    			+ "<img src ='https://t1.daumcdn.net/daumtop_chanel/op/20200723055344399.png'>"
    			+ "</body>"
    			+ "</html>";
profile
개발자 꿈나무
post-custom-banner

0개의 댓글