2012-01-23 108 views
14

Miré muchas entradas en Internet sin tener suerte.Java Mail, el envío de varios archivos adjuntos no funciona

Aquí está mi código:

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

El resultado es que solo me dan el primer archivo adjunto.

  1. traté de llamar al método AdjuntarArchivo más de una vez, pero entonces sólo se aplica la última fijación
  2. He intentado jugar con los índices en addBodyPart: ninguna ayuda

he comprobado el mensaje claro y i vea el otro archivo con el mismo identificador y no aparece en los archivos adjuntos por algún motivo.

Cualquier ayuda se agradece, de Dave

Respuesta

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

Muchas gracias! "mixto" hizo el truco. – dbalakirev

+0

No me deja aceptarlo ahora. Tengo que esperar 5 minutos ... – dbalakirev

+1

por favor acepte esta respuesta – Kushan

-1

Sólo cambia el gmailUsername y gmailPass con las credenciales de Gmail reales. Y también cambie la dirección hacia y desde la dirección deseada. Aquí hemos utilizado el puerto SMTP de Gmail SSL para enviar correos. Puede cambiarlo con sus propios detalles del servidor de correo.

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

Se ve bien, pero podría agregar algunos comentarios que describan lo que ha hecho de manera diferente. – Beryllium

+0

Hola, en primer lugar, gracias por su atención. Pero quiero saber si ejecuta este código y si tiene algún problema, por favor dígale que trataré de resolver su problema. –

Cuestiones relacionadas