2012-01-23 20 views
14

Spojrzałem na wiele wpisów w Internecie bez powodzenia.Java Mail, wysyłanie wielu załączników nie działa

Oto mój kod:

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

Rezultatem jest to, że mogę dostać tylko pierwszy plik w załączeniu.

  1. Próbowałem wywołaniem metody attachFile więcej niż raz, ale to dotyczy tylko ostatni załącznik
  2. Próbowałem grać z indeksów na addBodyPart: żadnej pomocy

Sprawdziłem zwykły wiadomość i I zobacz inny plik z tym samym identyfikatorem i nie jest wymieniony w załącznikach z jakiegoś powodu.

Każda pomoc będzie mile widziane, Dave

Odpowiedz

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

Dziękuję bardzo! "mieszany" załatwił sprawę. – dbalakirev

+0

Nie pozwala mi to teraz zaakceptować. Muszę poczekać 5 minut ... – dbalakirev

+1

pls przyjmij tę odpowiedź – Kushan

-1

Wystarczy zmienić gmailUsername i gmailPass rzeczywistych poświadczeń Gmail. A także zmień adres do iz adresu z żądanym. Tutaj użyliśmy portu smtp Gmail SSL do wysyłania poczty. Możesz to zmienić za pomocą własnych danych serwera pocztowego.

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

Wygląda dobrze, ale możesz dodać komentarze opisujące to, co zrobiłeś inaczej. – Beryllium

+0

Witam najpierw dzięki za poświęcenie uwagi. Ale chcę wiedzieć, uruchom ten kod i jeśli masz jakiś problem, więc powiedz, że spróbuję rozwiązać twój problem. –

Powiązane problemy