2016-06-15 3 views
3

Der folgende Code sendet Mail und Anhänge über Gmail SMTP-Server mit Javamail API.Javamail mehrere Dateien anhängen

public void doSendGmail(){ 
    from = txtFrom.getText(); 
    password= new String(txtPassword.getPassword()); 
    to = txtTo.getText(); 
    cc = txtCC.getText(); 
    bcc = txtBCC.getText(); 
    subject = txtSubject.getText(); 
    message_body = jtaMessage.getText(); 

    Properties props = new Properties(); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.port", "587"); 

    Session session = Session.getInstance(props,null); 

    try { 
     //message definition 
     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); 
     if(!cc.equals("")){ 
      message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc)); 
     } 
     if(!bcc.equals("")){ 
      message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bcc)); 
     } 
     message.setSubject(subject); 
     if(!filename.equals("")){// if a file has been attached... 
      BodyPart messageBodyPart = new MimeBodyPart(); 
      messageBodyPart.setText(message_body);// actual message 
      Multipart multipart = new MimeMultipart();// create multipart message 

      // add the text message to the multipart 
      multipart.addBodyPart(messageBodyPart); 

      // attachment part 
      messageBodyPart = new MimeBodyPart(); 
      String attachment = fileAbsolutePath; 
      DataSource source = new FileDataSource(attachment); 
      messageBodyPart.setDataHandler(new DataHandler(source)); 
      messageBodyPart.setFileName(filename); 
      multipart.addBodyPart(messageBodyPart);//add the attachment to the multipart message 
      // combine text and attachment 
      message.setContent(multipart); 
      // send the complete message 
      Transport.send(message, from, password); 
     } 
     else{// if no file has been attached 
      message.setText(message_body); 
      Transport.send(message, from, password); 
     } 

     JOptionPane.showMessageDialog(this, "Message Sent!","Sent",JOptionPane.INFORMATION_MESSAGE); 

    } catch (Exception e) { 
     JOptionPane.showMessageDialog(this, e.toString()); 
    } 
} 

Dieser Code kann nur jeweils eine Datei anhängen und senden. Wie können Sie mehrere Dateien anhängen und als eine E-Mail versenden?

Die Datei wird angebracht, um eine JFileChooser verwendet, wie unten gezeigt:

public void doAttachFile(){ 
    try { 
     JFileChooser chooser = new JFileChooser(); 
     chooser.showOpenDialog(null); 
     File file = chooser.getSelectedFile(); 
     filename = file.getName();// get name of selected file 
     lblFileName.setText(filename);// display name of selected file 
     fileAbsolutePath= file.getAbsolutePath(); 
     System.out.println("File name: "+filename+"\n"+"Absolute path: "+fileAbsolutePath); 

    } catch (Exception e) { 
     JOptionPane.showMessageDialog(this, "No file was attached"); 
    } 
} 

Antwort

1

Verwenden a "für" Schleife um den Befestigungsteil.

+0

ich JFileChooser bin mit der Datei anhängen (wie Sie von der bearbeiteten sehen Quellcode). Wie speichern Sie die angehängten Dateien, zum Beispiel in einem Array, so dass Sie dann mit einer for-Schleife die angehängten Dateien zur Nachricht hinzufügen können. Nur die letzte anzuhängende Datei wird gesendet, wenn der Code unverändert bleibt. – David

+0

Ich bin mir nicht sicher, ob Sie verwirrt sind über sehr grundlegende Java-Programmierung oder über die Verwendung von JFileChooser zum Auswählen mehrerer Dateien. Ich glaube, JFileChooser lässt Sie nur eine Datei auf einmal auswählen, daher benötigen Sie eine Schleife um Ihre Verwendung von JFileChooser und eine Möglichkeit für den Benutzer zu sagen "Ich bin fertig mit der Auswahl der Dateien". Jede Iteration fügt die ausgewählte Datei zu einem Array oder einer Liste oder was auch immer hinzu. –

+0

Ich bin nicht wirklich verwirrt über die Verwendung von JFileChooser, um mehrere Dateien auszuwählen, sondern wie die mehreren Anhänge zu dem Multipart hinzugefügt werden. Ich dachte daran, ein Array zu erstellen, um die Datei hinzuzufügen, die angehängt wurde, und dann das Array zu dem Multipart hinzuzufügen, nachdem ich die Dateien angehängt habe. Die Frage ist, welcher Datentyp das Array ist, so dass es in der Lage sein muss, Dateien zu halten. – David

0

Um mehrere Dateien zu senden, können Sie dies implementieren.

// Adds multiple attachments  
Multipart multipart = new MimeMultipart(); 

String[] attachFiles = new String[amountFiles]; 
attachFiles[0] = "path.pdf"; 
attachFiles[1] = "path.txt"; 

if(attachFiles != null && attachFiles.length > 0){ 
    for (String filePath : attachFiles) { 
     MimeBodyPart attachPart = new MimeBodyPart(); 
     try { 
      attachPart.attachFile(filePath); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     multipart.addBodyPart(attachPart); 
    } 
} 

message.setContent(multipart); 
0

Sie können so viele Dateien anhängen, wie Sie diese Zeile nur wiederholen wollen

multipart.addBodyPart(messageBodyPart); 

für jede Datei