Envío de correo electrónico en Android sin utilizar SMTP

Hola, estoy desarrollando una aplicación de Android que enviará correo electrónico al hacer clic en un botón. El código funcionó al principio, pero por alguna razón no funciona ahora. ¿Alguien podría ayudarme con esto? xyz@outlook.com es el destinatario. abc@gmail.com es el remitente. He codificado el tema y el cuerpo del correo.

package com.example.clc_construction; import java.io.File; import java.io.UnsupportedEncodingException; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; 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.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; public class Email extends Activity { public String jobNo; public String teamNo; private static final String username = "abc@gmail.com"; private static final String password = "000000"; private static final String emailid = "xyz@outlook.com"; private static final String subject = "Photo"; private static final String message = "Hello"; private Multipart multipart = new MimeMultipart(); private MimeBodyPart messageBodyPart = new MimeBodyPart(); public File mediaFile; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.camera_screen); Intent intent = getIntent(); jobNo = intent.getStringExtra("Job_No"); teamNo = intent.getStringExtra("Team_No"); sendMail(emailid,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 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 Message createMessage(String email, String subject, String messageBody, Session session) throws MessagingException, UnsupportedEncodingException { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("xzy@outlook.com", "Naveed Qureshi")); message.addRecipient(Message.RecipientType.TO, new InternetAddress(email, email)); message.setSubject(subject); message.setText(messageBody); return message; } public class SendMailTask extends AsyncTask { private ProgressDialog progressDialog; @Override protected void onPreExecute() { super.onPreExecute(); progressDialog = ProgressDialog.show(Email.this, "Please wait", "Sending mail", true, false); } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); progressDialog.dismiss(); } protected Void doInBackground(javax.mail.Message... messages) { try { Transport.send(messages[0]); } catch (MessagingException e) { e.printStackTrace(); } return null; } } } 

Ponga en su archivo manifiesto,

  

comprueba si tienes conexión a internet,

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

y finalmente use este código para enviar correos electrónicos

 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); } 

Como dice que funcionó anteriormente, su aplicación ya debería tener permiso de Internet y otros permisos necesarios.

  1. Comprueba si el teléfono actual que estás intentando tiene datos / Internet móviles correctos
  2. Si está conectado a través de wi-fi, verifique si alguna nueva restricción de firewall no permite que se envíe el correo.

Intenta usar el puerto 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); } }); }