We know, We can send an e-mail using Intents, This will invoke either default mail app or built-in device mail apps to send an e-mail. This is unnecessary for user to work on e-mail application while he is trying to work an our application. So the question is
how to send an e-mail from android application without user interaction?
Answer is you can achieve this using JavaMail API.
You have to use following three jars. Complete code:
MainActivity.java
activity_main.xml
Complete code as zip on GITHUB
I hope this post is useful. kindly share your feedback as comment here.
how to send an e-mail from android application without user interaction?
Answer is you can achieve this using JavaMail API.
You have to use following three jars. Complete code:
MainActivity.java
package com.exmple.javamail;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class MainActivity extends Activity {
private static String username = "";
private static String password = "";
private static String name = "";
private EditText mRecEmailEdit;
private EditText mSubjectEdit;
private EditText mMessageEdit;
private EditText mNameEdit;
private EditText mEmailEdit;
private EditText mPasswordEdit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNameEdit = (EditText) findViewById(R.id.sender_name);
mEmailEdit = (EditText) findViewById(R.id.sender_email);
mPasswordEdit = (EditText) findViewById(R.id.sender_password);
mRecEmailEdit = (EditText) findViewById(R.id.email);
mSubjectEdit = (EditText) findViewById(R.id.subject);
mMessageEdit = (EditText) findViewById(R.id.message);
Button sendButton = (Button) findViewById(R.id.send);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
name = mNameEdit.getText().toString();
username = mEmailEdit.getText().toString();
password = mPasswordEdit.getText().toString();
String email = mRecEmailEdit.getText().toString();
String subject = mSubjectEdit.getText().toString();
String message = mMessageEdit.getText().toString();
sendMail(email, subject, message);
}
});
}
private void sendMail(String email, String subject, String messageBody) {
Session session = createSessionObject();
try {
Message message = createMessage(email, subject, messageBody,
session);
new SendMailTask().execute(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
private Message createMessage(String email, String subject,
String messageBody, Session session) throws MessagingException,
UnsupportedEncodingException {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username, name));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(
email, email));
message.setSubject(subject);
message.setText(messageBody);
return message;
}
private Session createSessionObject() {
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.port", "587");
return Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
private class SendMailTask extends AsyncTask<Message, Void, Void> {
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(MainActivity.this,
"Please wait", "Sending mail", true, false);
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressDialog.dismiss();
}
@Override
protected Void doInBackground(Message... messages) {
try {
Transport.send(messages[0]);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,
"Mail sent successfully", Toast.LENGTH_LONG)
.show();
}
});
} catch (final MessagingException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,
e.getClass() + " : " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
});
}
return null;
}
}
}
activity_main.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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<EditText
android:id="@+id/sender_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:ems="10"
android:hint="your Name"
android:inputType="textEmailAddress" />
<EditText
android:id="@+id/sender_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/sender_name"
android:ems="10"
android:hint="your e-mail"
android:inputType="textEmailAddress" />
<EditText
android:id="@+id/sender_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/email"
android:inputType="textPassword"
android:layout_below="@+id/sender_email"
android:hint="Your e-mail password" />
<EditText
android:id="@+id/email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/sender_password"
android:ems="10"
android:hint="reciever e-mail"
android:inputType="textEmailAddress" />
<EditText
android:id="@+id/subject"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/email"
android:layout_below="@+id/email"
android:hint="subject" />
<EditText
android:id="@+id/message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/subject"
android:ems="10"
android:hint="message"
android:inputType="textMultiLine"
android:lines="5" />
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/message"
android:text="Send!" />
</RelativeLayout>
Complete code as zip on GITHUB
I hope this post is useful. kindly share your feedback as comment here.

Comments
Post a Comment