JavaMail - Anhang hochladen vor senden der Nachricht

GUI-Programmer

Top Contributor
Ich weis bereits, wie man mit JavaMail Anhänge mit einer Mail versendet. Jedoch, da dies, v.a. bei einer schlechten Internetleitung, sehr lange dauern kann, wenn man mehrere Dateien angehängt hat, möchte ich die Anhänge schon vorher hochladen - damit der Vorgang des Sendens nicht so ewig dauert. Ist dies generell mit JavaMail möglich, wenn ja, wie?

Hier noch ein bischen Code, wie ich das bisher gemacht habe:
Java:
public void login(final String username, final String password) throws Exception {
		MailTool.this.username = username;
		MailTool.this.password = password;
		
		Properties props1=new Properties();
		props1.put("mail.smtp.port", "587");
        props1.put("mail.smtp.auth", "true");
        props1.put("mail.smtp.starttls.enable", "true");
        session1 = Session.getInstance(props1);
        transport = session1.getTransport("smtp");
		transport.connect("smtp.googlemail.com", username, password);
		
		Properties props2 = System.getProperties();
		props2.setProperty("mail.store.protocol", "imaps");
		props2.setProperty("mail.imaps.partialfetch", "false");
    	props2.setProperty("mail.imap.host", "imap.gmail.com");
    	props2.setProperty("mail.imap.port", "993");
    	props2.setProperty("mail.imap.connectiontimeout", "5000");
    	props2.setProperty("mail.imap.timeout", "5000");
    	Session session2 = Session.getDefaultInstance(props2, null);
    	store = session2.getStore("imaps");
    	store.connect("imap.gmail.com", username, password);
    	folder = store.getFolder("INBOX");
    	folder.open(Folder.READ_WRITE);
}

public void sendMail(String recipientAddresses, String subject, String mailText, ArrayList<File> filelist) throws Exception {
		login(username, password);
    	Address[] addresses = InternetAddress.parse(recipientAddresses);
		Message message = new MimeMessage(session1);
        message.setFrom(new InternetAddress(username));
        message.setRecipients(Message.RecipientType.TO, addresses);
        message.setSubject(subject);
        // create the message part 
        Multipart multipart = new MimeMultipart();
        MimeBodyPart textBodyPart = new MimeBodyPart();
        textBodyPart.setText(mailText);
        multipart.addBodyPart(textBodyPart);
        for(int i=0; i<filelist.size(); i++) {
        	MimeBodyPart attachementBodyPart = new MimeBodyPart();
            DataSource source = new FileDataSource(filelist.get(i));
            attachementBodyPart.setDataHandler(new DataHandler(source));
            attachementBodyPart.setFileName(filelist.get(i).getName());
            multipart.addBodyPart(attachementBodyPart);
        }
        message.setContent(multipart);
        
        transport.sendMessage(message, addresses);
        transport.close();
}

Hoffentlich findet jemand ne Lösung!!!

Danke für eure Beiträge.
 
Habe jetzt schon ne ganze Zeit lang gegooglet und nichts passendes gefunden. Vielleicht muss man ja bereits Verbinden etwas so einstellen, dass es funktioniert also so was ähnliches:
Java:
props1.put("mail.smtp.directupload.enabled", "true");

Package com.sun.mail.smtp
Wenn es das gäbe!
 
Zuletzt bearbeitet:
Hab zwar jetzt nicht soooviel gemacht, aber kann mir kaum vorstellen, dass es da was gibt..

Das müsste im RFC protokolliert/standardisiert sein.. Nur weil zB gmx, sowas anbietet, muss das ja kein Standard sein und wenn es das nicht ist, wird es von JavaMail nicht implementiert sein..

Es müsste halt sowas wie ein storeTemp, etc. geben was dir dann ne ID zurückgibt und mit der schickt man dann das Mail... Nur ob es sowas gibt..
 
Räusper - habt ihr zwei überhaupt eine Ahnung von Mail? 😀

Wohin willst du denn etwas hochladen? Ich verstehe deine Frage echt nicht - du bastelst lokal auf dem Rechner eine Mail zusammen und sendest die dann - senden ist das was du unter "hochladen" verstehst - die Daten werden von deinem PC dem Mailserver übergeben.

Wenn du Mails mit thunderbird, Outlook oder ähnlichem versendest, läuft das genau so - da kannt du auch nicht vorher was hochladen.

gmx und Konsorten sind etwas ganz anderes. Da verwendest du keinen Mailclient sondern ein Webinterface und der eigentliche Mailclient läuft auf dem Server z.B. bei gmx.

Ich weiss auch wirklich nicht was du wo einsparen willst - die Zeit um etwas hochalden ist exakt gleich lang - ob das nun vorher oder nachher geschieht.

Also kurz zusammengefasst - das was du willst geht nicht ;-)
 

Zurück
Oben