2

I am developing an application in which i have to send mail from application. The body and recipient of mail should not be editable. So i configured gmail step by step using this link.

Now the need of application is that, the FROM UserName and password is given by user. It can be of any type as :

abc@gmail.com,
abc@rediffmail.com
abc@yahoomail.com

The email should sent, what ever the user name and password entered by user. I searched about that and got that to send mail from yahoo id application should configure on yahoo smtp server.

But what if user enter other mail id. Is there a common method by which application can send mail? For that what steps i have to perform.

Manoj Fegde
  • 5,022
  • 14
  • 46
  • 92

2 Answers2

0

Try like this,

       address = (EditText) findViewById(R.id.address);
     subject = (EditText) findViewById(R.id.subject);
    emailbody = (EditText) findViewById(R.id.body);
    send = (Button) findViewById(R.id.send);

    send.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            sendEmail();
        }
    });
}

public void sendEmail(){

    if(!address.getText().toString().trim().equalsIgnoreCase("")){
      final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
      emailIntent.setType("plain/text");
      emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{ address.getText().toString()});
      emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject.getText());
      emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, emailbody.getText());
      sendMailDemo.this.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
    }
    else{
        Toast.makeText(getApplicationContext(), "Please enter an email address..", Toast.LENGTH_LONG).show();
    }
user1835052
  • 465
  • 1
  • 5
  • 11
  • I already tried. But by this code the default composer is accessible. in which mail body and address is editable. My application need is that the body and address should not be editable. – Manoj Fegde Mar 11 '13 at 12:38
  • check out this link.. this may help http://stackoverflow.com/questions/2020088/sending-email-in-android-using-javamail-api-without-using-the-default-built-in-a/2033124#2033124 – user1835052 Mar 11 '13 at 12:45
0

if you have gmail this is useful first download these 3 libs from here (mail/activation/additional) add them to your project(copy them to project/Right click/add to build path)

JSSEProvider class:

package com.emailsender;

import java.security.AccessController;

import java.security.Provider;



public final class JSSEProvider extends Provider {



public JSSEProvider() {

super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");

       AccessController

               .doPrivileged(new java.security.PrivilegedAction<Void>() {

                   public Void run() {

                       put("SSLContext.TLS",

                               "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");

                       put("Alg.Alias.SSLContext.TLSv1", "TLS");

                       put("KeyManagerFactory.X509",

                               "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");

                       put("TrustManagerFactory.X509",

                               "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");

                       return null;

                   }

               });

   }

}

GmailSender Class:

package com.emailsender;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.BodyPart;

import javax.mail.Message;

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;  

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.security.Security;

import java.util.Properties;


public class GMailSender extends javax.mail.Authenticator {

private String mailhost = "smtp.gmail.com";

    private String user;

    private String password;

    private Session session;



    private Multipart _multipart = new MimeMultipart();

    static {

        Security.addProvider(new  shooreshi.fayyaz.ghariebartar.JSSEProvider());

    }



    public GMailSender(String user, String password) {

        this.user = user;

        this.password = password;



        Properties props = new Properties();

        props.setProperty("mail.transport.protocol", "smtp");

        props.setProperty("mail.host", mailhost);

        props.put("mail.smtp.auth", "true");

        props.put("mail.smtp.port", "465");

        props.put("mail.smtp.socketFactory.port", "465");

        props.put("mail.smtp.socketFactory.class",

                "javax.net.ssl.SSLSocketFactory");

        props.put("mail.smtp.socketFactory.fallback", "false");

        props.setProperty("mail.smtp.quitwait", "false");



        session = Session.getDefaultInstance(props, this);

    }



    protected PasswordAuthentication getPasswordAuthentication() {

        return new PasswordAuthentication(user, password);

    }



    public synchronized void sendMail(String subject, String body,

            String sender, String recipients) throws Exception {

        try {

            MimeMessage message = new MimeMessage(session);

            DataHandler handler = new DataHandler(new ByteArrayDataSource(

                    body.getBytes(), "music"));

            message.setSender(new InternetAddress(sender));

            message.setSubject(subject);

            message.setDataHandler(handler);

            BodyPart messageBodyPart = new MimeBodyPart();

            messageBodyPart.setText(body);

            _multipart.addBodyPart(messageBodyPart);



            // Put parts in message

            message.setContent(_multipart);

            if (recipients.indexOf(',') > 0)

                message.setRecipients(Message.RecipientType.TO,

                        InternetAddress.parse(recipients));

            else

                message.setRecipient(Message.RecipientType.TO,

                        new InternetAddress(recipients));

            Transport.send(message);

        } catch (Exception e) {



        }

    }



    public void addAttachment(String filename) throws Exception {

        BodyPart messageBodyPart = new MimeBodyPart();

        DataSource source = new FileDataSource(filename);

        messageBodyPart.setDataHandler(new DataHandler(source));

        messageBodyPart.setFileName("music.mp3");



        _multipart.addBodyPart(messageBodyPart);

    }



    public class ByteArrayDataSource implements DataSource {

        private byte[] data;

        private String type;





        public ByteArrayDataSource(byte[] data, String type) {

            super();

            this.data = data;

            this.type = type;

        }



        public ByteArrayDataSource(byte[] data) {

            super();

            this.data = data;

        }





        public void setType(String type) {

            this.type = type;

        }



        public String getContentType() {

            if (type == null)

                return "application/octet-stream";

            else

                return type;

        }



        public InputStream getInputStream() throws IOException {

            return new ByteArrayInputStream(data);

        }



        public String getName() {

            return "ByteArrayDataSource";

        }



        public OutputStream getOutputStream() throws IOException {

            throw new IOException("Not Supported");

        }

    }

}

Sending Code:

          new Thread(new Runnable() {

              public void run() {

                  try {

                      GMailSender sender = new GMailSender(

                              "yourgmail@gmail.com",

                              "yourpassword");



                    sender.addAttachment(Environment.getExternalStorageDirectory().getPath()+"/image.jpg");

                      sender.sendMail("your text",

                              "senderemail@gmail.com",

                              "recieveremail@gmail.com");









                  } catch (Exception e) {

                      Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show();



                  }

              }

          }).start();

Dont forget adding permissions!