Sending mail in android without intents using SMTP

后端 未结 6 2240
有刺的猬
有刺的猬 2020-11-29 03:28

Hi I am developing an android app which will send mail on click of a button. Code worked at first but due to some reason its not working now. Could anyone please help me wit

相关标签:
6条回答
  • 2020-11-29 04:12

    Put in your manifest file,

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

    check if you have internet connection,

    public boolean isOnline() {
        ConnectivityManager cm =
            (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting()) {
            return true;
        }
        return false;
    }
    

    and finnaly use this code to send email

    final String username = "username@gmail.com";
    final String password = "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("from-email@gmail.com"));
            message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse("to-email@gmail.com"));
            message.setSubject("Testing Subject");
            message.setText("Dear Mail Crawler,"
                + "\n\n No spam to my email, please!");
    
            MimeBodyPart messageBodyPart = new MimeBodyPart();
    
            Multipart multipart = new MimeMultipart();
    
            messageBodyPart = new MimeBodyPart();
            String file = "path of file to be attached";
            String fileName = "attachmentName"
            DataSource source = new FileDataSource(file);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(fileName);
            multipart.addBodyPart(messageBodyPart);
    
            message.setContent(multipart);
    
            Transport.send(message);
    
            System.out.println("Done");
    
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    
    0 讨论(0)
  • 2020-11-29 04:12

    I don't think you have to bombard your android source code with SMTP logic.

    Here is what you can do instead :

    1. Create a web service in php using PHP MAILER

    2. Use retrofit to call the webservice.

    3. Email sent succesfully!

    Php mailer is really easy to use and send your emails.Here are some examples:

    Tutorial 1

    Tutorial 2

    • The bad news is that you need a web server for doing this!
    0 讨论(0)
  • 2020-11-29 04:14

    config gradle as per below define get reference from Here

    repositories { 
         jcenter()
         maven {
             url "https://maven.java.net/content/groups/public/"
         }
    }
    
    dependencies {
         compile 'com.sun.mail:android-mail:1.5.5'
         compile 'com.sun.mail:android-activation:1.5.5'
    }
    
    android {
       packagingOptions {
           pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
       }
    }
    

    Add this async task to send mail

     public class sendemail extends AsyncTask<String, Integer, Integer> {
    
        ProgressDialog progressDialog;
        private StringBuilder all_email;
    
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(GetuserActivity.this);
            progressDialog.setMessage("Uploading, please wait...");
            progressDialog.show();
            if (selecteduser_arr != null) {
                all_email = new StringBuilder();
                for (int i = 0; i < selecteduser_arr.size(); i++) {
                    if (i == 0) {
                        all_email.append(selecteduser_arr.get(i));
                    } else {
                        String temp = "," + selecteduser_arr.get(i);
                        all_email.append(temp);
                    }
                }
            }
        }
    
        @Override
        protected Integer doInBackground(String... strings) {
    
            Properties props = new Properties();
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class",
                    "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465");
    
            Session session = Session.getDefaultInstance(props,
                    new javax.mail.Authenticator() {
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication("enterhereyouremail", "enterherepassword");
                        }
                    });
    
            try {
    
                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress("enterhereyouremail"));
                message.setRecipients(Message.RecipientType.TO,
                        InternetAddress.parse("sendermail@gmail.com,sendermail2@gmail.com"));
                message.setSubject("Testing Subject");
                message.setText("Dear Mail Crawler," +
                        "\n\n No spam to my email, please!");
    
                Transport.send(message);
    
                System.out.println("Done");
    
            } catch (MessagingException e) {
                throw new RuntimeException(e);
            }
            return 1;
        }
    
        @Override
        protected void onPostExecute(Integer integer) {
            super.onPostExecute(integer);
            progressDialog.dismiss();
        }
    }
    
    0 讨论(0)
  • 2020-11-29 04:15

    Try to use port 465

     private Session createSessionObject()
        {
            Properties properties = new Properties();
            properties.setProperty("mail.smtp.auth", "true");
            properties.setProperty("mail.smtp.starttls.enable", "true");
            properties.setProperty("mail.smtp.host", "smtp.gmail.com");
            properties.setProperty("mail.smtp.port", "465");
    
            return Session.getInstance(properties, new javax.mail.Authenticator()
            {
                protected PasswordAuthentication getPasswordAuthentication()
                {
                    return new PasswordAuthentication(username, password);
                }
            });
        }
    
    0 讨论(0)
  • 2020-11-29 04:16

    Since you say it worked previously, your app should already be having internet permission and other necessary permissions.

    1. Check if the current phone you are trying has proper mobile Data /Internet
    2. If connected via wi-fi, check if any new firewall restriction is not allowing the mail to be sent.
    0 讨论(0)
  • 2020-11-29 04:16

    Here's the code in Kotlin.
    Make sure to enable less secure app access in Gmail. To use secure access you will need to use OAUTH 2.
    read more at: OAuth 2.0 Mechanism

        val username = "username"
        val password = "email@gmail.com"
        try {
            val props = Properties()
            props["mail.smtp.auth"] = "true"
            props["mail.smtp.starttls.enable"] = "true"
            props["mail.smtp.host"] = "smtp.gmail.com"
            props["mail.smtp.port"] = "587"
    
            val session = Session.getInstance(props, object : Authenticator() {
                override fun getPasswordAuthentication(): PasswordAuthentication? {
                    return PasswordAuthentication(username, password)
                }
            })
    
            val message = MimeMessage(session)
            message.setFrom(username)
            message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("email@gmail.com"))
            message.subject = "Automated Violation Detection Email";
            message.setText(
                "Your Text"
                        
            )
    
            Thread {
                Transport.send(message)
            }.start()
        } catch (e: Exception) {
            println("Error: $e")
            showToastLong("Oops! Something Went Wrong! Please Try Again")
        }
    
    0 讨论(0)
提交回复
热议问题