2016-08-13 3 views
2

Я пытаюсь добавить функцию отправки электронной почты в свое приложение для Android. У меня есть приложение, которое отправляет письмо, написанное в eclipse, но я хочу перенести приложение в Android Studio. Мой код такой же, как в Eclipse, но когда я хочу отправить почту, мое приложение перестало работать. Для этого я использую mail.jar, activation.jar и дополнительный.jar.Отправка электронной почты Android Studio

Вот мой код:

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-студия не может видеть activation.jar и additional.jar файлы. Мое приложение прекратило работу, когда достигло этой линии:

Message message = new MimeMessage(session); 

Как правильно добавить эти файлы jar в проект Android Studio?

EDIT:

Я решил эту проблему путем добавления строк в build.gradle:

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

Но теперь я получаю ошибки в лог-кошки, когда я нажимаю 'Отправить сообщение' кнопку:

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]); 
+0

Wich ошибку вы получаете? Вы должны, конечно, разместить LogCat. – greenapps

+0

Я редактирую свой вопрос. Теперь у меня другая проблема с отправкой писем. – porgo

+0

Просьба прокомментировать исключения, упомянутые в логарифме в первую очередь. Различные версии Android? Лучше упомянуть об этом исключении в теме. И скажите, какая строка кода вызывает исключение. Строка 100, как указано. – greenapps

ответ

0

1) Убедитесь, что ваше андроид время устройства устанавливаются на текущую дату и время.

2) Убедитесь, что ваша антивирусная программа не мешает и не забудьте добавить исключение в свой брандмауэр.

3) попробуйте это:

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

Все еще без успеха. Это странно, потому что в Eclipse все в порядке, а проблемы с Android Studio. – porgo

0

Это то, что я использую для отправки электронной почты в 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...")); 
+0

Это не совсем то, что я хочу сделать. Я хочу отправлять письма в фоновом режиме, без какого-либо взаимодействия с пользователем. – porgo

Смежные вопросы