【问题标题】:Email sending Android Studio电子邮件发送 Android Studio
【发布时间】:2016-12-20 11:29:27
【问题描述】:

我正在尝试将发送电子邮件功能添加到我的 Android 应用程序。我有发送用 eclipse 编写的电子邮件的应用程序,但我想将我的应用程序移动到 Android Studio。我的代码与 Eclipse 中的代码相同,但是当我想发送邮件时,我的应用程序停止工作。我为此使用了 mail.jar、activation.jar 和 additional.jar。

这是我的代码:

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();
    }
}

private Message createMessage(String email, String subject, String messageBody, Session session) throws MessagingException, UnsupportedEncodingException {
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress(from, senderName));
    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;
    }
}

我认为我收到了这个错误,因为 Android Studio 看不到activation.jar 和additional.jar 文件。到达此行时,我的应用程序停止工作:

Message message = new MimeMessage(session);

我应该如何正确地将这些 jar 文件添加到我的 Android Studio 项目中?

编辑:

我通过在 build.gradle 中添加行解决了这个问题:

compile files('libs/mail.jar')
compile files('libs/additionnal.jar')
compile files('libs/activation.jar')

但是现在当我点击“发送电子邮件”按钮时,我在 log cat 中收到错误:

08-13 18:39:47.497 19034-20338/krzosik.mailsenderapp W/System.err: javax.mail.MessagingException: Could not convert socket to TLS;
08-13 18:39:47.510 19034-20338/krzosik.mailsenderapp W/System.err:   nested exception is:
08-13 18:39:47.511 19034-20338/krzosik.mailsenderapp W/System.err:  javax.net.ssl.SSLHandshakeException: Connection closed by peer
08-13 18:39:47.512 19034-20338/krzosik.mailsenderapp W/System.err:     at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1339)
08-13 18:39:47.513 19034-20338/krzosik.mailsenderapp W/System.err:     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:420)
08-13 18:39:47.513 19034-20338/krzosik.mailsenderapp W/System.err:     at javax.mail.Service.connect(Service.java:310)
08-13 18:39:47.513 19034-20338/krzosik.mailsenderapp W/System.err:     at javax.mail.Service.connect(Service.java:169)
08-13 18:39:47.513 19034-20338/krzosik.mailsenderapp W/System.err:     at javax.mail.Service.connect(Service.java:118)
08-13 18:39:47.514 19034-20338/krzosik.mailsenderapp W/System.err:     at javax.mail.Transport.send0(Transport.java:188)
08-13 18:39:47.514 19034-20338/krzosik.mailsenderapp W/System.err:     at javax.mail.Transport.send(Transport.java:118)
08-13 18:39:47.514 19034-20338/krzosik.mailsenderapp W/System.err:     at krzosik.mailsenderapp.MainActivity$SendMailTask.doInBackground(MainActivity.java:100)
08-13 18:39:47.514 19034-20338/krzosik.mailsenderapp W/System.err:     at krzosik.mailsenderapp.MainActivity$SendMailTask.doInBackground(MainActivity.java:82)
08-13 18:39:47.515 19034-20338/krzosik.mailsenderapp W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:292)
08-13 18:39:47.515 19034-20338/krzosik.mailsenderapp W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-13 18:39:47.515 19034-20338/krzosik.mailsenderapp W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-13 18:39:47.515 19034-20338/krzosik.mailsenderapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-13 18:39:47.516 19034-20338/krzosik.mailsenderapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-13 18:39:47.516 19034-20338/krzosik.mailsenderapp W/System.err:     at java.lang.Thread.run(Thread.java:818)
08-13 18:39:47.516 19034-20338/krzosik.mailsenderapp W/System.err: Caused by: javax.net.ssl.SSLHandshakeException: Connection closed by peer
08-13 18:39:48.009 19034-19041/krzosik.mailsenderapp W/art: Suspending all threads took: 199.811ms
08-13 18:39:48.032 19034-20338/krzosik.mailsenderapp W/System.err:     at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
08-13 18:39:48.032 19034-20338/krzosik.mailsenderapp W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:318)
08-13 18:39:48.032 19034-20338/krzosik.mailsenderapp W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.waitForHandshake(OpenSSLSocketImpl.java:623)
08-13 18:39:48.033 19034-20338/krzosik.mailsenderapp W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:585)
08-13 18:39:48.033 19034-20338/krzosik.mailsenderapp W/System.err:     at com.sun.mail.smtp.SMTPTransport.initStreams(SMTPTransport.java:1449)
08-13 18:39:48.033 19034-20338/krzosik.mailsenderapp W/System.err:     at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1336)
08-13 18:39:48.034 19034-20338/krzosik.mailsenderapp W/System.err:  ... 14 more

但是当我将我的应用程序放到平板电脑上时,一切正常,邮件已发送。如何使用 Android Studio 在模拟器中测试此功能,为什么会出现此错误?在 Eclipse 中一切正常。

这是我的 SendMailTask​​ 代码:

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;
    }
}

错误是由线路引起的

Transport.send(messages[0]);

【问题讨论】:

  • 您遇到什么错误?你当然应该发布 LogCat。
  • 我编辑我的问题。现在我在发送电子邮件时遇到了另一个问题。
  • 请先评论一下logcat中提到的异常。不同的安卓版本?您最好在主题中提及该异常。并告诉哪个代码行导致异常。如前所述,第 100 行。
  • 并捕获该异常,以免您的应用崩溃。
  • 哦,我现在意识到只有模拟器会给出这个异常。然后在主题中也提到这一点并以此开始您的帖子。

标签: java android email android-studio jar


【解决方案1】:

1) 确保您的 android 设备时间设置为当前日期和时间。

2) 确保您的防病毒程序没有干扰,并确保将排除项添加到您的防火墙。

3) 试试这个:

properties.put("mail.smtp.ssl.trust", "smtp.gmail.com");

【讨论】:

  • 仍然没有成功。这很奇怪,因为在 Eclipse 中一切正常,而问题出在 Android Studio。
【解决方案2】:

这是我在 Android 中用来发送电子邮件的:

        Intent i = new Intent(Intent.ACTION_SEND);
        i.setType("message/rfc822");
        i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"EMAIL"});
        i.putExtra(Intent.EXTRA_SUBJECT, "SUBJECT");
        i.putExtra(Intent.EXTRA_TEXT   , "BODY");
        startActivity(Intent.createChooser(i, "Send mail..."));

【讨论】:

  • 这不是我想要做的。我想在后台发送电子邮件,而不与用户进行任何交互。
猜你喜欢
  • 2021-12-18
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 2014-02-23
  • 2014-01-15
  • 1970-01-01
相关资源
最近更新 更多