2010-07-05 7 views
27

निम्न जावा कोड को किसी फ़ाइल को फ़ाइल संलग्न करने के लिए उपयोग किया जाता है। मैं ईमेल के माध्यम से एकाधिक फाइल संलग्नक भेजना चाहता हूं। किसी भी सुझाव की सराहना की जाएगी।JavaMail का उपयोग कर ईमेल में एकाधिक फ़ाइलों को कैसे संलग्न करें?

public class SendMail { 

    public SendMail() throws MessagingException { 
     String host = "smtp.gmail.com"; 
     String Password = "mnmnn"; 
     String from = "[email protected]"; 
     String toAddress = "[email protected]"; 
     String filename = "C:/Users/hp/Desktop/Write.txt"; 
     // Get system properties 
     Properties props = System.getProperties(); 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtps.auth", "true"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     Session session = Session.getInstance(props, null); 

     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     message.setRecipients(Message.RecipientType.TO, toAddress); 
     message.setSubject("JavaMail Attachment"); 
     BodyPart messageBodyPart = new MimeBodyPart(); 
     messageBodyPart.setText("Here's the file"); 
     Multipart multipart = new MimeMultipart(); 
     multipart.addBodyPart(messageBodyPart); 
     messageBodyPart = new MimeBodyPart(); 
     DataSource source = new FileDataSource(filename); 
     messageBodyPart.setDataHandler(new DataHandler(source)); 
     messageBodyPart.setFileName(filename); 
     multipart.addBodyPart(messageBodyPart); 
     message.setContent(multipart); 

     try { 
      Transport tr = session.getTransport("smtps"); 
      tr.connect(host, from, Password); 
      tr.sendMessage(message, message.getAllRecipients()); 
      System.out.println("Mail Sent Successfully"); 
      tr.close(); 
     } catch (SendFailedException sfe) { 
      System.out.println(sfe); 
     } 
    } 
}` 

उत्तर

41

खैर, यह थोड़ी देर के बाद से मैं JavaMail काम किया है किया गया है, लेकिन जैसे तुम सिर्फ इस कोड को दोहरा सकते यह लग रहा है कई बार:

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

उदाहरण के लिए, आप के लिए एक विधि लिख सकता है यह है:

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

फिर अपने मुख्य कोड से, बस फोन:

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

आदि

+0

के साथ 100% woking है, तो यह काम करने के लिए प्रतीत नहीं होता। यह केवल अंतिम फ़ाइल संलग्न करता है (इस मामले में, ईमेल में केवल file2.txt है) – Jason

+0

समाधान अच्छी तरह से काम करता है !! –

2

केवल आपके देते हैं और इससे पहले कि message.setContent (बहुखण्डीय) आदेश

messageBodyPart = new MimeBodyPart(); 

    DataSource source = new FileDataSource(filename); 

    messageBodyPart.setDataHandler(new DataHandler(source)); 

    messageBodyPart.setFileName(filename); 

    multipart.addBodyPart(messageBodyPart); 
1

डालने के लिए बस multipart को अधिक फ़ाइलें जोड़ना चाहते हैं दूसरी फ़ाइल का फ़ाइल नाम का उपयोग कर के साथ एक और खंड जोड़ें ।

5
Multipart mp = new MimeMultipart(); 

     MimeBodyPart mbp1 = new MimeBodyPart(); 
     mbp1.setContent(body,"text/html"); 
     mp.addBodyPart(mbp1); 

     if(filename!=null) 
     { 
      MimeBodyPart mbp2 = null; 
      FileDataSource fds =null; 
      for(int counter=0;counter<filename.length;counter++) 
      { 
       mbp2 = null; 
       fds =null; 
       mbp2=new MimeBodyPart(); 
       fds = new FileDataSource(filename[counter]); 
       mbp2.setDataHandler(new DataHandler(fds)); 
       mbp2.setFileName(fds.getName()); 
       mp.addBodyPart(mbp2); 
      } 
     } 
     msg.setContent(mp); 
     msg.setSentDate(new Date()); 
     Transport.send(msg); 
+1

आपको अपने द्वारा सबमिट किए गए कोड के बारे में हमेशा एक स्पष्टीकरण देना चाहिए – alestanis

+0

लेकिन कोड अवधारणा को समझने के लिए ठीक है .... –

1

Have सरणी सूची अल जो संलग्नक की सूची आप

for(int i=0;i<al.size();i++) 
      { 
       System.out.println(al.get(i)); 

       messageBodyPart = new MimeBodyPart(); 
       DataSource source = new FileDataSource((String)al.get(i)); 

       messageBodyPart.setDataHandler(new DataHandler(source)); 
       messageBodyPart.setFileName((String)al.get(i)); 
       multipart.addBodyPart(messageBodyPart); 
       message.setContent(multipart); 
      } 
5

मेल और उपयोग करने के लिए नीचे दिए गए कोड अब जरूरत है (JavaMail 1.4 के साथ), बात सरल है:

messageBodyPart.attachFile(File file) 

या:

messageBodyPart.attachFile (स्ट्रिंग filePath)

0
Multipart multipart = new MimeMultipart("mixed"); 

     for (int alen = 0; attlen < attachments.length; attlen++) 
     { 

      MimeBodyPart messageAttachment = new MimeBodyPart();  
      fileName = ""+ attachments[attlen]; 


      messageAttachment.attachFile(fileName); 
      messageAttachment.setFileName(attachment); 
      multipart.addBodyPart(messageAttachment); 

     } 
0
File f = new File(filepath); 
File[] attachments = f.listFiles(); 
// Part two is attachment 
for(int i = 0; i < attachments.length; i++) { 
    if (attachments[i].isFile() && attachments[i].getName().startsWith("error")) { 
     messageBodyPart = new MimeBodyPart(); 
     FileDataSource fileDataSource =new FileDataSource(attachments[i]); 
     messageBodyPart.setDataHandler(new DataHandler(fileDataSource)); 
     messageBodyPart.setFileName(attachments[i].getName()); 
     messageBodyPart.setContentID("<ARTHOS>"); 
     messageBodyPart.setDisposition(MimeBodyPart.INLINE); 
     multipart.addBodyPart(messageBodyPart); 
    } 
} 
0

जावा मेल 1.3 संलग्न फ़ाइल अधिक सरल, बाद

  • बस सीधे या एक filepath से फ़ाइल अनुलग्न करने MimeBodyPart तरीकों का उपयोग।

    MimeBodyPart messageBodyPart = new MimeBodyPart(); 
    
    //messageBodyPart.attachFile(String filePath); 
    messageBodyPart.attachFile(File file); 
    
    multipart.addBodyPart(messageBodyPart); 
    
0

यह वसंत 4+

@RequestParam CommonsMultipartFile attachFile; 
@RequestParam CommonsMultipartFile attachFile2; 

Properties mailProperties = new Properties(); 
mailProperties.put("mail.smtp.auth", true); 
mailProperties.put("mail.smtp.starttls.enable", true); 
mailProperties.put("mail.smtp.ssl.enable", true); 
mailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
mailProperties.put("mail.smtp.socketFactory.fallback", false); 

JavaMailSenderImpl javaMailSenderImpl = new JavaMailSenderImpl(); 
javaMailSenderImpl.setJavaMailProperties(mailProperties); 
javaMailSenderImpl.setHost("smtp.gmail.com"); 
javaMailSenderImpl.setPort(465); 
javaMailSenderImpl.setProtocol("smtp"); 
javaMailSenderImpl.setUsername("*********@gmail.com"); 
javaMailSenderImpl.setPassword("*******"); 
javaMailSenderImpl.setDefaultEncoding("UTF-8"); 

List<CommonsMultipartFile> attachments = new ArrayList<>(); 
attachments.add(attachFile); 
attachments.add(attachFile2); 

javaMailSenderImpl.send(mimeMessage -> { 

    MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); 
    messageHelper.setTo(emailTo); 
    messageHelper.setSubject(subject); 
    messageHelper.setText(message); 

    if (!attachments.equals("")) { 
     for (CommonsMultipartFile file : attachments) { 
      messageHelper.addAttachment(file.getOriginalFilename(), file); 
     } 
    } 
}); 
संबंधित मुद्दे