Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/47: Рейтинг темы: голосов - 47, средняя оценка - 4.74
 Аватар для moverast
8 / 10 / 0
Регистрация: 30.04.2011
Сообщений: 199

Отправка электронной почты из приложения (без почтового клиента)

12.12.2019, 05:27. Показов 9643. Ответов 17

Студворк — интернет-сервис помощи студентам
Сразу уточню, что я нуб.

Хочу передать себе данные анкеты из приложения. Кроме email ничего удобного не вижу. Перечитал кучу статей по отправке электронной почты, но они все устарели и много не сходится.

Понял, что нужна библиотека "javax.mail.jar". Её скачал. Как подключается она в Android Studio 3.5? "File - Project structure - New module (плюс) - Import .JAR/.AAR Package" - это верные действия?

Далее как ей воспользоваться? Прошу объяснение для чайника, ибо статьи я читал и пробовал самостоятельно. Ничего не вышло.

PS: неужели для Android нет встроенных средств отправки электронной почты? Это так странно...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2019, 05:27
Ответы с готовыми решениями:

Отправка из приложения сообщений электронной почты с вложением
Здравствуйте. Хотелось бы спросить, как можно реализовать отправку сообщений электронной почты прямо из приложения. Ну что-то типа...

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

Отправка писем без почтового клиента (не отправляет)
Имеется форма с 3мя TextBox-ами (1 ввод email-а отправителя; 2 пароль к ящику; 3 тема сообщения), 1 - RichTextBox (тело письма), и кнопкой,...

17
4 / 3 / 1
Регистрация: 27.10.2010
Сообщений: 67
12.12.2019, 07:37
Лучший ответ Сообщение было отмечено moverast как решение

Решение

Добрый день, вот мой работающий проект для отправки на почту mail :

Activity_main.xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"  tools:context=".MainActivity">
 
    <TextView
        android:text="Recipient Email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextEmail" />
    <TextView
        android:text="Subject"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextSubject" />
    <TextView
        android:text="Message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:lines="4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextMessage" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/buttonSend"
        android:text="Send"/>
</LinearLayout>
MainActivity.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package com.example.myapplication;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
 
import java.util.Properties;
 
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    //Declaring EditText
    private EditText editTextEmail;
    private EditText editTextSubject;
    private EditText editTextMessage;
 
    //Send button
    private Button buttonSend;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        //Initializing the views
        editTextEmail = (EditText) findViewById(R.id.editTextEmail);
        editTextSubject = (EditText) findViewById(R.id.editTextSubject);
        editTextMessage = (EditText) findViewById(R.id.editTextMessage);
 
        buttonSend = (Button) findViewById(R.id.buttonSend);
 
        //Adding click listener
        buttonSend.setOnClickListener(this);
    }
 
 
    private void sendEmail() {
        //Getting content for email
        String email = editTextEmail.getText().toString().trim();
        String subject = editTextSubject.getText().toString().trim();
        String message = editTextMessage.getText().toString().trim();
 
        //Creating SendMail object
        SendMail sm = new SendMail(this, email, subject, message);
 
        //Executing sendmail to send email
        sm.execute();
    }
 
    @Override
    public void onClick(View v) {
        sendEmail();
    }
}
SendMail.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.example.myapplication;
 
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;
 
import java.util.Properties;
 
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
/**
 * Created by Belal on 10/30/2015.
 */
 
//Class is extending AsyncTask because this class is going to perform a networking operation
public class SendMail extends AsyncTask<Void,Void,Void> {
 
    //Declaring Variables
    private Context context;
    private Session session;
 
    //Information to send email
    private String email;
    private String subject;
    private String message;
 
    //Progressdialog to show while sending email
    private ProgressDialog progressDialog;
 
    //Class Constructor
    public SendMail(Context context, String email, String subject, String message){
        //Initializing variables
        this.context = context;
        this.email = email;
        this.subject = subject;
        this.message = message;
    }
 
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //Showing progress dialog while sending email
        progressDialog = ProgressDialog.show(context,"Sending message","Please wait...",false,false);
    }
 
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        //Dismissing the progress dialog
        progressDialog.dismiss();
        //Showing a success message
        Toast.makeText(context,"Message Sent",Toast.LENGTH_LONG).show();
    }
 
    @Override
    protected Void doInBackground(Void... params) {
        //Creating properties
        Properties props = new Properties();
 
 
//Протоколы для mail
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.host", "smtp.mail.ru");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.debug", "true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", 2525);
 
 
 
        //Creating a new session
        session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {
                    //Authenticating the password
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(Config.EMAIL, Config.PASSWORD);
                    }
                });
 
        try {
            //Creating MimeMessage object
            MimeMessage mm = new MimeMessage(session);
 
            //Setting sender address
            mm.setFrom(new InternetAddress(Config.EMAIL));
            //Adding receiver
            mm.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
            //Adding subject
            mm.setSubject(subject);
            //Adding message
            mm.setText(message);
 
            //Sending email
            Transport.send(mm);
 
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return null;
    }
}
Config.java

Java
1
2
3
4
5
6
7
package com.example.myapplication;
 
public class Config
{
    public static final String EMAIL ="Вписываем почту с которой отправляем сообщение";
    public static final String PASSWORD ="пороль от почты";
}
Ну и конечно вам нужно добавить 3 файла в Depencies : activation, additionnal, mail у всех разрешение jar
Для этого откройте структуру проекта, в каталоге app создайте каталог libs и в него загрузите файлы после этого в gradle пропишите в разделе dependencies следующие строки :
implementation files('libs\\activation.jar')
implementation files('libs\\additionnal.jar')
implementation files('libs\\mail.jar')

Если самостоятельно не найдете файлы то пиши в личку скину
1
 Аватар для moverast
8 / 10 / 0
Регистрация: 30.04.2011
Сообщений: 199
12.12.2019, 11:00  [ТС]
Цитата Сообщение от Makkusiik Посмотреть сообщение
Добрый день, вот мой работающий проект для отправки на почту mail :
проект запустился. Это уже хорошо. Но почта не ходит.

Ошибка:
Кликните здесь для просмотра всего текста
W/System.err: javax.mail.MessagingException: Could not connect to SMTP host: smtp.yandex.ru, port: 465;
nested exception is:
java.net.SocketException: socket failed: EPERM (Operation not permitted)
at com.sun.mail.smtp.SMTPTransport.openServ er(SMTPTransport.java:1391)
at com.sun.mail.smtp.SMTPTransport.protocol Connect(SMTPTransport.java:412)
at javax.mail.Service.connect(Service.java: 310)
at javax.mail.Service.connect(Service.java: 169)
at javax.mail.Service.connect(Service.java: 118)
at javax.mail.Transport.send0(Transport.jav a:188)
at javax.mail.Transport.send(Transport.java :118)
at ru.moversoft.emailtest.SendMail.doInBack ground(SendMail.java:98)
at ru.moversoft.emailtest.SendMail.doInBack ground(SendMail.java:23)
at android.os.AsyncTask$3.call(AsyncTask.ja va:378)
at java.util.concurrent.FutureTask.run(Futu reTask.java:266)
W/System.err: at android.os.AsyncTask$SerialExecutor$1.ru n(AsyncTask.java:289)
at java.util.concurrent.ThreadPoolExecutor. runWorker(ThreadPoolExecutor.java:1167)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.net.SocketException: socket failed: EPERM (Operation not permitted)
at java.net.Socket.createImpl(Socket.java:4 92)
at java.net.Socket.connect(Socket.java:619)
at java.net.Socket.connect(Socket.java:570)
W/System.err: at com.sun.mail.util.SocketFetcher.createSo cket(SocketFetcher.java:233)
W/System.err: at com.sun.mail.util.SocketFetcher.getSocke t(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServ er(SMTPTransport.java:1359)


Мои Properties:
Java
1
2
3
4
5
6
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.host", "smtp.yandex.ru");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.debug", "true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");
Пробовал менять на сервера google
Пробовал убирать mail.debug
Прописал <uses-permission android:name="android.permission.INTERNE T" />
Не работает. ЧЯДНТ?
0
 Аватар для moverast
8 / 10 / 0
Регистрация: 30.04.2011
Сообщений: 199
13.12.2019, 06:28  [ТС]
Всё работает! Добавлю пару мелочей:
1. Нужно обязательно <uses-permission android:name="android.permission.INTERNE T" />
2. props.put("mail.debug", "true"); можно убрать
3. implementation files('libs\\activation.jar') можно не прописывать. все файлы из libs автоматически подцепляются.
0
0 / 0 / 0
Регистрация: 14.04.2020
Сообщений: 2
11.07.2020, 16:51
не работает этот код. Я так понимаю google блокирует.
0
 Аватар для moverast
8 / 10 / 0
Регистрация: 30.04.2011
Сообщений: 199
25.02.2021, 10:59  [ТС]
Начиная с API 30 этот код перестает работать. Что нужно исправить?

Немного информации из студии:
'android.os.AsyncTask' is deprecated

android.os @Deprecated
public abstract class AsyncTask<Params, Progress, Result>
extends Object
AsyncTask was intended to enable proper and easy use of the UI thread. However, the most common use case was for integrating into UI, and that would cause Context leaks, missed callbacks, or crashes on configuration changes. It also has inconsistent behavior on different versions of the platform, swallows exceptions from doInBackground, and does not provide much utility over using Executors directly.
AsyncTask is designed to be a helper class around Thread and Handler and does not constitute a generic threading framework. AsyncTasks should ideally be used for short operations (a few seconds at the most.) If you need to keep threads running for long periods of time, it is highly recommended you use the various APIs provided by the java.util.concurrent package such as Executor, ThreadPoolExecutor and FutureTask.
An asynchronous task is defined by a computation that runs on a background thread and whose result is published on the UI thread. An asynchronous task is defined by 3 generic types, called Params, Progress and Result, and 4 steps, called onPreExecute, doInBackground, onProgressUpdate and onPostExecute.
0
400 / 343 / 85
Регистрация: 17.10.2014
Сообщений: 1,014
25.02.2021, 11:08
Цитата Сообщение от moverast Посмотреть сообщение
'android.os.AsyncTask' is deprecated
deprecated не значит что код с использованием AsyncTask перестанет работать.
если что то и сломалось, то AsyncTask тут явно не виновен, при условии что раньше все работало.
1
 Аватар для moverast
8 / 10 / 0
Регистрация: 30.04.2011
Сообщений: 199
25.02.2021, 11:10  [ТС]
Цитата Сообщение от androbro Посмотреть сообщение
deprecated не значит что код с использованием AsyncTask перестанет работать.
если что то и сломалось, то AsyncTask тут явно не виновен, при условии что раньше все работало.
Действительно. Хоть студия и перечеркивает код, но он всё равно работает. Ладно. Привыкну)
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
25.02.2021, 11:30
Цитата Сообщение от androbro Посмотреть сообщение
код с использованием AsyncTask перестанет работать
Спорное утверждение, учитывая, что там в коде даже не проверяется контекст. AsyncTask изначально нельзя было использовать.
0
400 / 343 / 85
Регистрация: 17.10.2014
Сообщений: 1,014
25.02.2021, 12:03
Цитата Сообщение от ExFau$t Посмотреть сообщение
Спорное утверждение, учитывая, что там в коде даже не проверяется контекст
ну так я код не смотрел, поэтому и сделал акцент на этом:
Цитата Сообщение от androbro Посмотреть сообщение
при условии что раньше все работало.
посыл моего сообщение был в том что deprecated != нерабочий
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
25.02.2021, 14:10
Цитата Сообщение от androbro Посмотреть сообщение
посыл моего сообщение был в том что deprecated != нерабочий
Да, но и нельзя утверждать, что deprecated будет работать как и раньше всегда, он может не приводить к ошибке компиляции, а кидать исключение в рантайме или просто не работать. Как, например, getExternalStorageDirectory() на 10м андроиде. Ну а от AsyncTask ещё и до deprecated всё давным давно избавились.
0
 Аватар для moverast
8 / 10 / 0
Регистрация: 30.04.2011
Сообщений: 199
25.02.2021, 14:53  [ТС]
Цитата Сообщение от ExFau$t Посмотреть сообщение
AsyncTask изначально нельзя было использовать.
сложно переделать код без AsyncTask?
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
25.02.2021, 15:23
Откуда нам знать, что для тебя сложно, а что нет.
0
 Аватар для moverast
8 / 10 / 0
Регистрация: 30.04.2011
Сообщений: 199
25.02.2021, 15:30  [ТС]
Логично. Надо просто пробовать. Что нужно переделать в классе SendMail.java?
0
25.02.2021, 16:07

Не по теме:

Цитата Сообщение от ExFau$t Посмотреть сообщение
Как, например, getExternalStorageDirectory()
ну там это было сделано, для "improve user privacy".
проблема AsyncTask же в том что люди его неправильно юзали и он неявно тащил с собой контекст, что приводило к утечке памяти.
ИМХО: выпиливать и ломать backwards compatibility они из за этого не станут.

0
 Аватар для moverast
8 / 10 / 0
Регистрация: 30.04.2011
Сообщений: 199
14.10.2024, 14:25  [ТС]
Добавлено через 2 минуты
Цитата Сообщение от Makkusiik Посмотреть сообщение
Добрый день, вот мой работающий проект для отправки на почту mail :
Что-то изменилось видимо. Этот код перестал работать. Несколько лет проработал и перестал. Ошибки никакие не выдает
0
400 / 343 / 85
Регистрация: 17.10.2014
Сообщений: 1,014
15.10.2024, 12:46
Цитата Сообщение от moverast Посмотреть сообщение
Ошибки никакие не выдает
пробежитесь по коду отладчиком, если такая возможность есть.
0
 Аватар для moverast
8 / 10 / 0
Регистрация: 30.04.2011
Сообщений: 199
16.10.2024, 14:05  [ТС]
Победил проблему с отправкой электронной почты. Сделал через "javax.mail". Импортировать эти библиотеки можно проще:
Code
1
2
    implementation(libs.android.mail)
    implementation(libs.android.activation)
Через порт 465 отправка не идёт. Обязательно нужно использовать 587.
Для асинхронной работы с сетью использовал Executors.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2024, 14:05
Помогаю со студенческими работами здесь

Отправка электронной почты в VB 6.0
Добрый день! Такой вопрос, как реализовать отправку сообщений пользователям используя список получателей. К примеру нашел такой код: ...

Отправка электронной почты
Добрый день. Пытаюсь отправить электронное письмо. После соединения с smtp.list.ru (&quot;94.100.177.4&quot;) порт 25 получаю...

Отправка электронной почты
Есть функция, которая отвечает за отправку сообщений. (Если не отправилась - сохраняет файл) Проблема в том, что отправляется только с...

Отправка электронной почты с ПК с русскоязычным именем
Здравствуйте! При отправки почты столкнулся с проблемой, что .net framework ниже 4 версии работает некорректно с русским именем компьютера....

Отправка электронной почты с шифрованием Https
Доброго дня, подскажите, пожалуйста, как отправить сообщение на электронную почту (сервер отправителя yandex.ru) если они перешли на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru