깜놀하는 해므찌로

Java Gmail Library 자바 Gmail 연동 / 이메일 전송 라이브러리 본문

IT

Java Gmail Library 자바 Gmail 연동 / 이메일 전송 라이브러리

agnusdei1207 2022. 7. 6. 16:09
반응형
SMALL
/* 메일 전송 */
	public static void sendMail(String mail, String htmlContent, String ttl) throws Exception {

		String host = ""; 
		String useraddr = ""; 
		String userpwd = "";   
		/* IMAP/SMTP 설정 */ 
		Properties props = new Properties(); 
		
		/* 호스트, 계정 비번 설정 */
		host = "smtp.gmail.com";	  
		useraddr = "아이디@gmail.com";
		userpwd = "...";        
		   
		/* Gmail 앱 비밀번호 : ... */
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.socketFactory.port", "465");       
		props.put("mail.smtp.ssl.enable", "true");
		props.put("mail.smtp.host", host);
		props.put("mail.smtp.auth", "true"); 
		props.put("mail.smtp.starttls.enable", "true");
		props.put("mail.smtp.ssl.protocols", "TLSv1.2");
		 
		  
		final String username = useraddr; // 계정
		final String password = userpwd; // 비밀번호
		// mailForm에 따른 메일 설정

		/* Session 생성 */
		Session session = Session.getInstance(props, new javax.mail.Authenticator() {
			String userId = username;  
			String userPw = password;

			protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
				return new javax.mail.PasswordAuthentication(userId, userPw);
			} 
		});   
		
		/* Message 설정 */ 
		MimeMessage message = new MimeMessage(session);   
		message.setFrom(new InternetAddress(useraddr, MimeUtility.encodeText("안녕", "UTF-8", "B"))); 
		message.setSender(new InternetAddress(useraddr)); // 발송인
		message.setSubject(ttl); // 제목 
		session.setDebug(true); // 디버깅 여부
    
		/* 내용 설정 */     
		String htmlContents = StringUtil.unEscape(htmlContent); 
            
		/* 한 명씩 전달하는  경우 */    
		message.setRecipient(Message.RecipientType.TO, new InternetAddress(mail));
   
		Multipart mp = new MimeMultipart();
		MimeBodyPart mbp1 = new MimeBodyPart();
		mbp1.setContent(htmlContents, "text/html;charset=UTF-8"); // 내용
		mp.addBodyPart(mbp1);  
  
		MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
		mc.addMailcap("text/html; x-java-content-handler=com.sun.mail.handlers.text_html");
		mc.addMailcap("text/xml; x-java-content-handler=com.sun.mail.handlers.text_xml");
		mc.addMailcap("text/plain; x-java-content-handler=com.sun.mail.handlers.text_plain");
		mc.addMailcap("multipart/*; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
		mc.addMailcap("message/rfc822; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
		CommandMap.setDefaultCommandMap(mc);

		message.setContent(mp);
		Transport.send(message); 
	}

문제

1. 최근 Gmail 정책이 바껴 기존의 보안 레벨 낮춤 설정이 되지 않는다.

 

해결

1. 2단계 보안 인증을 완료하면 아래에 "앱 비밀번호" 란이 추가된 걸 볼 수 있다.

2. 클릭 후 앱 고유 비밀번호를 입력 받아 로그인 비밀번호로 활용하면 해당 앱만 사용할 수 있다.

3. 따라서 여기서 받은 비밀번호를 유저 비밀번호로 로직에 입력해주면 정상작동 한다.

반응형
LIST