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");
}
}
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
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. –
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