2012-02-06 1 views
0

나는 잠시 동안이 문제에 시달렸는데 문제에 대한 답을 찾을 수 없었습니다. 시나리오는 다음과 같습니다. Google 애플리케이션 엔진에서 실행되는 프레임 워크를 사용하는 웹 애플리케이션입니다. 2 개의 pdf 파일을 이메일에 첨부하여 보냅니다. 하나의 파일로 완벽하게 작동합니다. 두 사람은 오류가 있습니다. 코드는 다음과 같습니다. package app;이메일에 파일 두 개 이상 첨부하기

import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.util.Properties; 

import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.MimeType; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Multipart; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 
import javax.mail.util.ByteArrayDataSource; 


public class Mailer { 

    public static void sendEmail(String to, String subject, String body, byte[]  pdf1, byte[] pdf2) 
    throws AddressException, MessagingException, UnsupportedEncodingException{ 
     Properties props = new Properties(); 
     Session session = Session.getDefaultInstance(props, null); 
     Message msg = new MimeMessage(session); 
     msg.setFrom(new InternetAddress("[email protected]", "John Smith")); 
     msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to, to)); 
     msg.setSubject(subject); 
     msg.setText(body); 

     Multipart mp = new MimeMultipart(); 

     MimeBodyPart htmlPart = new MimeBodyPart(); 
     htmlPart.setContent(body, "text/html"); 
     mp.addBodyPart(htmlPart); 

     //Attaching first pdf 
     MimeBodyPart attachment = new MimeBodyPart(); 
     attachment.setFileName("pdf1.pdf"); 
     DataSource src = new ByteArrayDataSource(pdf1, "application/pdf"); 
     attachment.setDataHandler(new DataHandler(src)); 
     mp.addBodyPart(attachment); 


     //Attaching second pdf 
     attachment = new MimeBodyPart(); 
     attachment.setFileName("pdf2.pdf"); 
     src = new ByteArrayDataSource(badgePDF, "application/pdf"); 
     attachment.setDataHandler(new DataHandler(src)); 
     mp.addBodyPart(attachment); 


     msg.setContent(mp); 

     Transport.send(msg); 
    } 


} 

불행하게도 나는 잡힌 예외의 stackTrack를 인쇄 할 경우에도 오류 메시지가없는,하지만 난 내 생각은 데이터 소스 오브젝트에 문제가 있다는 것입니다. 어떤 종류의 도움에 감사드립니다.

답변

0

DataSource 유형에 ByteArrayDataSource 대신 FileDataSource을 사용해야합니다. 다음을 시도해보십시오.

Multipart mp = new MimeMultipart(); 
MimeBodyPart htmlPart = new MimeBodyPart(); 
htmlPart.setContent(body, "text/html"); 
mp.addBodyPart(htmlPart);  

File[] attachments = new File[2]; 
atts[1] = new File("pdf1.pdf"); 
atts[2] = new File("pdf2.pdf"); 
for(int i = 0; i < attachments.length; i++) { 
    messageBodyPart = new MimeBodyPart(); 
    FileDataSource fileDataSource =new FileDataSource(attachments[i]); 
    messageBodyPart.setDataHandler(new DataHandler(fileDataSource)); 
    messageBodyPart.setFileName(attachments[i].getName()); 
    mp.addBodyPart(messageBodyPart); 

} 

msg.setContent(mp); 
Transport.send(msg); 
+0

Google 애플리케이션 엔진에 파일을 저장할 수 없기 때문에 pdf는 애플리케이션에 의해 생성되며 파일로 저장되지 않습니다. 그 이유는 데이터가 바이트 배열에있는 이유입니다. –

+0

[MultiPartEmail] (http://commons.apache.org/email/apidocs/org/apache/commons/mail/MultiPartEmail.html)을 사용해 보셨습니까? –

+0

아는 한 org.apache.commons를 사용할 수 없습니다. –