Вложение более одного файла в электронное письмо - PullRequest
0 голосов
/ 07 февраля 2012

Я боролся с этим некоторое время, и я не мог найти ответ на мою проблему. Сценарий следующий: Одно веб-приложение, использующее игровую среду, запущено на движке приложений Google. Попытка прикрепить 2 файла PDF к электронному письму и отправить его. С одним файлом он работает отлично. С двумя я получаю ошибки. Вот код: пакетное приложение;

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("myAddress@gmail.com", "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);
    }


}

К сожалению, у меня нет сообщения об ошибке, даже если я печатаю стек отслеживаемых исключений, но я полагаю, что существует проблема с объектом DataSource. Я ценю любую помощь.

1 Ответ

0 голосов
/ 07 февраля 2012

Вы должны использовать FileDataSource для типа DataSource вместо ByteArrayDataSource.Попробуйте следующее:

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);
...