Friday, 3 May 2013

Gmail integration in Android

Call Method:

GMailSender sender = new GMailSender("email""psw");
       
String strBody = "Name:- "+name.getText().toString()+"\nEmail Address:-"+Fromemail.getText().toString()+"\nSubject:-+sub.getText().toString()+"\nMessage:-"+body.getText().toString();

sender.sendMail(sub.getText().toString(),strBody,Fromemail.getText().toString(),"toemail");


public class GMailSender extends javax.mail.Authenticator
{
    private String mailhost = "smtp.gmail.com";
    private String user;
    private String password;
    private Session session;

    static
    {
   //Security.addProvider(new com.efp.harmony.xnet.provider.jsse.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(userpassword);
    }

    public synchronized void sendMail(String subject, String body, String fromEmail, String ToEmail) throws Exception {
        try
        {        
         MimeMessage message = new MimeMessage(session);
          DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(),"text/plain"));         
         message.setSender(new InternetAddress(fromEmail));    
      
         message.setSubject(subject);
         message.setDataHandler(handler);
         if (ToEmail.indexOf(',') > 0)
             message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(ToEmail));
         else
             message.setRecipient(Message.RecipientType.TO, new InternetAddress(ToEmail));
         Transport.send(message);
        }
        catch(Exception e)
        {

        }
    }

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