2012-01-23 42 views
14

Tôi đã xem nhiều mục nhập trên internet mà không gặp may.Thư Java, gửi nhiều tệp đính kèm không hoạt động

Đây là mã của tôi:

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); 
    } 
} 

Kết quả là tôi chỉ nhận được các tập tin đầu tiên kèm theo.

  1. tôi đã cố gắng gọi phương thức attachFile nhiều hơn một lần nhưng sau đó nó chỉ áp dụng cho các tập tin đính kèm cuối cùng
  2. tôi đã cố gắng chơi với các chỉ số tại addBodyPart: không có sự giúp đỡ

Tôi đã kiểm tra thông điệp đơn giản và tôi xem tệp khác trong đó có cùng số nhận dạng và nó không được liệt kê trong phần đính kèm vì một số lý do.

Bất kỳ trợ giúp sẽ được đánh giá cao, Dave

Trả lời

21
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); 
+0

Cảm ơn bạn rất nhiều! "hỗn hợp" đã làm các trick. – dbalakirev

+0

Nó không cho phép tôi chấp nhận nó ngay bây giờ. Tôi phải đợi 5 phút ... – dbalakirev

+1

hãy chấp nhận câu trả lời này – Kushan

-1

Chỉ cần thay đổi gmailUsername và gmailPass với chứng chỉ gmail thực tế. Và cũng thay đổi địa chỉ đến và đi với địa chỉ bạn muốn. Ở đây chúng tôi đã sử dụng cổng SMTP SMTP smtp để gửi thư. Bạn có thể thay đổi nó với các chi tiết máy chủ gửi thư của riêng bạn.

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(”[email protected]”)); 

message.setRecipients(Message.RecipientType.TO, 

InternetAddress.parse(”[email protected]”)); 

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); 

} 

} 

} 
1
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<filename.length ; i++) 
     { 
      MimeBodyPart messageBodyPart2 = new MimeBodyPart(); 
      DataSource source = new FileDataSource(filename[i]); 
      messageBodyPart2.setDataHandler(new DataHandler(source)); 
      messageBodyPart2.setFileName(filename[i]); 
      multipart.addBodyPart(messageBodyPart2); 
     } 
     // both part add into maulti part 
     // set message content 
     message.setContent(multipart); 
     // Trans port the message 
     Transport transport = session.getTransport("smtp"); 
     transport.connect(host, from, pass); 
     transport.sendMessage(message, message.getAllRecipients()); 
     transport.close(); 
    } 
    catch(Exception ex) 
    { 
    ex.printStackTrace(); 
    } 
+0

Có vẻ tốt, nhưng bạn có thể thêm một số nhận xét mô tả những gì bạn đã làm khác nhau. – Beryllium

+0

Xin chào trước hết cảm ơn vì đã dành sự chú ý của bạn. Nhưng tôi muốn biết bạn chạy mã này và nếu bạn có bất kỳ vấn đề nào, vui lòng cho tôi biết sẽ cố gắng giải quyết vấn đề cho bạn. –

Các vấn đề liên quan