Android Studio - Send Email GMAIL
Hola amigos en esta ocasion les enseñare como enviar correos desde su aplicación Android.
Primero nos dirigiremos a nuestra cuenta de GMAIL. para habilitar la opción de envió de correos desde aplicaciones externas.
Crear proyecto Android Studio
Vamos a crear un proyecto. (Aquí).Teniendo listo nuestro proyecto podemos comenzar a desarrollar nuestra aplicación.
Lo primero que haremos sera crear el diseño de nuestro Activity.
Antes de todo crearemos un diseño para nuestro Activity, de la siguiente forma.
Los agregaremos a nuestro directorio Drawable.
stylebtn.xml sera el diseño para nuestro Button.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="5dip" />
<stroke
android:width="1px"
android:color="@color/btn2" />
<gradient
android:startColor="@color/btn1"
android:endColor="@color/btn2"
android:angle="90">
</gradient>
</shape>
styletv.xml es el diseño para nuestro TextView.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="#ccc"
/>
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:radius="0.1dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
<stroke android:width="1dp" android:color="#ccc"></stroke>
<padding
android:top="10dp"
android:bottom="10dp"
/>
</shape>
Ahora añadiremos dentro de el directorio valúes el Colors.xml
<color name="btn1">#024C5A</color>
<color name="btn2" >#075F6B</color>
<color name="text_button">#fff</color>
<color name="text">#000</color>
<color name="textTitles">#024C5A</color>
activity_main.xml sera el diseño principal de nuestro Activity
<?xml version="1.0" encoding="utf-8"?>
<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"
android:background="#fff"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="71dp"
android:background="#024C5A"
android:weightSum="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Enviar Email"
android:textStyle="bold"
android:textSize="30dp"
android:textColor="#fff"
android:id="@+id/textView13"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18dp"
android:text="To:"
android:id="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="105dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:textColor="#024C5A" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/edtTo"
android:background="@drawable/styletv"
android:layout_below="@+id/textView"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_centerHorizontal="true"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18dp"
android:text="Subject: "
android:id="@+id/textView2"
android:textColor="@color/textTitles"
android:layout_below="@+id/edtTo"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_alignParentStart="true" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/edtSubject"
android:background="@drawable/styletv"
android:layout_below="@+id/textView2"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18dp"
android:text="Message: "
android:textColor="@color/textTitles"
android:id="@+id/textView3"
android:layout_below="@+id/edtSubject"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_alignParentStart="true" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:lines="4"
android:background="@drawable/styletv"
android:id="@+id/edtMensaje"
android:layout_below="@+id/textView3"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Send"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:id="@+id/btnEnviar"
android:background="@drawable/stylebtn"
android:textColor="@color/text_button"
android:layout_margin="10dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="50dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18dp"
android:textColor="@color/textTitles"
android:id="@+id/data"
android:layout_below="@+id/edtMensaje"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_alignParentStart="true" />
<ImageButton
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_below="@+id/edtMensaje"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_alignParentEnd="true"
android:id="@+id/imgbtnChoose"
android:src="@drawable/attachment"
android:background="@drawable/stylebtn"
android:padding="10dp"
android:adjustViewBounds="true"
android:scaleType="centerInside" />
</RelativeLayout>
La imagen que se utiliza para nuestro ButtonImage la pueden descargar a su gusto.
Agregar Dependencias build.gradle.
Continuamos con el código. Para no tener problemas con nuestro código necesitamos agregar las dependencias y para ello nos dirigimos al archivo build.gradle (Module: app).
De igual forma si prefieren las librerías Jar. les dejare el link para que las puedan descargar.
Descargar:
activation.jar
additional.jar
mail.jar
Con esto agregado no deberíamos tener problemas con el código de nuestra aplicación.
Descargar:
JSSEProvider.java
GMailSender.java
ImageFilePath.java
Para terminar agregaremos los permisos a nuestro archivo AndroidManifest.xml
El resultado sera el siguiente.
Compártelo para promover el conocimiento.
Descargar: Aquí
compile 'com.sun.mail:android-mail:1.5.5'
compile 'com.sun.mail:android-activation:1.5.5'
De igual forma si prefieren las librerías Jar. les dejare el link para que las puedan descargar.
Descargar:
activation.jar
additional.jar
mail.jar
Con esto agregado no deberíamos tener problemas con el código de nuestra aplicación.
Código de MaintActivity
Ahora agregaremos el código para nuestro MainActivity. Antes de esto deberán descargar las siguientes clases que les dejare para que las añadan a su proyecto.Descargar:
JSSEProvider.java
GMailSender.java
ImageFilePath.java
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
// Declaramos las variables de tipo EditText
EditText edtTo,edtSubject,edtMensaje;
// Declaramos la variable tipo TextVeiw
TextView txtData;
// Declara la variable para el request de la selección del archivo
private int PICK_FILE_REQUEST = 1;
// Declaramos la variable que contendra la ruta del archivo adjunto
String filename ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Asignamos las propiedades de los controles a las variables
edtTo = (EditText) findViewById(R.id.edtTo);
edtSubject = (EditText) findViewById(R.id.edtSubject);
edtMensaje = (EditText) findViewById(R.id.edtMensaje);
txtData = (TextView) findViewById(R.id.data);
// Verificar la version del SDKy los permisos
requestRuntimePermission();
// Evento click del botón
final Button send = (Button) this.findViewById(R.id.btnEnviar);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
// Asignamos las propuedades del correo que utilizaremos
GMailSender sender = new GMailSender("email", "password");
// Verificar si se adjunto un archivo
if(filename != null){
sender.addAttachment(filename);
}
// Enviar el mensaje al correo asignado
sender.sendMail(edtSubject.getText().toString(),
edtMensaje.getText().toString(),"email",
edtTo.getText().toString());
} catch (Exception e) {
Log.e("ErrorSendMail", e.getMessage(), e);
}
}
});
thread.start();
}
});
// ImageButtn para seleccionar el archivo y almacenar la ruta
ImageButton choose = (ImageButton) this.findViewById(R.id.imgbtnChoose);
choose.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showFileChooser();
}
});
}
private void showFileChooser() {
// Accion que se va a realizar en el Intent
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
// Tipo de archivos que se pueden seleccionar
intent.setType("*/*");
// Ejecutar la accion Intent
startActivityForResult(intent, PICK_FILE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Verificar que la seleccion cumple con el estado de seleccion
if (requestCode == PICK_FILE_REQUEST && resultCode == RESULT_OK) {
// Obtener la data seleccionado
Uri filePath = data.getData();
// Asignar la ruta que se obtiene usando la clase imagefilepath
filename = imagefilepath.getPath(getApplicationContext(), filePath);
// Obtenemos el nombre del archivo que hemos seleccionado
String filenames = filename.substring(filename.lastIndexOf("/")+1);
// Asignamos a nuestro txtData el nombre del archivo
txtData.setText(filenames);
}
}
private void requestRuntimePermission() {
if (Build.VERSION.SDK_INT >= 23) {
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
}
}
}
Para terminar agregaremos los permisos a nuestro archivo AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
Crear Emulador AVD
Teniendo listo esto podremos ejecutar nuestra aplicación creando un emulador. AquíEl resultado sera el siguiente.
Compártelo para promover el conocimiento.
Descargar: Aquí
Si le das a alguien un programa, lo frustrarás un día. Si le enseñas a programar, lo frustrarás toda la vida.
- Anónimo
No hay comentarios:
Publicar un comentario