【问题标题】:Android crashes when I want to send an e-mail in my app当我想在我的应用程序中发送电子邮件时,Android 崩溃
【发布时间】:2015-08-10 06:49:40
【问题描述】:

我有一个发送电子邮件的 Android 应用程序。但是当我想发送一封电子邮件时,我的程序完全崩溃了,我得到了错误:

进程:com.example.jonas.shoppinglist,PID:16791 java.lang.RuntimeException:执行 doInBackground() 时发生错误 在 android.os.AsyncTask$3.done(AsyncTask.java:300) 在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 在 java.util.concurrent.FutureTask.setException(FutureTask.java:222) 在 java.util.concurrent.FutureTask.run(FutureTask.java:242) 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 在 java.lang.Thread.run(Thread.java:818) 引起:java.lang.NoClassDefFoundError: javax.activation.DataHandler 在 javax.mail.internet.MimeMessage.setContent(MimeMessage.java:1508) 在 javax.mail.internet.MimeBodyPart.setText(MimeBodyPart.java:1155) 在 javax.mail.internet.MimeMessage.setText(MimeMessage.java:1547) 在 javax.mail.internet.MimeMessage.setText(MimeMessage.java:1531)

现在我显示邮件发送者的代码,问题行是 message.setText("the actual text");

import android.util.Log;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.activation.*;

public class MailSender {

    private String body;

    public void send() {
        // Recipient's email ID needs to be mentioned.
        String to = "abcd@gmail.com";

        // Sender's email ID needs to be mentioned
        String from = "web@gmail.com";

        // Assuming you are sending email from localhost
        String host = "localhost";

        // Get system properties
        Properties properties = System.getProperties();

        // Setup mail server
        properties.setProperty("mail.smtp.host", host);

        // Get the default Session object.
        Session session = Session.getDefaultInstance(properties);

        try {
            // Create a default MimeMessage object.
            MimeMessage message = new MimeMessage(session);

            // Set From: header field of the header.
            message.setFrom(new InternetAddress(from));

            // Set To: header field of the header.
            message.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(to));

            // Set Subject: header field
            message.setSubject("This is the Subject Line!");

            // Now set the actual message
            message.setText("This is actual message");

            // Send message
            Transport.send(message);
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

我已经做了一些研究,人们说这是一个 gradle 问题,但我认为我有所有需要的依赖项。 这是我的 gradle 依赖:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.google.android.gms:play-services-gcm:7.3.0'
    compile 'javax.activation:activation:1.1'
    compile 'javax.mail:mail:1.5.0-b01'
    compile 'javax.activation:activation:1.1.1'
}

出了什么问题?

【问题讨论】:

  • 仅供参考,你有两次 javax.activation ;一次就足够了。而且您使用的是旧版本的 JavaMail;当前版本是 1.5.4。但由于 Android 并不是真正的 Java,因此您可能需要下面答案中的杂乱无章的版本。

标签: java android email jakarta-mail


【解决方案1】:

您正在使用可能不适合 Android 的 Java 库 (javax.mail:mail:1.5.0-b01)。 javamail有一个Android版本: https://code.google.com/p/javamail-android/ 你应该试试看。不要指望所有适用于 Java 的库都适用于 Android。

【讨论】:

  • 那我该如何导入呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
相关资源
最近更新 更多