简体   繁体   English

电子邮件发送Android Studio

[英]Email sending Android Studio

i'm trying to add sending email functionality to my android app. 我正在尝试向我的Android应用添加发送电子邮件功能。 I have app which sends email written in eclipse, but I want to move my app to Android Studio. 我有一个应用程序可以发送以Eclipse编写的电子邮件,但是我想将我的应用程序移至Android Studio。 My code is same as in Eclipse, but when i want to send mail, my app stoped working. 我的代码与Eclipse中的代码相同,但是当我想发送邮件时,我的应用程序停止工作。 I'm using mail.jar, activation.jar and additional.jar for this. 我为此使用mail.jar,activation.jar和Additional.jar。

Here is my code: 这是我的代码:

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

I think that i get this error, because Android Studio cant see activation.jar and additional.jar files. 我认为我收到此错误消息是因为Android Studio无法看到activation.jar和Additional.jar文件。 My app stoped working when reached this line: 到达此行时,我的应用程序停止工作:

Message message = new MimeMessage(session);

How should I properly add these jar files to my Android Studio project? 如何将这些jar文件正确添加到我的Android Studio项目中?

EDIT: 编辑:

I resolved this problem by adding lines to build.gradle: 我通过向build.gradle添加行来解决此问题:

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

But now i get errors in log cat when i click 'send email' button: 但是现在当我单击“发送电子邮件”按钮时,在日志猫中出现错误:

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

But when i put my app to tablet, everything is ok, mail is send. 但是,当我将我的应用程序放到平板电脑上时,一切正常,邮件已发送。 How can I test this funcionality in emulator with Android Studio, why i get this error? 如何使用Android Studio在模拟器中测试此功能,为什么会出现此错误? In Eclipse everything is still ok. 在Eclipse中,一切仍然正常。

Here is my SendMailTask code: 这是我的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;
    }
}

The error is caused by line 错误是由线引起的

Transport.send(messages[0]);

1) make sure your android device time is set to current date and time. 1)确保您的android设备时间设置为当前日期和时间。

2) Make sure your antivirus program isn't interfering and be sure to add an exclusion to your firewall. 2)确保您的防病毒程序没有干扰,并确保在防火墙中添加了排除项。

3) try this: 3)试试这个:

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

This is what I use to send emails in Android: 这就是我用来在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..."));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM