首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.NoClassDefFoundError: javax.activation.DataHandler

java.lang.NoClassDefFoundError: javax.activation.DataHandler
EN

Stack Overflow用户
提问于 2013-11-16 23:37:46
回答 2查看 9.2K关注 0票数 1

我在我的android项目中遇到了一个问题,基本上我正在尝试发送一封电子邮件,但得到了错误:

代码语言:javascript
复制
public class ConnectEmail {
    private Session session;
    private Properties properties;
    private final String password;
    private final String username;

    public ConnectEmail(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public boolean getSession() {
        boolean result = false;
        properties = getProperties();
        try {
            session = Session.getDefaultInstance(properties,
                    new javax.mail.Authenticator() {
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(username,
                                    password);
                        }
                    });
            Log.i("Check", "Got session");
            result = true;
        } catch (Exception e) {
            System.out.println(e.toString() + "Session: Unknown Exception");
        }

        return result;
    }

    public Properties getProperties() {

        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");
        Log.i("Check", "Got properties");
        return props;
    }

    public void sendEmail(String recipients, String subject, String content) {
        String finalString = "";

        boolean result = getSession();

        if (result) {
            try {
                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress(username));
                message.setDataHandler(handler);
                Log.i("Check", "creating message");

                message.setRecipients(Message.RecipientType.TO,
                        InternetAddress.parse(recipients));
                message.setSubject(subject);
                message.setText(content);

                 Log.i("check", "transport");
                    Transport transport = session.getTransport("smtp");
                    Log.i("check", "connecting");
                    transport.connect("smtp.gmail.com",username , password);
                    Log.i("check", "wana send");
                    transport.sendMessage(message, message.getAllRecipients());
                    transport.close();

                    Log.i("check", "sent");



            } catch (MessagingException e) {
                throw new RuntimeException(e);

        }} else
            System.out.println("Invalid session...");

    }
}

我的LogCat说:

代码语言:javascript
复制
11-16 15:33:38.000: E/AndroidRuntime(19426): FATAL EXCEPTION: main
11-16 15:33:38.000: E/AndroidRuntime(19426): java.lang.NoClassDefFoundError: javax.activation.DataHandler
11-16 15:33:38.000: E/AndroidRuntime(19426):    at javax.mail.internet.MimeMessage.setContent(MimeMessage.java:1454)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at javax.mail.internet.MimeBodyPart.setText(MimeBodyPart.java:1075)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at javax.mail.internet.MimeMessage.setText(MimeMessage.java:1493)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at javax.mail.internet.MimeMessage.setText(MimeMessage.java:1477)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at com.example.emailontime.control.ConnectEmail.sendEmail(ConnectEmail.java:83)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at com.example.emailontime.activities.LoginActivity$1.onClick(LoginActivity.java:45)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at android.view.View.performClick(View.java:4211)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at android.view.View$PerformClick.run(View.java:17362)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at android.os.Handler.handleCallback(Handler.java:725)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at android.os.Handler.dispatchMessage(Handler.java:92)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at android.os.Looper.loop(Looper.java:137)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at android.app.ActivityThread.main(ActivityThread.java:5227)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at java.lang.reflect.Method.invokeNative(Native Method)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at java.lang.reflect.Method.invoke(Method.java:511)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
11-16 15:33:38.000: E/AndroidRuntime(19426):    at dalvik.system.NativeStart.main(Native Method)

我看到了一些问题,人们通常会说问题出在构建路径上,我试图重新安装mail.jar,清理项目,但什么都没有。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-03-08 06:04:58

Android不是Java。请向谷歌投诉。告诉他们Android应该是Java兼容的。

同时,如果您已经将additionnal.jaractivation.jar添加到您的应用程序中(如here所述),但它仍然不起作用,那么您做错了什么。

票数 3
EN

Stack Overflow用户

发布于 2015-07-15 17:15:36

更新:

安卓https://java.net/projects/javamail/pages/Android官方JavaMail

旧的非官方版本:用于安卓https://code.google.com/p/javamail-android/的Javamail

谢谢Bill Shannon

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20020270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档