Automatically Mail send in Background in Android

前端 未结 4 684
悲&欢浪女
悲&欢浪女 2021-01-06 13:47

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

相关标签:
4条回答
  • 2021-01-06 14:19

    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

    0 讨论(0)
  • 2021-01-06 14:25

    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" />
    
    0 讨论(0)
  • 2021-01-06 14:32

    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();
    
    0 讨论(0)
  • 2021-01-06 14:35

    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"/>
    
    0 讨论(0)
提交回复
热议问题