简体   繁体   中英

Send an E-Mail Automatically having and attachment

I had used Sending e-mail in Android using the JavaMail API using Gmail authentication it is really working good but now I want to attach a file and send automatically.

This is the link from where I got the sending email automatically:

Sending Email in Android using JavaMail API without using the default/built-in app

Use this Function:

public synchronized void sendMail(String subject, String body, String sender, String recipients, String fileName) throws Exception {   
    try{



    MimeMessage message = new MimeMessage(session);   
   // DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
    message.setFrom(new InternetAddress(sender));
    if (recipients.indexOf(',') > 0)   
        message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));   
    else  
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
    message.setSubject(subject); 

    MimeBodyPart messageBodyPart = new MimeBodyPart();

    messageBodyPart.setText(body);

    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);

    // Part two is attachment
    messageBodyPart = new MimeBodyPart();
    DataSource source = 
      new FileDataSource(fileName);
    messageBodyPart.setDataHandler(
      new DataHandler(source));
    messageBodyPart.setFileName(fileName);
    multipart.addBodyPart(messageBodyPart);

    // Put parts in message
    message.setContent(multipart);

    // Send the message
    Transport.send( message );

    }catch(Exception e){

    }
}   

you can do it using Multipart instance.

try something like this

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

Now add this multipart instance to your message where message is object of MimeMessage .

Try this code..

     public class SendAttachment{
        public static void main(String [] args){ 
 //to address
        String to="abc@abc.com";//change accordingly
        //from address
        final String user="efg@efg.com";//change accordingly
        final String password="password";//change accordingly 
         MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
       mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
      mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
      mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
      mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
      mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
      CommandMap.setDefaultCommandMap(mc); 
      //1) get the session object   
      Properties properties = System.getProperties();
      properties.put("mail.smtp.port", "465"); 
      properties.put("mail.smtp.host", "smtp.gmail.com");
        properties.put("mail.smtp.socketFactory.port", "465");
        properties.put("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.port", "465");

      Session session = Session.getDefaultInstance(properties,
       new javax.mail.Authenticator() {
       protected PasswordAuthentication getPasswordAuthentication() {
       return new PasswordAuthentication(user,password);
       }
      });

      //2) compose message   
      try{ 
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(user));
        message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
        message.setSubject("Hii"); 
        //3) create MimeBodyPart object and set your message content    
        BodyPart messageBodyPart1 = new MimeBodyPart();
        messageBodyPart1.setText("How is This"); 
        //4) create new MimeBodyPart object and set DataHandler object to this object    
        MimeBodyPart messageBodyPart2 = new MimeBodyPart();
    //Location of file to be attached
        String filename = Environment.getExternalStorageDirectory().getPath()+"/R2832.zip";//change accordingly
        DataSource source = new FileDataSource(filename);
        messageBodyPart2.setDataHandler(new DataHandler(source));
        messageBodyPart2.setFileName("Hello"); 
        //5) create Multipart object and add MimeBodyPart objects to this object    
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart1);
        multipart.addBodyPart(messageBodyPart2); 
        //6) set the multiplart object to the message object
        message.setContent(multipart ); 
        //7) send message 
        Transport.send(message); 
       System.out.println("MESSAGE SENT....");
       }catch (MessagingException ex) {ex.printStackTrace();}
      }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM