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


¿Hay algún buen ejemplo de código corto que simplemente lea un nuevo mensaje de Gmail?

He estado tratando de escribir una aplicación que periódicamente analiza el contenido de los mensajes de gmail. He estado a través de las preguntas frecuentes de JavaMail y he visto varios ejemplos en el paquete de descarga de JavaMail pero no he podido conseguir que esto funcione. El código de abajo provoca actualmente el siguiente error de Gmail:

El host no está resuelto: imaps.gmail.com:993

También he intentado imap.gmail.com:143 pero obtengo:

El host no está resuelto: imap.gmail.com:143

Cualquier ayuda o consejo sería muy apreciada. GMailReader es la clase que estoy usando para intentar y devolver mensajes de imap de gmail:

public class GMailReader extends javax.mail.Authenticator { private String mailhost = "imaps.gmail.com"; private String user; private String password; private Session session; public GMailReader(String user, String password) { this.user = user; this.password = password; Properties props = new Properties(); props.setProperty("mail.transport.protocol", "imaps"); props.setProperty("mail.imaps.host", mailhost); props.put("mail.imaps.auth", "true"); props.put("mail.imaps.port", "993"); props.put("mail.imaps.socketFactory.port", "993"); props.put("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.imaps.socketFactory.fallback", "false"); props.setProperty("mail.imaps.quitwait", "false"); session = Session.getDefaultInstance(props, this); } public synchronized Message[] readMail() throws Exception { try { Store store = session.getStore("imaps"); store.connect("imaps.gmail.com", user, password); Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message[] msgs = folder.getMessages(1, 10); FetchProfile fp = new FetchProfile(); fp.add(FetchProfile.Item.ENVELOPE); folder.fetch(msgs, fp); return msgs; } catch (Exception e) { Log.e("readMail", e.getMessage(), e); return null; } } } 

  • No puedo enviar Yahoo Mail desde Java Mail Api
  • El contenedor de este archivo de clase pertenece al contenedor 'Dependencias de Android', que no permite modificaciones de archivos adjuntos de origen en sus entradas
  • Autenticación de Gmail Imap con AccountManager
  • Envío de correo electrónico en Android mediante API de JavaMail sin usar la aplicación predeterminada / incorporada
  • JavaMail - Análisis de contenido de correo electrónico, no puede parecer que lo haga funcionar! (Message.getContent ())
  • ¿Utilizar javamail para enviar desde hotmail?
  • Javamail api en android usando XOauth
  • Enviar correo electrónico en android utilizando API de JavaMail con smtp pero sin SSL
  • 4 Solutions collect form web for “¿Hay algún buen ejemplo de código corto que simplemente lea un nuevo mensaje de Gmail?”

    Encontré un ejemplo aquí que fue útil. Mi error fue el uso de "mail.transport.protocol" en lugar de "mail.store.protocol".

    En adelante una versión corregida de

     public class GMailReader extends javax.mail.Authenticator { private static final String TAG = "GMailReader"; private String mailhost = "imap.gmail.com"; private Session session; private Store store; public GMailReader(String user, String password) { Properties props = System.getProperties(); if (props == null){ Log.e(TAG, "Properties are null !!"); }else{ props.setProperty("mail.store.protocol", "imaps"); Log.d(TAG, "Transport: "+props.getProperty("mail.transport.protocol")); Log.d(TAG, "Store: "+props.getProperty("mail.store.protocol")); Log.d(TAG, "Host: "+props.getProperty("mail.imap.host")); Log.d(TAG, "Authentication: "+props.getProperty("mail.imap.auth")); Log.d(TAG, "Port: "+props.getProperty("mail.imap.port")); } try { session = Session.getDefaultInstance(props, null); store = session.getStore("imaps"); store.connect(mailhost, user, password); Log.i(TAG, "Store: "+store.toString()); } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public synchronized Message[] readMail() throws Exception { try { Folder folder = store.getFolder("Inbox"); folder.open(Folder.READ_ONLY); /* TODO to rework Message[] msgs = folder.getMessages(1, 10); FetchProfile fp = new FetchProfile(); fp.add(FetchProfile.Item.ENVELOPE); folder.fetch(msgs, fp); */ Message[] msgs = folder.getMessages(); return msgs; } catch (Exception e) { Log.e("readMail", e.getMessage(), e); return null; } } } 

    Adiós

    Veo que el concepto de GmailReader muy útil y bien diseñado de acuerdo con el ejemplo de GmailSender mostró aquí: Envío de correo electrónico en Android utilizando JavaMail API sin usar la aplicación predeterminada / incorporada

    Pero ¿Alguna noticia, sobre el error preguntado abajo? Y la implementación de la proposición de JackN?

    Saludos cordiales SkN

    Después de una cantidad enorme de prueba, error y google, la edición de snakeman de esta respuesta proporcionó el ejemplo práctico que necesitaba para un lector de gmail;

    Sin embargo, los demás deben tener en cuenta (si se utilizan versiones posteriores del SDK de Android) los requisitos de permisos de manifiesto y la necesidad de utilizar asyncTask para mover potencialmente las tareas de ejecución larga fuera del subproceso de interfaz de usuario principal), ambos mencionados en este ejemplo de SMTP

    También debo mencionar que si, al igual que yo, tiene la intención de implementar una clase de envío smtp, he visto en algún lugar una discusión sugiriendo que session.getInstance debe utilizarse en lugar de session.getDefaultInstance.

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