When I press on Send Button in log show Mail Sent But Actually mail not sent. Please help me my code below. Why Mail not sent?
GMailSender.java
MainActivity.java
Put on button click::
String fromEmail = "sample@gmail.com";
String fromPassword = "xxxxxx";
String toEmails = to_sample@gmail.com;
String adminEmail = "admin@gmail.com";
String emailSubject = "App Registration Mail";
String adminSubject = "App Registration Mail";
String emailBody = "Your message";
String adminBody = "Your message";
new SendMailTask(YOurActivity.this).execute(fromEmail,
fromPassword, toEmails, emailSubject, emailBody);
GMail.java
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import android.app.AlertDialog.Builder;
import android.util.Log;
public class GMail {
final String emailPort = "587";// gmail's smtp port
final String smtpAuth = "true";
final String starttls = "true";
final String emailHost = "smtp.gmail.com";
String fromEmail;
String fromPassword;
@SuppressWarnings("rawtypes")
String toEmailList;
String emailSubject;
String emailBody;
Properties emailProperties;
Session mailSession;
MimeMessage emailMessage;
public GMail() {
}
@SuppressWarnings("rawtypes")
public GMail(String fromEmail, String fromPassword,
String toEmailList, String emailSubject, String emailBody) {
this.fromEmail = fromEmail;
this.fromPassword = fromPassword;
this.toEmailList = toEmailList;
this.emailSubject = emailSubject;
this.emailBody = emailBody;
emailProperties = System.getProperties();
emailProperties.put("mail.smtp.port", emailPort);
emailProperties.put("mail.smtp.auth", smtpAuth);
emailProperties.put("mail.smtp.starttls.enable", starttls);
Log.i("GMail", "Mail server properties set.");
}
public MimeMessage createEmailMessage() throws AddressException,
MessagingException, UnsupportedEncodingException {
mailSession = Session.getDefaultInstance(emailProperties, null);
emailMessage = new MimeMessage(mailSession);
emailMessage.setFrom(new InternetAddress(fromEmail, fromEmail));
Log.i("GMail","toEmail: "+toEmailList);
emailMessage.addRecipient(Message.RecipientType.TO,
new InternetAddress(toEmailList));
emailMessage.setSubject(emailSubject);
emailMessage.setContent(emailBody, "text/html");// for a html email
// emailMessage.setText(emailBody);// for a text email
Log.i("GMail", "Email Message created.");
return emailMessage;
}
public void sendEmail() throws AddressException, MessagingException {
Transport transport = mailSession.getTransport("smtp");
transport.connect(emailHost, fromEmail, fromPassword);
Log.i("GMail","allrecipients: "+emailMessage.getAllRecipients());
transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
transport.close();
Log.i("GMail", "Email sent successfully.");
}
}
SendMailTask.java:
import java.util.List;
import android.app.Activity;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.os.AsyncTask;
import android.util.Log;
@SuppressWarnings("rawtypes")
public class SendMailTask extends AsyncTask {
private ProgressDialog statusDialog;
private Activity sendMailActivity;
public SendMailTask(Activity activity) {
sendMailActivity = activity;
}
protected void onPreExecute() {
statusDialog = new ProgressDialog(sendMailActivity);
statusDialog.setMessage("Getting ready...");
statusDialog.setIndeterminate(false);
statusDialog.setCancelable(false);
statusDialog.show();
}
@SuppressWarnings("unchecked")
@Override
protected Object doInBackground(Object... args) {
try {
Log.i("SendMailTask", "About to instantiate GMail...");
publishProgress("Processing input....");
GMail androidEmail = new GMail(args[0].toString(),
args[1].toString(), args[2].toString(), args[3].toString(),
args[4].toString());
publishProgress("Preparing mail message....");
androidEmail.createEmailMessage();
publishProgress("Sending email....");
androidEmail.sendEmail();
publishProgress("Email Sent.");
Log.i("SendMailTask", "Mail Sent.");
Config.mailSuccess="1";
} catch (Exception e) {
publishProgress(e.getMessage());
Log.e("SendMailTask", e.getMessage(), e);
}
return null;
}
@Override
public void onProgressUpdate(Object... values) {
statusDialog.setMessage(values[0].toString());
}
@Override
public void onPostExecute(Object result) {
statusDialog.dismiss();
}
}
Library files
mail send from background...
you can use javaMail to send mail from background
first of all you need to add these three .jar file...
Download these jar files
(1) Activation.jar: http://www.java2s.com/Code/Jar/a/Downloadactivationjar.htm
(2) Additionnal.jar: http://code.google.com/p/javamail-android/downloads/detail?name=additionnal.jar&can=2&q=
(3) mail.jar: http://www.java2s.com/Code/Jar/m/Downloadmailjar.htm
And then use these below code:
MainActivity.java
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.SendFailedException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity{
EditText email_to,subjectEdit,messageEdit;
Button mailButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize();
mailButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sendMail();
}
});
}
private void initialize() {
email_to=(EditText)findViewById(R.id.editText_to);
subjectEdit=(EditText)findViewById(R.id.editText_Subject);
messageEdit=(EditText)findViewById(R.id.editText_Message);
mailButton=(Button)findViewById(R.id.btn_SendMail);
}
protected void sendMail() {
final String username = "Your Gmail Id ";
final String password = "Your Gmail password";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(email_to.getText().toString()));
message.setSubject("Sent from MobileApp" + subjectEdit.getText().toString());
message.setText("Message : ,"
+ "\n\n"+ messageEdit.getText().toString());
new SendMailTask().execute(message);
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
private class SendMailTask extends AsyncTask<Message,String, String> {
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(MainActivity.this,null, "Sending mail", true, false);
}
@Override
protected String doInBackground(Message... messages) {
try {
Transport.send(messages[0]);
return "Success";
}
catch(SendFailedException ee)
{
if(progressDialog.isShowing())
progressDialog.dismiss();
return "error1";
}catch (MessagingException e) {
if(progressDialog.isShowing())
progressDialog.dismiss();
return "error2";
}
}
@Override
protected void onPostExecute(String result) {
if(result.equals("Success"))
{
super.onPostExecute(result);
progressDialog.dismiss();
Toast.makeText(MainActivity.this, "Mail Sent Successfully", Toast.LENGTH_LONG).show();
subjectEdit.setText("");
messageEdit.setText("");
}
else
if(result.equals("error1"))
Toast.makeText(MainActivity.this, "Email Failure", Toast.LENGTH_LONG).show();
else
if(result.equals("error2"))
Toast.makeText(MainActivity.this, "Email Sent problem2", Toast.LENGTH_LONG).show();
}
}
}
activity_main.xml
<LinearLayout 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:orientation="vertical"
tools:context="com.example.ar.MainActivity" >
<EditText
android:id="@+id/editText_to"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="To " >
<requestFocus
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</EditText>
<EditText
android:id="@+id/editText_Subject"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Subject" >
</EditText>
<EditText
android:id="@+id/editText_Message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Message" />
<Button
android:id="@+id/btn_SendMail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send Mail" />
</LinearLayout>
AndroidManifest.xml
Add this permission only...
<uses-permission android:name="android.permission.INTERNET" />
You need to import lib BackgroundMailLibrary
BackgroundMail bm = new BackgroundMail(PasswordChangeActivity.this);
bm.setGmailUserName(mail id);
bm.setGmailPassword(Utils.decryptIt(password));
bm.setMailTo(ownerEmail);
bm.setFormSubject(subject);
bm.setFormBody(body);
bm.send();
Add your manifest file:::
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.android.email.permission.READ_ATTACHMENT"/>