Я пытаюсь добавить функцию отправки электронной почты в свое приложение для 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]);
Wich ошибку вы получаете? Вы должны, конечно, разместить LogCat. – greenapps
Я редактирую свой вопрос. Теперь у меня другая проблема с отправкой писем. – porgo
Просьба прокомментировать исключения, упомянутые в логарифме в первую очередь. Различные версии Android? Лучше упомянуть об этом исключении в теме. И скажите, какая строка кода вызывает исключение. Строка 100, как указано. – greenapps