Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo enviar un correo electrónico simple mediante programación? (Existe una manera simple de hacerlo?)

Tengo un campo de texto en mi aplicación, y un botón. Sólo quiero que cuando el usuario pulse el botón, mi aplicación tiene que enviar un correo electrónico con el texto "Hola" a la dirección en el campo de texto.

¿Hay una manera fácil de hacerlo?

  • Android - ¿Cómo abrir la aplicación de correo electrónico?
  • ¿Cómo puedo enviar mensajes de correo electrónico desde mi aplicación de Android?
  • Enviar correo electrónico en Android sin usuario interacton
  • Correo electrónico del almacenamiento interno
  • Cómo obtener la dirección de correo electrónico principal del dispositivo Android
  • Android Facebook SDK 4.X, cómo obtener la dirección de correo electrónico y la clave de acceso de Facebook para pasarla al servicio Web
  • Enviar correo electrónico automático mediante programación
  • Establecer dirección de correo destino en Firebase Invites
  • 4 Solutions collect form web for “¿Cómo enviar un correo electrónico simple mediante programación? (Existe una manera simple de hacerlo?)”

    Si no desea estar vinculado al programa de correo electrónico nativo o al programa de Gmail (a través de la intención) para enviar el correo, pero tenga el correo electrónico enviado en segundo plano, consulte el siguiente código.

    Puede usar esta clase de ayuda y ajustarla a sus necesidades.

    package com.myapp.android.model.service; import android.util.Log; import com.myapp.android.MyApp; import java.util.ArrayList; import java.util.Calendar; import java.util.Properties; import javax.activation.DataHandler; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMultipart; public class MailService { // public static final String MAIL_SERVER = "localhost"; private String toList; private String ccList; private String bccList; private String subject; final private static String SMTP_SERVER = DataService .getSetting(DataService.SETTING_SMTP_SERVER); private String from; private String txtBody; private String htmlBody; private String replyToList; private ArrayList<Attachment> attachments; private boolean authenticationRequired = false; public MailService(String from, String toList, String subject, String txtBody, String htmlBody, Attachment attachment) { this.txtBody = txtBody; this.htmlBody = htmlBody; this.subject = subject; this.from = from; this.toList = toList; this.ccList = null; this.bccList = null; this.replyToList = null; this.authenticationRequired = true; this.attachments = new ArrayList<Attachment>(); if (attachment != null) { this.attachments.add(attachment); } } public MailService(String from, String toList, String subject, String txtBody, String htmlBody, ArrayList<Attachment> attachments) { this.txtBody = txtBody; this.htmlBody = htmlBody; this.subject = subject; this.from = from; this.toList = toList; this.ccList = null; this.bccList = null; this.replyToList = null; this.authenticationRequired = true; this.attachments = attachments == null ? new ArrayList<Attachment>() : attachments; } public void sendAuthenticated() throws AddressException, MessagingException { authenticationRequired = true; send(); } /** * Send an e-mail * * @throws MessagingException * @throws AddressException */ public void send() throws AddressException, MessagingException { Properties props = new Properties(); // set the host smtp address props.put("mail.smtp.host", SMTP_SERVER); props.put("mail.user", from); props.put("mail.smtp.starttls.enable", "true"); // needed for gmail props.put("mail.smtp.auth", "true"); // needed for gmail props.put("mail.smtp.port", "587"); // gmail smtp port /*Authenticator auth = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("mobile@mydomain.com", "mypassword"); } };*/ Session session; if (authenticationRequired) { Authenticator auth = new SMTPAuthenticator(); props.put("mail.smtp.auth", "true"); session = Session.getDefaultInstance(props, auth); } else { session = Session.getDefaultInstance(props, null); } // get the default session session.setDebug(true); // create message Message msg = new javax.mail.internet.MimeMessage(session); // set from and to address try { msg.setFrom(new InternetAddress(from, from)); msg.setReplyTo(new InternetAddress[]{new InternetAddress(from,from)}); } catch (Exception e) { msg.setFrom(new InternetAddress(from)); msg.setReplyTo(new InternetAddress[]{new InternetAddress(from)}); } // set send date msg.setSentDate(Calendar.getInstance().getTime()); // parse the recipients TO address java.util.StringTokenizer st = new java.util.StringTokenizer(toList, ","); int numberOfRecipients = st.countTokens(); javax.mail.internet.InternetAddress[] addressTo = new javax.mail.internet.InternetAddress[numberOfRecipients]; int i = 0; while (st.hasMoreTokens()) { addressTo[i++] = new javax.mail.internet.InternetAddress(st .nextToken()); } msg.setRecipients(javax.mail.Message.RecipientType.TO, addressTo); // parse the replyTo addresses if (replyToList != null && !"".equals(replyToList)) { st = new java.util.StringTokenizer(replyToList, ","); int numberOfReplyTos = st.countTokens(); javax.mail.internet.InternetAddress[] addressReplyTo = new javax.mail.internet.InternetAddress[numberOfReplyTos]; i = 0; while (st.hasMoreTokens()) { addressReplyTo[i++] = new javax.mail.internet.InternetAddress( st.nextToken()); } msg.setReplyTo(addressReplyTo); } // parse the recipients CC address if (ccList != null && !"".equals(ccList)) { st = new java.util.StringTokenizer(ccList, ","); int numberOfCCRecipients = st.countTokens(); javax.mail.internet.InternetAddress[] addressCC = new javax.mail.internet.InternetAddress[numberOfCCRecipients]; i = 0; while (st.hasMoreTokens()) { addressCC[i++] = new javax.mail.internet.InternetAddress(st .nextToken()); } msg.setRecipients(javax.mail.Message.RecipientType.CC, addressCC); } // parse the recipients BCC address if (bccList != null && !"".equals(bccList)) { st = new java.util.StringTokenizer(bccList, ","); int numberOfBCCRecipients = st.countTokens(); javax.mail.internet.InternetAddress[] addressBCC = new javax.mail.internet.InternetAddress[numberOfBCCRecipients]; i = 0; while (st.hasMoreTokens()) { addressBCC[i++] = new javax.mail.internet.InternetAddress(st .nextToken()); } msg.setRecipients(javax.mail.Message.RecipientType.BCC, addressBCC); } // set header msg.addHeader("X-Mailer", "MyAppMailer"); msg.addHeader("Precedence", "bulk"); // setting the subject and content type msg.setSubject(subject); Multipart mp = new MimeMultipart("related"); // set body message MimeBodyPart bodyMsg = new MimeBodyPart(); bodyMsg.setText(txtBody, "iso-8859-1"); if (attachments.size()>0) htmlBody = htmlBody.replaceAll("#filename#",attachments.get(0).getFilename()); if (htmlBody.indexOf("#header#")>=0) htmlBody = htmlBody.replaceAll("#header#",attachments.get(1).getFilename()); if (htmlBody.indexOf("#footer#")>=0) htmlBody = htmlBody.replaceAll("#footer#",attachments.get(2).getFilename()); bodyMsg.setContent(htmlBody, "text/html"); mp.addBodyPart(bodyMsg); // set attachements if any if (attachments != null && attachments.size() > 0) { for (i = 0; i < attachments.size(); i++) { Attachment a = attachments.get(i); BodyPart att = new MimeBodyPart(); att.setDataHandler(new DataHandler(a.getDataSource())); att.setFileName( a.getFilename() ); att.setHeader("Content-ID", "<" + a.getFilename() + ">"); mp.addBodyPart(att); } } msg.setContent(mp); // send it try { javax.mail.Transport.send(msg); } catch (Exception e) { e.printStackTrace(); } } /** * SimpleAuthenticator is used to do simple authentication when the SMTP * server requires it. */ private static class SMTPAuthenticator extends javax.mail.Authenticator { @Override protected PasswordAuthentication getPasswordAuthentication() { String username = DataService .getSetting(DataService.SETTING_SMTP_USER); String password = DataService .getSetting(DataService.SETTING_SMTP_PASSWORD); return new PasswordAuthentication(username, password); } } public String getToList() { return toList; } public void setToList(String toList) { this.toList = toList; } public String getCcList() { return ccList; } public void setCcList(String ccList) { this.ccList = ccList; } public String getBccList() { return bccList; } public void setBccList(String bccList) { this.bccList = bccList; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public void setFrom(String from) { this.from = from; } public void setTxtBody(String body) { this.txtBody = body; } public void setHtmlBody(String body) { this.htmlBody = body; } public String getReplyToList() { return replyToList; } public void setReplyToList(String replyToList) { this.replyToList = replyToList; } public boolean isAuthenticationRequired() { return authenticationRequired; } public void setAuthenticationRequired(boolean authenticationRequired) { this.authenticationRequired = authenticationRequired; } } 

    Y utilice esta clase:

     MailService mailer = new MailService("from@mydomain.com","to@domain.com","Subject","TextBody", "<b>HtmlBody</b>", (Attachment) null); try { mailer.sendAuthenticated(); } catch (Exception e) { Log.e(AskTingTing.APP, "Failed sending email.", e); } 

    Otra opción, si no te importa usar el cliente de correo nativo o gmail en Android para enviar el correo (pero el usuario realmente tiene que pulsar el botón enviar finalmente en el cliente de correo electrónico), puedes hacer esto:

     startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:to@gmail.com")); 

    Añadir Esta línea de código en el botón Enviar

      final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setType("text/plain"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String\[\]{ "serveroverloadofficial@gmail.com"}); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Hello There"); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Add Message here"); emailIntent.setType("message/rfc822"); try { startActivity(Intent.createChooser(emailIntent, "Send email using...")); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(getActivity(), "No email clients installed.", Toast.LENGTH_SHORT).show(); } } }); 

    Android elegirá automáticamente a los clientes disponibles en su dispositivo y el usuario podrá elegir libremente cualquier cliente de correo electrónico que desee

    Intención app chooser

    Suponga que el usuario elija gmail como cliente de correo que se vería así:

    Enviar correo simplemente

    El punto positivo para este método es que no agregas ningún tarro extra en la aplicación y la libertad de usuario para elegir la acción.

    Una cosa más, he utilizado los enfoques dados en varias respuestas de este sitio, pero simplemente no funcionaría. El primer problema fue el firewall: Transport.send(message) lanzaba la siguiente excepción:

      javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465; nested exception is: java.net.SocketTimeoutException: failed to connect to smtp.gmail.com/64.233.184.108 (port 465) after 90000ms 

    Si esto ocurre, el firewall le está bloqueando. Intente una red diferente.

    Después de que haya cambiado de red, he recibido un correo electrónico de Google que ha intentado realizar una solicitud menos segura para usar mi cuenta.

    La solución era habilitar el acceso de GMail para aplicaciones menos seguras. Esto se puede hacer en este enlace:

    https://support.google.com/accounts/answer/6010255?hl=es

      public class MainActivity extends Activity { private static final String username = "emailaddress"; private static final String password = "password"; private EditText emailEdit; private EditText subjectEdit; private EditText messageEdit; private Multipart _multipart; @SuppressLint("SdCardPath") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); emailEdit = (EditText) findViewById(R.id.email); subjectEdit = (EditText) findViewById(R.id.subject); messageEdit = (EditText) findViewById(R.id.message); Button sendButton = (Button) findViewById(R.id.send); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String email = emailEdit.getText().toString(); String subject = subjectEdit.getText().toString(); String message = messageEdit.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(); } } public void addAttachment(String filename) throws Exception { BodyPart messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); _multipart.addBodyPart(messageBodyPart); } private Message createMessage(String email, String subject, String messageBody, Session session) throws MessagingException, UnsupportedEncodingException { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("tutorials@tiemenschut.com", "Tiemen Schut")); 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]); } catch (MessagingException e) { e.printStackTrace(); } return null; } } } 

    Agregue tres archivos jar en su carpeta libs y pruebe este Mail.jar!

    Activation.jar!

    Adicional.jar!

    Escriba el texto del asunto o del cuerpo directamente y elimine edittext y enviará directamente el correo electrónico desde su aplicación.

    Y no te olvides de dar INTERNET PERMISIÓN En su manifiesto

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.