JavaMail und mehrere Anhänge

lin83

Mitglied
Hallo zusammen,

ich versuche seit Samstag mit Hilfe von JavaMail eine Mail zu verschicken die mehrere Dateianhänge hat.
Verschicke ich die Mail mit einer Datei funktioniert alles, lasse ich hingegen alles durch eine for Schleife laufen um mehrere Anhänge anzuhängen bekomme ich eine Nullpointer Excepention.

Java:
  EmailAttachment[] attachment = null;
            try {

                for (int i = 0; i < name.size(); i++) {
                attachment[i] = new EmailAttachment();
                attachment[i].setPath(name.get(i).toString());
                attachment[i].setDisposition(EmailAttachment.ATTACHMENT);
                }

                MultiPartEmail email = new MultiPartEmail();
                email.setSmtpPort(587);
                email.setAuthenticator(new DefaultAuthenticator("*USER*", "*PASSWORT*"));
                email.setDebug(false);

                email.setHostName("smtp.gmail.com");
                email.setFrom("*FROM*@gmail.com");
                email.setSubject("TestMail");
                email.setMsg("This is a test mail ... :-)");
                email.addTo("*TO*@gmail.com");
                email.setTLS(true);
                for (int i = 0; i < name.size(); i++) {
                email.attach(attachment[i]);
                }
                Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
                email.send();

            } catch (EmailException ex) {
                ex.printStackTrace();
            }

Ich verstehe leider nicht ganz warum das nicht funktioniert...
Lasse ich das attachment nicht durch die For Schleife laufen sondern erstelle von Hand mehrere EmailAttachment Objekte funktioniert alles...
z.B. so:

Java:
                EmailAttachment attachment1 = new EmailAttachment();
                attachment1.setPath(name.get(1).toString());
                attachment1.setDisposition(EmailAttachment.ATTACHMENT);

                EmailAttachment attachment2 = new EmailAttachment();
                attachment2.setPath(name.get(2).toString());
                attachment2.setDisposition(EmailAttachment.ATTACHMENT);

Kann mir hier jemand weiterhelfen? In den Docs konnte ich leider auch nichts finden....

DANKE
 
>Kann mir hier jemand weiterhelfen? In den Docs konnte ich leider auch nichts finden....

Ja. Aber ausser das ich mit sicherheit weiss, dass in JavaMail keine Klasse EmailAttachment, MultiPartEmail existiert auch nicht.
zB:
Java:
package ch.dmj.faq.mail;

import java.io.File;
import java.io.IOException;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.URLName;
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;


class SimpleMail {

    // login data
    private static final String TYPE = "smtp";
    private static final String HOST = "localhost";
    private static final String USER = "sysadmin";
    private static final String PASSWD = "password";
    private static final int PORT = 25;
    // send data
    private static final String SENDER = "sysadmin@localhost";
    private static final String RECIPIENT = "test@localhost";

    public static void main(String[] args) throws Exception {
        sendMail();
    }

    private static void sendMail() throws NoSuchProviderException, MessagingException,
            AddressException, IOException {
        Properties props = new Properties();
        props.put("mail.smtp.starttls.enable", "true");
        Session session = Session.getDefaultInstance(props);
        session.setDebug(false);
        Transport tr = session.getTransport(new URLName(TYPE, HOST, PORT, null, USER, PASSWD));
        Message message = new MimeMessage(session);
        message.addRecipient(RecipientType.TO, new InternetAddress(RECIPIENT));
        message.addFrom(new InternetAddress[] { new InternetAddress(SENDER) });
        //subject
        message.setSubject("the subject");
        //the multipart
        MimeMultipart multiPart = new MimeMultipart("mixed");
        // a plaintext part
        MimeBodyPart body1 = new MimeBodyPart();
        body1.setContent("blub", "text/plain");
        multiPart.addBodyPart(body1);
        // a html part
        MimeBodyPart body2 = new MimeBodyPart();
        body2.setContent("<b>hallo welt</b>", "text/html");
        multiPart.addBodyPart(body2);
        // a picture
        MimeBodyPart body3 = new MimeBodyPart();
        body3.attachFile(new File("/home/user/Desktop/picture"));
        multiPart.addBodyPart(body3);
        // set the content to the multipart
        message.setContent(multiPart);
        //send
        tr.connect();
        tr.sendMessage(message, message.getAllRecipients());
        tr.close();
    }
}
 
Wenn das was du hier stehen hast wirklich der Code ist den du in deinem Programm verwendest, dann wundert es mich nicht, dass du eine NullPointerException bekommst

du legst ja die Variable attachment so an

EmailAttachment[] attachment = null;

damit ist attachment null.

und in deiner Schleife 4 Zeilen darunter greifst du dann auf dieses Object zu welches noch immer null ist und bekommst eine NullPointerException.

vl schreibst du doch leiber

EmailAttachment[] attachment = new EmailAttachment[name.size()];
 
Dein Array ist null, deshalb knallt es beim Zuweisen der einzelnen Elemente.
Da fehlt vor der Schliefe noch etwas wie
Java:
attachment = new EmailAttachment[name.size()];
 

Zurück
Oben