2015-02-24 70 views
1

我這裏可以發送郵件與多個附件:如何使用多個附件發送郵件,在java中

Properties props = System.getProperties(); 
String host = "smtp.gmail.com"; 
props.put("mail.smtp.starttls.enable", "true"); 
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"); 

Session session = Session.getDefaultInstance(props); 
MimeMessage message = new MimeMessage(session); 
Multipart multipart = new MimeMultipart(); 

// creates body part for the message 
MimeBodyPart messageBodyPart = new MimeBodyPart(); 
messageBodyPart.setContent(message, "text/html"); 

//set message body 
BodyPart msgBodyPart = new MimeBodyPart(); 
msgBodyPart.setText(body); 
multipart.addBodyPart(msgBodyPart); 
msgBodyPart = new MimeBodyPart(); 

//attach file 
DataSource source = new FileDataSource(attachFile); 
messageBodyPart.setDataHandler(new DataHandler(source)); 
messageBodyPart.setFileName(attachFile); 
multipart.addBodyPart(messageBodyPart); 

//attach file 2 
source = new FileDataSource(attachFile2); 
BodyPart messageBodyPart2 = new MimeBodyPart(); 
messageBodyPart2.setDataHandler(new DataHandler(source)); 
messageBodyPart2.setFileName(attachFile2); 
multipart.addBodyPart(messageBodyPart2); 

try { 
    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++) { 
     toAddress[i] = new InternetAddress(to[i]); 
    } 

    for(int i = 0; i < toAddress.length; i++) { 
     message.addRecipient(Message.RecipientType.TO, toAddress[i]); 
    } 
} catch (MessagingException ex) { 
    ex.printStackTrace(); 
} 

message.setSubject(subject); 
message.setContent(multipart); 
Transport transport = session.getTransport("smtp"); 
transport.connect(host, from, pass); 
transport.sendMessage(message, message.getAllRecipients()); 
transport.close(); 

但問題是我怎麼可以添加多個附件嗎?我不知道我是否可以聲明多個變量或將它放在數組上。該代碼只能包含2個附件,如果每次發送電子郵件中有5個或任何附件。

+3

這裏是一個重擊出去的想法。創建一個名爲'attach'的方法,它將'File'和'Multipart'作爲參數。你可以多次調用它,看看會發生什麼:) – MadProgrammer 2015-02-24 03:06:46

+0

你知道Java是如何工作的嗎? (具體來說,變量,對象和數組是如何工作的)。如果你這樣做,應該很容易看到如何附加一組文件。 – immibis 2015-02-24 03:11:37

回答

2

創建一個簡單的方法來調用,像,attachFile,這需要一個FileMultipartMimeBodyPart作爲參數...

public void attachFile(File file, Multipart multipart, MimeBodyPart messageBodyPart) { 
    DataSource source = new FileDataSource(file); 
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(attachFile); 
    multipart.addBodyPart(messageBodyPart);  
} 

往往你需要

File attachFiles[] = ... 

if (attachFiles > 0) { 
    //attach file 
    attachFile(attachFiles[0], multipart, messageBodyPart); 
    if (attachFiles > 1) { 
     for (int index = 1; index < attachFiles.length; index++) { 
      attachFile(attachFiles[0], multipart, new MimeBodyPart()); 
     } 
    } 
} 

如說它一個例子

+0

感謝您對這篇文章的回覆。我試圖應用這個將幾個文件附加到一個電子郵件。我使用了與發佈相同的attachFile方法,除了我將第一個參數作爲「字符串文件名」而不是「文件文件」。我嘗試使用attachFile(「extract_emails.csv」,multipart,messageBodyPart)附加文件。 attachFile(「Compare.txt」,multipart,messageBodyPart);'沒有錯誤,但我看到compare.txt已連接兩次到郵件並且extract_emails根本沒有連接。不知道我哪裏錯了。 @MadProgrammer – 2017-06-21 16:44:09

0

看看這裏給出的答案

https://stackoverflow.com/a/3177640/772590

步驟1 創建一個數據源

DataSource source = new FileDataSource(filename); 
messageBodyPart.setDataHandler(new DataHandler(source)); 
messageBodyPart.setFileName(filename); 
multipart.addBodyPart(messageBodyPart); 

步驟2創建方法來添加上述方法附着

private static void addAttachment(Multipart multipart, String filename) 
{ 
    DataSource source = new FileDataSource(filename); 
    BodyPart messageBodyPart = new MimeBodyPart();   
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(filename); 
    multipart.addBodyPart(messageBodyPart); 
} 

步驟3調用添加附件

addAttachment(multipart, "file1.txt"); 
addAttachment(multipart, "file2.txt"); 
2

使用Java郵件1.4及以上使得安裝文件更簡單,

MimeBodyPart messageBodyPart = new MimeBodyPart(); 

messageBodyPart.attachFile(String filePath)

multipart.addBodyPart(messageBodyPart); 
相關問題