【问题标题】:javamail android fecthing emails?javamail android 发送电子邮件?
【发布时间】:2017-10-17 04:34:59
【问题描述】:

我浪费了至少 4 个小时来研究能够找到的东西。我有一个在登录屏幕后启动的主菜单活动。我想要一个网格视图或列表视图类型的东西得到更新并通过列出它来显示收件箱邮件,如果你点击其中一个,一个新活动将启动并在 textview 上显示电子邮件的发件人、主题和正文等信息。

这是我找到的来源之一:Are there any good short code examples that simply read a new gmail message? 尝试了两个答案,包括 OP 提供的答案和回答问题的人。他们都没有工作,为什么?

错误信息:

05-16 18:35:55.965 1741-1741/app.mailbox E/readMail: Not connected
                                                     java.lang.IllegalStateException: Not connected
                                                         at com.sun.mail.imap.IMAPStore.checkConnected(IMAPStore.java:1992)
                                                         at com.sun.mail.imap.IMAPStore.getFolder(IMAPStore.java:1775)
                                                         at app.mailbox.GMailReader.readMail(GMailReader.java:58)
                                                         at app.mailbox.Menu.onCreate(Menu.java:32)
                                                         at android.app.Activity.performCreate(Activity.java:6679)
                                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                         at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                         at android.os.Looper.loop(Looper.java:154)
                                                         at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
05-16 18:35:56.029 1741-1780/app.mailbox E/EGL_emulation: tid 1780: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)

这是把一些事情做对后的代码:

   package app.mailbox;

import android.util.Log;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;

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 = new Properties();
        props.setProperty("mail.store.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");

        if (props == null){
            Log.e(TAG, "Properties are null !!");
        }else{

            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) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

    public synchronized Message[] readMail() throws Exception {
        try {
            Folder folder = store.getFolder("Inbox");
            folder.open(Folder.READ_ONLY);
            Message[] msgs = folder.getMessages();
            return msgs;
        } catch (Exception e) {
            Log.e("readMail", e.getMessage(), e);
            return null;
        }
    }
}

从我想列出邮件的活动中调用此类时,我还需要使用异步任务吗?

【问题讨论】:

    标签: android email jakarta-mail fetch


    【解决方案1】:

    复制和粘贴编程的问题在于您正在复制所有错误。首先修复这些common JavaMail mistakes。您可以在JavaMail FAQ 中找到一般的 Gmail 说明。我无法判断您是否成功连接,因为即使连接失败,GMailReader 构造函数也会成功返回。你可能想看看JavaMail debug output

    【讨论】:

    • 是的,你完全正确。我这样做的原因是时间有点短。也有点我无法在任何地方找到任何教程或工作示例。会保持更新,再次感谢
    • JavaMail FAQJavaMail web site 中有大量基本的 JavaMail 示例。
    猜你喜欢
    • 2012-04-27
    • 2015-04-22
    • 2018-12-18
    • 1970-01-01
    • 2012-03-16
    • 2021-12-11
    • 1970-01-01
    • 2014-07-26
    相关资源
    最近更新 更多