Wednesday 31 October 2012

Gmail sender Android

Here is an example to send email using Gmail Sender

email.java

package com.mail.app;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class email extends  Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.email);
        Log.i("Inside","create");
      
        final EditText to = (EditText) findViewById(R.id.ET_Mailid);
        final EditText content = (EditText) findViewById(R.id.ET_Mailmessage);
        Button b = (Button) findViewById(R.id.BT_Sendmail);
        //    Button b1 = (Button) findViewById(R.id.button2);
            b.setOnClickListener(new View.OnClickListener() {
               
                public void onClick(View v) {
                   
                    String rec = to.getText().toString();
                    String cntnt = content.getText().toString();
                    boolean sent = sendMail(rec, cntnt);
                    if(sent)
                        Toast.makeText(email.this, "mail sent to \n"+rec, Toast.LENGTH_SHORT).show();
                    else
                        Toast.makeText(email.this, "mail not sent", Toast.LENGTH_SHORT).show();
                }
            });
}
 public boolean sendMail(String reciever, String body){
       
        try{
            new GMailSender("your email id", "myapplication").sendMail("subject", ""+body, "your email id", ""+reciever, "");
                            // to send mail with file attached use this
                            // new GMailSender("pushapp53@gmail.com", "myapplication").sendMail("subject", ""+body, "pushapp53@gmail.com", ""+reciever, "/sdcard/image.jpg");
            return true;
        }catch(Exception e){
            return false;
        }
       
    }
}

Gmailsender.java
package com.mail.app;
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;  

    static {  
        Security.addProvider(new 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, String filePath) throws Exception {  
        try{
        MimeMessage message = new MimeMessage(session);  
        DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));  
       
        message.setSender(new InternetAddress(sender));  
        message.setSubject(subject);  
                      
      // message.setDataHandler(handler);  
       
        //modification starts here
       
        Multipart multipart = new MimeMultipart();
        BodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setContent(body, "text/plain");
        multipart.addBodyPart(messageBodyPart);
        //File Attachment part
//        if(!filePath.equals("")){
//            BodyPart messageAttachmentPart = new MimeBodyPart();
//            DataSource source = new FileDataSource(filePath);
//            messageAttachmentPart.setDataHandler(new DataHandler(source));
//            messageAttachmentPart.setFileName(filePath);
//            multipart.addBodyPart(messageAttachmentPart);
//        }
        message.setContent(multipart );
       
        //modification ends here
       
       
        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 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");  
        }  
    }  
}


JSEEProvider.java

package com.mail.app;
import java.security.AccessController;
import java.security.Provider;

@SuppressWarnings("serial")
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;
            }
        });
    }
}

mailsenderactivity.java



package com.mail.app;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MailsenderActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
                Button b1 = (Button) findViewById(R.id.button2);
                b1.setOnClickListener(new View.OnClickListener() {
             
              public void onClick(View v) {
                  Intent inte=new Intent(MailsenderActivity.this,email.class );
                  startActivity(inte);
              }
          });
        
    }
 
    }
       email.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
     android:background="#363636">
      <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <EditText
            android:id="@+id/ET_Mailid"
            android:layout_width="wrap_content"
            android:layout_height="25dip"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_marginTop="48dp"
            android:background="@drawable/et_bgnd_med"
            android:ems="10"
            android:inputType="textEmailAddress"
            android:textColor="@android:color/white" />

        <TextView
            android:id="@+id/TV_Mailid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginTop="15dp"
            android:text="@string/sn"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <EditText
            android:id="@+id/ET_Mailmessage"
            android:layout_width="wrap_content"
            android:layout_height="100dip"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/ET_Mailid"
            android:layout_marginTop="44dp"
            android:background="@drawable/et_bgnd_med"
            android:ems="10"
            android:inputType="textMultiLine" />

        <TextView
            android:id="@+id/TV_MailMessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/ET_Mailid"
            android:layout_marginTop="17dp"
            android:text="@string/cntn"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <Button
            android:id="@+id/BT_Sendmail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/ET_Mailmessage"
            android:layout_marginTop="52dp"
           
            android:clickable="true"
            android:text="@string/s" />

     

    </RelativeLayout>
   
   

</LinearLayout>

Xml parsing Android



Here is an example for parsing channels from a web service into a listview using xml parser.

json.java

package com.example.json;

import java.util.ArrayList;
import java.util.HashMap;


import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import android.os.Bundle;
import android.app.ListActivity;

import android.util.Log;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;


public class Json extends  ListActivity
{
   
   private static String url = "http://www.yupptv.com/mobile/androidxml.aspx";
 
   String[] names;
    // JSON Node names

    private static final String CHANNEL = "channel";
    private static final String NAME = "name";
    private static final String ID = "id";
    private static final String TYPE = "type";
    private static final String LANGUAGE = "language";
    private static final String IMAGE = "image";
    private static final String LINK = "link";
    private static final String BANDWIDTH = "bandwidth";
    private static final String CELLNAPID= "cellnapid";
    private static final String TAG = null;
   
   
   
 
   

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json);
      
        // Hashmap for ListView
        ArrayList<HashMap<String, String>> channelist = new ArrayList<HashMap<String, String>>();
     
       
        XMLParser parser = new XMLParser();
      
        String xml = parser.getXmlFromUrl(url);// getting XML
      
        Document doc = parser.getDomElement(xml); // getting DOM element
       
        NodeList nl = doc.getElementsByTagName(CHANNEL);
       
        // looping through all item nodes <item>
        for (int i = 0; i < nl.getLength(); i++)
        {
           
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key => valuez
            map.put(NAME, parser.getValue(e,NAME ));
            Log.i("name"+ NAME, "created");
            map.put(ID, parser.getValue(e,ID));
            map.put(TYPE,parser.getValue(e,TYPE ));
            map.put(LANGUAGE,parser.getValue(e,LANGUAGE ));
            map.put(IMAGE,parser.getValue(e,IMAGE));
            map.put(LINK,parser.getValue(e,LINK ));
            map.put(BANDWIDTH,parser.getValue(e,BANDWIDTH));
            map.put(CELLNAPID, parser.getValue(e,CELLNAPID ));
           
         
         
             channelist.add(map);    
        
                      
        }
       
            ListAdapter adapter = new SimpleAdapter(this, channelist,
            R.layout.list_item,
            new String[] { NAME, ID,TYPE,LANGUAGE,IMAGE,LINK,BANDWIDTH,CELLNAPID}, new int[] {
                    R.id.name, R.id.id,R.id.type,R.id.language,R.id.image,R.id.link,R.id.bandwidth,R.id.cellnapid });
 
    setListAdapter(adapter);


  
    }
   
  

}



xmlparser.java






package com.example.json;


import java.io.IOException;

import java.io.UnsupportedEncodingException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;
import android.util.Log;

public class XMLParser {
   
    public String getXmlFromUrl(String url) {
        String xml =null ;

        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            xml = EntityUtils.toString(httpEntity);
           
         

        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
        catch (ClientProtocolException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
           // e.printStackTrace(err);
        }
        // return XML
     
        return xml;
      
    }
   

    public Document getDomElement(String xml){
        Document doc = null;
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
           
            DocumentBuilder db = dbf.newDocumentBuilder();
         
//            InputSource is = new InputSource();
//                is.setCharacterStream(new StringReader(xml));
              
                doc = db.parse("http://www.yupptv.com/mobile/androidxml.aspx");
               
             
            } catch (ParserConfigurationException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            }
        catch (SAXException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            } catch (IOException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            }
      
                // return DOM
            return doc;
         
    }
    public String getValue(Element item, String str)
    {
        NodeList n = item.getElementsByTagName(str);
       
        return this.getElementValue(n.item(0));
       
    }
   
    public final String getElementValue( Node elem ) {
             Node child;
             if( elem != null){
                 if (elem.hasChildNodes()){
                     for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                         if( child.getNodeType() == Node.TEXT_NODE ){
                             return child.getNodeValue();
                             
                         }
                     }
                 }
             }
             return "";
   
    }

   
}

json.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
   
</RelativeLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
         />

    <TextView
        android:id="@+id/type"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/language"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/link"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/bandwidth "
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/cellnapid"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       
        android:textAppearance="?android:attr/textAppearanceLarge" />
   
</LinearLayout>