Java Mail,发送多个附件不起作用

我在互联网上看了很多条目而没有运气。

这是我的代码:

import java.io.IOException; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; 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; public class MailTest { public static void main(String[] args) throws AddressException, MessagingException, IOException { String host = "***"; String from = "b"; String to = "***"; // Get system properties Properties props = System.getProperties(); // Setup mail server props.put("mail.smtp.host", host); // Get session Session session = Session.getDefaultInstance(props, null); // Define message MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject("Hello JavaMail"); message.setText("Welcome to JavaMail"); // Handle attachment 1 MimeBodyPart messageBodyPart1 = new MimeBodyPart(); messageBodyPart1.attachFile("c:/Temp/a.txt"); // Handle attachment 2 MimeBodyPart messageBodyPart2 = new MimeBodyPart(); messageBodyPart2.attachFile("c:/Temp/b.txt"); MimeMultipart multipart = new MimeMultipart("related"); multipart.addBodyPart(messageBodyPart1); multipart.addBodyPart(messageBodyPart2); message.setContent(multipart); // Send message Transport.send(message); } } 

结果是我只获得了第一个文件。

  1. 我试过多次调用attachFile方法但是它只应用了最后一个附件
  2. 我试着在addBodyPart上玩索引:没有帮助

我检查了普通消息,我看到其中的另一个文件具有相同的标识符,并且由于某种原因它没有列在附件中。

戴夫,任何帮助都会受到赞赏

 Multipart multipart = new MimeMultipart("mixed"); for (String str : attachment_PathList) { MimeBodyPart messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(str); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(source.getName()); multipart.addBodyPart(messageBodyPart); } msg.setContent(multipart); Transport.send(msg); 
  try { String host = "smtp.gmail.com"; String from = "sender gmail id"; String pass = "sender password"; Properties props = System.getProperties(); props.put("mail.smtp.starttls.enable", "true"); // added this line props.put("mail.smtp.host", host); props.put("mail.smtp.user", from); props.put("mail.smtp.password", pass); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); String[] to = {"receiver ids"}; // In this array you can add more ids Session session = Session.getDefaultInstance(props, null); MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); InternetAddress[] toAddress = new InternetAddress[to.length]; // To get the array of addresses for( int i=0; i < to.length; i++ ) { // changed from a while loop toAddress[i] = new InternetAddress(to[i]); } System.out.println(Message.RecipientType.TO); for( int i=0; i < toAddress.length; i++) { // changed from a while loop message.addRecipient(Message.RecipientType.TO, toAddress[i]); } message.setSubject("sending in a group"); message.setText("Welcome to JavaMail"); // set ur text message BodyPart messageBodyPart1 = new MimeBodyPart(); messageBodyPart1.setText("This is message body"); //file path that you want to attatch // you are able to send multipule file simultaneously String filename[] ={"C:\\Documents and Settings\\admin\\Desktop\\imp data\\emil id.txt" ,"C:\\Documents and Settings\\admin\\Desktop\\imp data\\emil id.txt"};//change accordingly Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart1); for(int i=0 ; i 

只需使用实际的gmail凭据更改gmailUsername和gmailPass即可。 并且还使用您想要的地址更改往返地址。 这里我们使用Gmail SSL smtp端口发送邮件。 您可以使用自己的邮件服务器详细信息进行更改。

 import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; /** Author Mridul Chatterjee */ import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class SendMail { public static void main(String[] args) { Properties props = new Properties(); props.put(”mail.smtp.host”, “smtp.gmail.com”); props.put(”mail.smtp.socketFactory.port”, “465″); props.put(”mail.smtp.socketFactory.class”, “javax.net.ssl.SSLSocketFactory”); props.put(”mail.smtp.auth”, “true”); props.put(”mail.smtp.port”, “465″); ArrayList fileNames = new ArrayList(); fileNames.add(”C:/Write.txt”); fileNames.add(”C:/Write1.txt”); fileNames.add(”C:/Write2.txt”); fileNames.add(”C:/Write3.txt”); fileNames.add(”C:/25148.jpg”); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(”gmailUsername”,”gmailPass”); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(”from@no-spam.com”)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(”tomail@mail.com”)); message.setSubject(”Testing Subject”); message.setText(”Dear Mail Crawler,” + “nn No spam to my email, please!”); // multipart.addBodyPart(messageBodyPart); // DataSource source = new FileDataSource(filename); // messageBodyPart.setDataHandler(new DataHandler(source)); // messageBodyPart.setFileName(filename); System.out.println(fileNames.size()); Multipart multipart = new MimeMultipart(); BodyPart messageBodyPart = new MimeBodyPart(); for(int i=0;i { System.out.println(fileNames.get(i)); messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource((String)fileNames.get(i)); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName((String)fileNames.get(i)); multipart.addBodyPart(messageBodyPart); //message.setContent(multipart); } //multipart.addBodyPart(messageBodyPart); message.setContent(multipart); Transport.send(message); System.out.println(”Mail Sent Successfully….”); } catch (MessagingException e) { throw new RuntimeException(e); } } }