'SMTP'에 해당되는 글 2건

  1. 2007.11.30 자바메일 첨부파일 보내기

자바메일 API를 이용하면 쉽게 메일을 보낼 수 있는데
가끔은 메일 내용과 함께 첨부파일도 함께 보내고 싶을 때가 있다.
여기서는 아주 간단하게 첨부파일을 보내는 방법을 알아본다.
물론 파일시스템에 있는 파일을 보낼수도 있지만 여기서는 메모리에 있는 정보(스트링)을
첨부파일로 대신하도록 한다.

그리고 대체로 SMTP 메일서버는 메일서버 도메인안에 속하는 수신자에게 메일을
보낼때는 상관없지만 외부 도메인 수신자에게 메일을 보낼때는
보내는 사람의 인증정보를 필요로 하는데 여기서는 그것도 함께 살펴본다.

아래는 관련 소스인데

package com.xbrlkorea.claire.util;


import java.io.File;
import java.io.FileWriter;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Multipart;
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 MailSender
{
 Properties prop;
 Session session;
 
 public MailSender()
 {
  prop = new Properties();
 
  prop.put("mail.store.protocol"    , "pop3");
  prop.put("mail.transport.protocol", "smtp");

  // 물론 알아서 하겠지만 메일을 보내주는 메일서버 정보
  prop.put("mail.pop3.host", "mail.tistory.com");
  prop.put("mail.smtp.host", "mail.tistory.com");
 
  prop.put("mail.user" , "fruitbites");
  prop.put("mail.from" , "fruitbites@tistory.com");
  prop.put("mail.debug", "false");


//  SMTP 서버 인증정보
  prop.put("mail.smtp.auth", "true");
  MyAuthenticator auth = new MyAuthenticator("fruitbites@tistory.com", "userpassword");

  session = Session.getInstance(prop, auth);
 }

 /**
  * SMTP Authenticator
  */
 public final class MyAuthenticator extends javax.mail.Authenticator {

     private String id;
     private String pw;

     public MyAuthenticator(String id, String pw) {
         this.id = id;
         this.pw = pw;
    }

     protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
         return new javax.mail.PasswordAuthentication(id, pw);
     }

 }
 
 public void send(String from, String messageTo, String messageCCTo, String subject, String content,String attachment)
  throws Exception
 {
        MimeMessage message = new MimeMessage(session);
        boolean parseStrict = false;
        InternetAddress address = InternetAddress.parse("fruitbites@tistory.com", parseStrict)[0];
        address.setPersonal(from, "euc-kr");
       
        message.setFrom(address);
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(messageTo, parseStrict));
        message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(messageCCTo, parseStrict));
        message.setSubject(subject);

        message.setHeader("X-Mailer", "sendMessage");
        message.setSentDate(new Date());

       <!-- 파일 첨부하기 -->
        MimeBodyPart attachPart = new MimeBodyPart();
        attachPart.setDataHandler(new DataHandler(attachment,"text/xml"));
        attachPart.setFileName("XBRL INSTANCE"); // 파일명
        <!-- 만약 파일시스템의 파일을 첨부한다면
        attachPart.setDataHandler(new DataHandler(new FileDataSource(new File("somefile.xml"))));
        -->
       
       
        MimeBodyPart bodypart = new MimeBodyPart();
        bodypart.setContent(content, "text/html;charset=euc-kr");
       
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(bodypart);
        multipart.addBodyPart(attachPart);
       
        message.setContent(multipart);
        Transport.send(message);
 }
}

아하..쉽지?

Posted by
,