[자바7]이메일



[JavaMail api] : 애플리케이션에서 이메일 알림 기능 사용하기

1. javaMail 설치 : javax.mail-api-xxx.jar 혹은 메이븐 리포지터리 홈페이지에 가서 다운 받아도 됨.
   ※ 다운로드 시 유의 사항: sun(oracle) 그림있는 것을 사용해야 함

2. 이메일 보내기
-Transport() 메서드를 이용해 특정 수령인에게 이 메일을 보낼 수 있음.
예시) gmail 사용
private void start(){
//Propertis 객체에 JavaMail 서비스에 필요한 속성을 설정
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.auth", "true");
/*추가적으로 필요 tls 연관*/
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.port", "587");
/*이메일을 보내기 위한 접속 정보를 담고 있는 javax.mail.Session을 불러옴*/
Session session = Session.getDefaultInstance(properties, new MessageAuthenticator("username", "password"));
//메세지 보내기
Message message = new MimeMessage(session);
try{
message.setFrom(new InternetAddress("username"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress("receiver"));
message.setSubject("Subject");
message.setContent("This is a message", "text/plain");
/*메일을 보냄*/
Transport.send(message);
System.out.println("Done");
}catch(MessagingException e){
e.printStackTrace();
System.out.println("fail");
}
}
3. 이메일에 파일 첨부하기
- 여러 부분을 가지는 메시지(복수로 된 메시지)를 생성하면 파일이나 이미지 같은 첨부물을 보낼 수 있음.
  여러 부분을 가지고 있는 메시지를 MIME(Multipurpose Internet Mail Extensions) 메시지라고 부르는데,
  javax.mail API의 MimeMessage 클래스를 가지고 사용함.
※ attachFile()메서드는 1.4.x버전대에서만 가지고 있는 듯 보입니다.

예시)
/*파일 첨부를 하기 위해 Mime 메시지 부분 생성*/
MimeBodyPart mbodyPart = new MimeBodyPart();
mbodyPart.setContent("This is a file attach message", "text/plain");
MimeBodyPart fbodyPart = new MimeBodyPart();
fbodyPart.attachFile("attach.txt");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mbodyPart);
multipart.addBodyPart(fbodyPart);
message.setContent(multipart);
/**/
4. 그룹에게 이메일 보내기 : 여러명의 수령인
- setRecipients() 메서드를 이용 : 이 메서드에 Address 객체 배열을 받음.
cf. setRecipients() 메서드의 인자값 중의 하나인 RecipientType 중
    BCC를 사용하게 되면 보내고자 하는 이메일에 모든 수령인이 표시되지 않게 됨.
    (스팸메일로 분류되기도 가능성 내포.)

5. 이메일 확인하기
- 해당 이메일 계정에 새롱누 메일이 왔는지 확인함.
 : javax.mail.Store를 이용해 IMAP(Internet Message Access Protocol) 이메일 계정에 연결하고,
   질의를 보내 이메일 계정의 메시지를 얻어옴.

  ※ javax.mail.Store 객체 : 이메일 메일 박스 정보에 접근 가능.(스토어를 생성하고 inbox 폴더를 요청하면 IMAP계정의 메인 메일 박스에 접근 가능)
     javax.mail.Folder 객체 : inbox의 메시지를 내려 받을 수 있음.
     javax.mail.Flags 객체 
     IMAP :
예시) IMAP계정에 연결하고 그 계정으로 부터 마지막 다섯 개의 메시지를 얻어오고 그 메시지들을 read로 표시함.
Session session = Session.getDefaultInstance(properties, null);
Store store = session.getStore("imaps");
store.connect("host", "username", "password");
System.out.println(store);
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_WRITE);
int messageCount = inbox.getMessageCount();
int startMessage = messageCount - 5;
int endMessage = messageCount;
if(messageCount < 5){
startMessage = 0;
}
Message messages[] = inbox.getMessages(startMessage, endMessage);
for(Message message : messages){
boolean hasBeenRead = false;
for(Flags.Flag flag : message.getFlags().getSystemFlags()){
if(flag == Flags.Flag.SEEN){
hasBeenRead = true;
break;
}
}
message.setFlag(Flags.Flag.SEEN, true);
System.out.println(message.getSubject() + " " + (hasBeenRead? "(read)" : "") + message.getContent());
}
inbox.close(true);
6. 이메일 계정 모니터링하기
- 한 계정에 이메일이 왔을 때를 모니터링해 이메일의 콘텐츠에 따라 처리하고자 함.
  : 5.이메일 확인하기 내용에서 IMAP 플래그 조작을 추가해 애플리케이션에 강력한 이메일 모니터링 기능을 생성.

댓글