Skip to content Skip to sidebar Skip to footer

Email With Attachment Using Java Mail Api In Android

I am beginning with android and this is my first program. This is what my code looks like. I am able to send an email (in background) using this code but unable to attach a file wi

Solution 1:

package com.mail.example;

import java.util.Properties;

import javax.activation.CommandMap;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.activation.MailcapCommandMap;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

publicclassSendFileEmail
{
 publicvoidsend(String filepath)
 {

  // Recipient's email ID needs to be mentioned.Stringto="abc@gmail.com";

  // Sender's email ID needs to be mentionedfinalStringfrom="xyz@gmail.com";
 // final String username = "xyz";finalStringpass="xyz123";
  // Assuming you are sending email from localhostStringhost="smtp.gmail.com";

  // Get system propertiesPropertiesproperties= System.getProperties();

  // Setup mail server
  properties.setProperty("mail.smtp.host", host);
  properties.put("mail.smtp.user", from);
  properties.put("mail.smtp.password", pass);
  properties.put("mail.smtp.port", "587");
  properties.put("mail.smtp.starttls.enable","true");
  properties.put("mail.smtp.auth", "true");

  //Read more: http://mrbool.com/how-to-work-with-java-mail-api-in-android/27800#ixzz3E2T8ZbpJ// Get the default Session object.//Session session = Session.getDefaultInstance(properties);Sessionsession= Session.getInstance(properties, newjavax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            returnnewPasswordAuthentication(from, pass);
        }
    });


  try{
     // Create a default MimeMessage object.MimeMessagemessage=newMimeMessage(session);

     // Set From: header field of the header.
     message.setFrom(newInternetAddress(from));

     // Set To: header field of the header.
     message.addRecipient(Message.RecipientType.TO,
                              newInternetAddress(to));

     // Set Subject: header field
     message.setSubject("This is the Subject Line!");

     // Create the message part BodyPartmessageBodyPart=newMimeBodyPart();

     // Fill the message
     messageBodyPart.setText("This is message body");

     // Create a multipar messageMultipartmultipart=newMimeMultipart();

     // Set text message part
     multipart.addBodyPart(messageBodyPart);

     // Part two is attachment
     messageBodyPart = newMimeBodyPart();
     DataSourcesource=newFileDataSource(filepath);
     messageBodyPart.setDataHandler(newDataHandler(source));
     messageBodyPart.setFileName(filepath);
     multipart.addBodyPart(messageBodyPart);


     MailcapCommandMapmc= (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");

     // Send the complete message parts
     message.setContent(multipart);
     // Send message
     Transport.send(message);
     System.out.println("Sent message successfully....");
  }catch (MessagingException mex) {
     mex.printStackTrace();
  }
}
 }

call the method like this

publicclassSendMail {

/**
 * @paramargs
 */publicstaticvoidmain(String[] args) {
    newSendFileEmail().send("sample.xlsx");
}

}

If the file is in asset folder example test.txt

File f = new File(getCacheDir()+"/test.txt");
if (!f.exists()) try {

InputStream is = getAssets().open("test.txt");
int size = is.available();
byte[] buffer = newbyte[size];
is.read(buffer);
is.close();


FileOutputStream fos = new FileOutputStream(f);
fos.write(buffer);
fos.close();
 } catch (Exception e) { thrownew RuntimeException(e); }

new SendFileEmail().send(f.getPath());

Solution 2:

First, clean up your code by getting rid of the socket factory stuff that's not needed.

The reason nothing's being attached is that you're adding a body part to the multipart, but you're never using the multipart. You need to set the multipart as the content of your message, and the multipart needs to include body parts for the main text body and the attachment. See also the MimeBodyPart.attachFile method.

Post a Comment for "Email With Attachment Using Java Mail Api In Android"