focusone
73
2012-03-20 14:17:58
2
3166

구글 smtp관련 질문입니다..


java로 메일 보내기를 테스트중에 궁금한것이 있습니다.

도움좀 주세요

구글 smtp를 이용해서 첨부파일을 포함한 메일을 보내는중인데요

첨부파일이 2개가 보내지긴 한데 첨부파일의 맨마지막 배열의 이미지만 첨부가되는

이유가 무엇인가요 ?

소스코드와 같이 올리겟습니다..


package com.ccfocusone.email;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.security.Security;
import java.util.ArrayList;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
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 GmailSMTP
{
 public static String[] attachFiles = new String[]{"C:/Users/xxx/Desktop/test/b_1.png",
  "C:/Users/xxx/Desktop/test/b_2.jpg"};
 public static File file;
 public static ArrayList<String> file_list = new ArrayList<String>();
 public static void main(String[] args)
 {
  Properties p = new Properties();
  p.put("mail.smtp.user", "xxx@gmail.com"); // Google계정 아이디@gmail.com으로 설정
  p.put("mail.smtp.host", "smtp.gmail.com");
  p.put("mail.smtp.port", "465");
  p.put("mail.smtp.starttls.enable","true");
  p.put( "mail.smtp.auth", "true");

  p.put("mail.smtp.debug", "true");
  p.put("mail.smtp.socketFactory.port", "465");
  p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  p.put("mail.smtp.socketFactory.fallback", "false");

  //Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

  try {
   Authenticator auth = new SMTPAuthenticator();
   Session session = Session.getInstance(p, auth);
   session.setDebug(true); // 메일을 전송할 때 상세한 상황을 콘솔에 출력한다.

   //session = Session.getDefaultInstance(p);
   MimeMessage msg = new MimeMessage(session);
   String message = "Gmail SMTP 서버를 이용한 JavaMail 테스트";
   msg.setSubject("Gmail SMTP 서버를 이용한 JavaMail 테스트");   // **** 제목 ****
   Address fromAddr = new InternetAddress("xxx@dreamwiz.com."); // 보내는 사람의 메일주소
   msg.setFrom(fromAddr);
   Address toAddr = new InternetAddress("xxx@gmail.com");  // 받는 사람의 메일주소
   msg.addRecipient(Message.RecipientType.TO, toAddr);
   /*
   msg.setContent(message, "text/plain;charset=KSC5601");
   System.out.println("Message: " + msg.getContent());
   Transport.send(msg);
   */
  
  
  
   BodyPart messageBodyPart = new MimeBodyPart();
  
  
   // Fill the message
   messageBodyPart.setText("Java Mail API를 이용하여 첨부파일을 테스트합니다."); // **** 내용 ****
   Multipart multipart = new MimeMultipart();
   multipart.addBodyPart(messageBodyPart);
 
   // Part two is attachment
   messageBodyPart = new MimeBodyPart();
  
  
   for (int i = 0; i < attachFiles.length; i++) {
   
    file = new File(attachFiles[i]);
   
    FileDataSource fds = new FileDataSource(file);
    messageBodyPart.setDataHandler(new DataHandler(fds));
    System.out.println("fs.getName :" + fds.getName());
    messageBodyPart.setFileName(fds.getName());
   
    System.out.println("get FileName :" +messageBodyPart.getFileName());
    multipart.addBodyPart(messageBodyPart);
    msg.setContent(multipart);
}
  
  
   // Put parts in message
  
 
   // Send the message
   Transport.send(msg);
   System.out.println("Gmail SMTP서버를 이용한 메일보내기 성공");
  }
  catch (Exception mex) { // Prints all nested (chained) exceptions as well
   System.out.println("I am here??? ");
   mex.printStackTrace();
  }
 }

 private static class SMTPAuthenticator extends javax.mail.Authenticator {

  public PasswordAuthentication getPasswordAuthentication() {
   return new PasswordAuthentication("xxx", "xxxx"); // Google id, pwd
  }
 }
}

 messageBodyPart.setFileName(fds.getName());
혹시 이부분에서 setFileName할때 마지막 배열값만 set이 되어 앞에것은

없어지는건 아닌지...

개념이 확실치 않으니 이해가 잘안가는군요 도와주세요 ~

 

0
0
  • 답변 2

  • youtome
    232
    2012-03-20 14:28:57
    MimeBodyPart가 첨부파일 만큼 있어야 할텐데요..
    금은 1개의 mimeBodyPart를 여러개의 첨부가 Share해서 마지막만 남는 것으로 보입니다.
    0
  • focusone
    73
    2012-03-20 16:56:52
    감사합니다 덕분에 잘 해결했습니다 ^^
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.