티스토리 뷰

1. 계정 설정 (App 비밀번호 생성)

 - 보안 > Google에 로그인 > 앱 비밀번호

  https://myaccount.google.com/apppasswords 

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

 

 

2. activation.jar, mail.jar 추가

-maven

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

-gradle

implementation 'javax.mail:mail:1.4'
implementation 'javax.activation:activation:1.1.1'

 

 

3. 소스

import java.util.Date;
import java.util.Properties;
import java.util.Scanner;
import javax.activation.CommandMap;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.activation.MailcapCommandMap;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class SendMailToCustomers {
	private static final String bodyEncoding = "UTF-8";

	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		
	// TEST용
	String gmailId = "";
	String password = ""; // 발급받은 앱 패스워드 
	String sender = "홍길동";
	sendMail(gmailId, password, sender);
		
	System.out.println("Gmail 아이디를 입력하세요.");
	String gmailId = sc.next();      
	System.out.println("Gmail 앱 패스워드를 입력하세요.");
	String password = sc.next();     
	System.out.println("발신자를 입력하세요.");
	String sender = sc.next();   
	
    // System.out.println("수신자와 참조인을 정확히 확인 후 발송바랍니다. 계속 진행하시려면 Y, 종료하시려면  N를 입력하세요.");
    // while(true) {
    // String sendYN = sc.next();       
    //			if("Y".equals(sendYN)){
    //				sendMail(gmailId, password, sender);
    //			} else if("N".equals(sendYN)){
    //				System.out.println("입력을 종료합니다.");
    //                System.exit(0);
    //			} else{
    //				System.out.println("다시 입력해 주세요");
    //			}
    //		}
	}
	
	public static void sendMail(String gmailId, String password, String sender) throws Exception{
	    String subject = "테스트 메일입니다.";
	    //수신인
	    String[] recipients = {"A@gmail.com",
	    					   "B@gmail.com" };
	    //참조인
	    String[] references = {"C@gmail.com",
	    					   "D@gmail.com" };
	    //첨부파일
	    String[] attachedFiles = {"D:/util/test.txt",
	    					      "D:/util/test.txt"};
	    
	    //메일 옵션 설정
	    Properties props = new Properties();    
	    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.quitwait", "false");
	    props.put("mail.smtp.socketFactory.port", "465");
	    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
	    props.put("mail.smtp.socketFactory.fallback", "false");
	    
	    try {
	      //메일 서버  인증 계정 설정
	      Authenticator auth = new Authenticator() {
	        protected PasswordAuthentication getPasswordAuthentication() {
	          return new PasswordAuthentication(gmailId, password);
	        }
	      };
	      
	      //메일 세션 생성
	      Session session = Session.getInstance(props, auth);
	      
	      //MIME 타입 설정
	      MailcapCommandMap MailcapCmdMap = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
	      MailcapCmdMap.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
	      MailcapCmdMap.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
	      MailcapCmdMap.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
	      MailcapCmdMap.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
	      MailcapCmdMap.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
	      CommandMap.setDefaultCommandMap(MailcapCmdMap);
	      
	      //메일 송/수신 옵션 설정
	      Message message = new MimeMessage(session);
	      message.setFrom(new InternetAddress(gmailId, sender));
	      message.setSubject(subject);
	      message.setSentDate(new Date());
	      
	      MimeBodyPart mbp = new MimeBodyPart();
	      Multipart mp = new MimeMultipart();
	      StringBuilder sb = new StringBuilder();
	      
	      for (int i=0; i < references.length; i++) {
	    	  mbp = new MimeBodyPart();
	    	  mp = new MimeMultipart();
	    	  sb.setLength(0);
	    	  
	  	      //메일에 출력할 텍스트
	  	      sb.append("<h4>안녕하세요.</h4>");    
	  	      sb.append("<h4>TEST용 메일 발송입니다..</h4>");    
	  	      String sendText = sb.toString();
	  	    
		      MimeBodyPart mTextPart = new MimeBodyPart();
		      mTextPart.setText(sendText, bodyEncoding, "html");
		      mp.addBodyPart(mTextPart);
		      
		      //보낼 첨부파일이 여러 개 일 경우
		      if(attachedFiles[i].contains(",")){
		    	  String[] attachedFiles2 = attachedFiles[i].split(",");
		    	  for (int j=0; j < attachedFiles2.length; j++) {
	    		  FileDataSource fds = new FileDataSource(attachedFiles2[j]); 
	    		  mbp = new MimeBodyPart();
			      mbp.setDataHandler(new DataHandler(fds));  	                    
			      mbp.setFileName(fds.getName());
			      mp.addBodyPart(mbp);
				}
		      } else{
		    	  FileDataSource fds = new FileDataSource(attachedFiles[i]); //파일 읽어오기
			      mbp.setDataHandler(new DataHandler(fds));  	                    
			      mbp.setFileName(fds.getName());
			      mp.addBodyPart(mbp);
		      }
		      
		      message.setContent(mp);
		      
		      //수신인
	    	  message.setRecipients(RecipientType.TO, InternetAddress.parse(recipients[i], false));
	    	  //참조인
	    	  message.setRecipients(RecipientType.CC, InternetAddress.parse(references[i], false));
	    	  Transport.send( message);
	      }
	    } catch ( Exception e ) {
	      e.printStackTrace();
	    }
	}
}

'개발 > Java' 카테고리의 다른 글

[Java] - Garbage Collection(GC) Eden 의미  (2) 2022.09.21
[Java] - Comparator  (0) 2021.10.21
링크
최근에 올라온 글
글 보관함
«   2025/08   »
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