Как отправить письмо с вложением android studio
Перейти к содержимому

Как отправить письмо с вложением android studio

  • автор:

Отправка письма на E-mail

Ребята, всем привет! Помогите решить вопрос. Есть Activity, в нем три EditText (ФИО, телефон, сообщение) и две Button (Отправить, Очистить форму). Я хочу реализовать по нажатию кнопки отправку данных из этих полей ко мне на почту. Можно ли как-то это сделать без стандартных почтовых клиентов, чтобы данные с заполненной формы уходили напрямую ко мне на почту. Почта всегда будет одна и та же, статична. PS Очистку формы у меня получилось реализовать. Спасибо!

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Отправка электронного письма из приложения
Здравствуйте. Такая проблема — из приложения по нажатию кнопки передаю данные для отправки.

Отправка письма с вложением через GMail
Создается письмо в GMail с вложением из файла html. На более поздних версиях андроида перестала.

GMailSender+JSSEProvider, отправка письма на почту по нажатию кнопки
Доброе утро. Решил спросить в новой теме по данной связке. Есть активити, в ней несколько полей.

Отправка E-Mail средствами Android
Можно ли отправить письмо на почту из андроид приложения, оминая Intent.ACTION_SEND?

114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609

по простому нельзя. по сложному, нужен сервер, на который при нажатии кнопки отправить отправляется дата с полей, сервер во время получения даты пересылает его на мейл.

Регистрация: 21.10.2016
Сообщений: 33

ЦитатаСообщение от shavuz Посмотреть сообщение

по простому нельзя. по сложному, нужен сервер, на который при нажатии кнопки отправить отправляется дата с полей, сервер во время получения даты пересылает его на мейл.

подскажите, как этот сервер должен выглядеть? php-скрипт?
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609

а, кажется носкюэлевские серверы умеют посылать мейл

Добавлено через 1 минуту
вот. https://backendless.com/docume. l_rest.htm
это NoSql сервер, им очень просто пользоваться. надо зарегистрироваться, потом прописать его библиотеку в проекте, и в примере по ссылке, показано как отослать мейл, т.е что произойдет, аппликация пошлет запрос на сервер а сервер отправит мейл

111 / 111 / 43
Регистрация: 24.05.2015
Сообщений: 329

ЦитатаСообщение от FIXx Посмотреть сообщение

Можно ли как-то это сделать без стандартных почтовых клиентов, чтобы данные с заполненной формы уходили напрямую ко мне на почту.

Gmail отправка сообщения (текст)
Там вроде тех 3-ех файлов уже нету.
Если надо, залью на какой-нить файлообменник.

Регистрация: 21.10.2016
Сообщений: 33

ЦитатаСообщение от fraley Посмотреть сообщение

Там вроде тех 3-ех файлов уже нету.
Если надо, залью на какой-нить файлообменник.

Я буду благодарен, если Вы это сделаете. Буду ждать ссылку на файлообменник.

Добавлено через 26 секунд

ЦитатаСообщение от shavuz Посмотреть сообщение

вот. https://backendless.com/docume. l_rest.htm
это NoSql сервер, им очень просто пользоваться. надо зарегистрироваться, потом прописать его библиотеку в проекте, и в примере по ссылке, показано как отослать мейл, т.е что произойдет, аппликация пошлет запрос на сервер а сервер отправит мейл

Сижу разбираюсь. Спасибо Вам за помощь.

Добавлено через 14 минут

ЦитатаСообщение от shavuz Посмотреть сообщение

Ссылка не рабочая, перенаправляет меня на пустую страницу.
111 / 111 / 43
Регистрация: 24.05.2015
Сообщений: 329

ЦитатаСообщение от FIXx Посмотреть сообщение

Я буду благодарен, если Вы это сделаете. Буду ждать ссылку на файлообменник.
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
Вот еще раз
https://backendless.com/docume. l_rest.htm
Регистрация: 21.10.2016
Сообщений: 33

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

114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609

1) как добавить, идешь в АС файл->проджект стракчур ->выбираешь апп, сверху вкладка депенденсис, справа + зеленый, там мавен, пишешь бекендлесс, дает 1 результат поиска, нажимаешь 2 раза мышкой. компелируется. добавил библиотеку в прокет
2) в аппликейшн классе или в мейн активити прописываешь

Backendless.initApp(this, APP_ID, SECRET_KEY, appVersion);

апп айди и ки должен получить когда зарегистрировал проект в бекендлесе

все, бекендлес добавлен и инициализирован. вот тут есть их описание https://backendless.com/docume. ements.htm

потом когда надо отослать мейл у тебя будет обьект бекендлес, судя по документации надо делать так:

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
AsyncCallbackVoid> responder = new AsyncCallbackVoid>() { @Override public void handleResponse( Void response ) { System.out.println( "[ASYNC] email has been sent" ); } @Override public void handleFault( BackendlessFault fault ) { System.out.println( "error sending email - " + fault.getMessage() ); } }; // async request. Plain text message to one recipient Backendless.Messaging.sendTextEmail( "Reminder", "Hey JB! Your car will be ready by 5pm", "james.bond@mi6.co.uk", responder ); // sync request. HTML messahe to multiple recipients ArrayListString> recipients = new ArrayListString>(); recipients.add( "mom@gmail.com" ); recipients.add( "dad@gmail.com" ); String mailBody = "Guys, the dinner last night was awesome"; Backendless.Messaging.sendHTMLEmail( "Dinner", mailBody, recipients ); System.out.println( "[SYNC] email has been sent" );

System.out.println — поменяй на лог
Регистрация: 21.10.2016
Сообщений: 33

Библиотеку добавил, зарегистрировался, все ключи внёс.

ЦитатаСообщение от shavuz Посмотреть сообщение

2) в аппликейшн классе или в мейн активити прописываешь
Backendless.initApp(this, APP_ID, SECRET_KEY, appVersion);

Этот код вставил в метод onCreate.

Теперь затык, куда вставлять код Async

114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609

туда где хочешь отослать мейл. для начала поставь ее в онкриейт после инициализации бекендлес. пропиши свой мейл и посмотри отошлет ли. если да. расскажу где правельно вставить и как

104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
Вот так еще можно.
Регистрация: 21.10.2016
Сообщений: 33

ЦитатаСообщение от shavuz Посмотреть сообщение

туда где хочешь отослать мейл. для начала поставь ее в онкриейт после инициализации бекендлес. пропиши свой мейл и посмотри отошлет ли. если да. расскажу где правельно вставить и как

Извиняюсь, что так долго пропадал.

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
package ru.lux_tv.screen; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.content.Intent; import android.view.MenuItem; import com.backendless.Backendless; public class ConnectActivity extends AppCompatActivity implements View.OnClickListener { public static final String APP_ID = "------------------------------------------"; public static final String SECRET_KEY = "--------------------------------------"; public static final String VERSION = "v1"; private Button btnConSend; private Button btnConClear; private EditText poleFio; private EditText poleTel; private EditText poleSoob; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.connect); Backendless.initApp(this, APP_ID, SECRET_KEY, VERSION); ActionBar actionBar = getSupportActionBar(); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); btnConSend = (Button) findViewById(R.id.btnConSend); btnConSend.setOnClickListener(this); btnConClear = (Button) findViewById(R.id.btnConClear); btnConClear.setOnClickListener(this); poleFio = (EditText) findViewById(R.id.poleFio); poleTel = (EditText) findViewById(R.id.poleTel); poleSoob = (EditText) findViewById(R.id.poleSoob); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btnConClear: poleFio.setText(""); poleTel.setText(""); poleSoob.setText(""); break; } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: startActivity(new Intent(this, MainActivity.class)); return true; default: return super.onOptionsItemSelected(item); } } }

Отправка пользователя в другое android-приложение

Один из наиболее важных особенностей Android, является способность приложения отправить пользователя в другое приложение, основываясь на “действии”, которое он хотел бы выполнить. Например, если ваше приложение имеет адреса предприятия, которое вы бы хотели показать на карте, вам не придется строить activity в вашем приложении, которая показывает карту. Вместо этого, вы можете создать запрос на просмотр адрес с помощью Intent . После чего Android система запустит приложение, которое в может показать адрес на карте.

Как пояснялось в первый курсе, Создание вашего первого приложения, вы должны использовать интент для перемещения между activity в собственном приложении. Вы обычно делает это, пользуясь явным интентом , которое определяет точное имя класса компонента, которое необходимо запустить. Однако, когда вы хотите, чтобы отдельное приложение выполнило действие, например, “просмотреть карту,” необходимо воспользоваться неявным интентом.

Этот урок покажет вам, как создать неявное интент для того или иного действия, и как его использовать для запуска activity , которая выполняет действие в другом приложении.

Создание неявного интента

Неявные интенты не объявляют имя класса компонента для запуска, а вместо этого объявляют выполняемое действие. Действие определяет, что вы хотите сделать, например, просмотреть,редактировать, послать, или получить что-нибудь. Интенты часто включают в себя также данные, связанные с действием, такие как адрес, который вы хотите просмотреть, или сообщения электронной почты, которое требуется передать. В зависимости от интента, которое вы хотите создать, данные могут быть Uri , каким-либо другим типом данных, или интент может не нуждаться в данных вообще.

Если ваши данные это Uri , есть простой Intent() конструктор, который можно использовать для определения действия и данных.

Например, вот как создать интент, инициирующее телефонный звонок с помощью Uri , указывающий номер телефона:

Uri number = Uri.parse("tel:5551234"); Intent callIntent = new Intent(Intent.ACTION_DIAL, number);

Когда ваше приложение вызывает это интентс помощью startActivity() , приложение Телефон инициирует вызов по данному номеру телефона.

Вот несколько других интентов и их действий и Uri пар данных:

// Map point based on address Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California"); // Or map point based on latitude/longitude // Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
Uri webpage = Uri.parse("http://www.android.com"); Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);

Другие виды неявных интентов требуют «дополнительные» данные, которые предоставляют данные различных типов, таких как строки. Вы можете добавить один или несколько кусков дополнительных данных, используя различные putExtra() методы.

По умолчанию, система определяет соответствующий MIME тип, необходимый интенту, на основе Uri данных. Если вы не добавили Uri в интент, вы должны, как правило, использовать setType() для указания тип данных, связанных с интентом. Установка MIME типа в дальнейшем определяет, какие виды activity должны получить это намерение.

Вот еще несколько интентов, которые добавляют дополнительные данные для указания нужного действия:

    Отправить письмо с вложением:

Intent emailIntent = new Intent(Intent.ACTION_SEND); // The intent does not have a URI, so declare the "text/plain" MIME type emailIntent.setType(HTTP.PLAIN_TEXT_TYPE); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] ); // recipients emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject"); emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text"); emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment")); // You can also attach multiple items by passing an ArrayList of Uris
Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI); Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30); Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()); calendarIntent.putExtra(Events.TITLE, "Ninja class"); calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");

Примечание: Важно, чтобы вы определяли Intent как можно более точно. Например, если вы хотите отобразить изображение с помощью ACTION_VIEW интент, вы должны указать MIME тип один из image/* . Это предотвращает приложения, которые могут «просматривать» другие типы данных (такие как приложения карт) от запуска из-за этого интент.

Убедитесь, что существует приложение способное обработать интент

Хотя Android платформа гарантирует, что определенные интенты будут обрабатываться одним из встроенных приложений (например, телефон, электронная почта, или приложении Календарь), вы всегда должны включать шаг проверки перед вызовом интента.

Внимание: Если вы вызываете интент и нет приложение доступного на устройстве, которое бы смогло обработать интент, то это приведет ваше приложение к краху.

Для проверки есть ли доступная activity , которая может ответить на интент, вызовите queryIntentActivities() для получения перечня activity , способных обработать ваше Intent . Если возвращенный List не пустой, вы можете спокойно использовать интент. Например:

PackageManager packageManager = getPackageManager(); List activities = packageManager.queryIntentActivities(intent, 0); boolean isIntentSafe = activities.size() > 0;

Если isIntentSafe является true , то по крайней мере одно приложение будет отвечать на интенты. Если значение равно false , то нет приложений для обработки интента.

Примечание: Вы должны выполнять эту проверку, когда ваша activity запускается, т.к. в этом случае вам нужно отключить функцию, которая использует интент, прежде чем пользователь попытается использовать эту функцию. Если вы знаете о конкретной программе, которая может обрабатывать интент, вы также можете предоставить ссылку для пользователя, чтобы он смог загрузить приложение (смотрите как сослаться на ваш продукт на Google Play).

Запуск activity при помощи интента

Отправка пользователя в другое android-приложение

Рисунок 1. Пример диалога выбора приложения, который появляется, когда более одного приложения могут обрабатывать интент.

После того как вы создали Intent и установили дополнительную информацию, вызовите startActivity() для отправки его в систему. Если система определяет, что более одной activity может обрабатывать интент, она отображает диалоговое окно пользователю, чтобы он выбрал, какое приложение использовать, как показано на рисунке 1. Если есть только одна activity , которая обрабатывает интент, система немедленно её запускает.

startActivity(intent);

Вот полный пример, который показывает, как создать интент для просмотра карты, проверяет, что приложение для обработки интента существует, а затем начинает его:

// Build the intent Uri location = Uri.parse(«geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California»); Intent mapIntent = new Intent(Intent.ACTION_VIEW, location); // Verify it resolves PackageManager packageManager = getPackageManager(); List activities = packageManager.queryIntentActivities(mapIntent, 0); boolean isIntentSafe = activities.size() > 0; // Start an activity if it’s safe if (isIntentSafe)

Показать диалог выбора приложения

Отправка пользователя в другое android-приложение

Рисунок 2. Диалог выбора.

Обратите внимание, что когда вы начинаете activity , передавая свой Intent в startActivity() и есть более чем одно приложение, которое отвечает на интенты, пользователь может выбрать, какое приложение использовать по умолчанию (по отметив флажок в нижней части диалогового окна; см. рисунок 1). Это хорошо, когда выполнение действия, для которых пользователь обычно хочет использовать одно и того же приложения каждый раз, например, при открытии веб-страницы (пользователи, вероятно, предпочитают использовать только один веб-браузер) или принимать фотографии (пользователи, вероятно, предпочитают одну и ту же камеру).

Однако, если выполняемое действие может обрабатываться несколькими приложениями, и пользователь может предпочитать каждый раз другое приложение — такое как действия “поделиться”, для которых пользователи могли бы иметь несколько приложений, через которые они могли бы поделиться — вы должны явно показывать диалог выбора, как показано на рисунке 2. Диалог выбора заставляет пользователя каждый раз выбирать, какое приложения использовать для действия (пользователь не может выбрать приложение по умолчанию для действия).

Чтобы показать диалог выбора, создайте Intent используя createChooser() и передайте его в startActivity() . Например:

Intent intent = new Intent(Intent.ACTION_SEND); . // Always use string resources for UI text. // This says something like «Share this photo with» String title = getResources().getString(R.string.chooser_title); // Create intent to show chooser Intent chooser = Intent.createChooser(intent, title); // Verify the intent will resolve to at least one activity if (intent.resolveActivity(getPackageManager()) != null)

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

Продолжение: Получение результата от activity

Если не указано иное, этот контент распространяется под лицензией Creative Commons Attribution 2.5. Для получения дополнительной информации и ограничений, см. Лицензия контента.

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

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

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

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

PS: неужели для Android нет встроенных средств отправки электронной почты? Это так странно.

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

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

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

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

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

Регистрация: 27.10.2010
Сообщений: 67

Лучший ответ

Сообщение было отмечено moverast как решение

Решение

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

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
 version="1.0" encoding="utf-8"?>  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">  android:text="Recipient Email" android:layout_width="wrap_content" android:layout_height="wrap_content" />  android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editTextEmail" />  android:text="Subject" android:layout_width="wrap_content" android:layout_height="wrap_content" />  android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editTextSubject" />  android:text="Message" android:layout_width="wrap_content" android:layout_height="wrap_content" />  android:lines="4" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editTextMessage" />  android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/buttonSend" android:text="Send"/> >
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(); } }
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 AsyncTaskVoid,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; } }
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’)

Если самостоятельно не найдете файлы то пиши в личку скину

Как отправить письмо с вложением?

Можно использовать интент с действием ACTION_SENDTO или ACTION_VIEW, в chooser’е будут только почтовые клиенты, но при этом нельзя добавить вложение.
Если использовать ACTION_SEND и MIME message/rfc822 или application/octet-stream, то отображается много лишних приложений, например, телеграмм или гуглдрайв.

Вопрос, как cформировать интент, чтобы были видны только email-клиенты и подхватывались вложения из EXTRA_STREAM. API 16 и выше.

  • Вопрос задан более трёх лет назад
  • 363 просмотра

Комментировать
Решения вопроса 1

thelongrunsmoke

Александр Варакосов @thelongrunsmoke Автор вопроса
Программист

Разобрался. Это можно сделать присвоив изначальному интенту экстра с именем Intent.EXTRA_INITIAL_INTENTS и интентом с другим действием. Например, исходный интент ACTION_SEND и EXTRA_INITIAL_INTENTS с ACTION_SENDTO, дадут их пересечение, на чистом андроиде, один gmail.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 1

Попробуйте вот так:

//filePath - file at phone. public void send(String emailTo, String subject, String body, String filePath) < Intent email = new Intent(android.content.Intent.ACTION_SEND); email.setType("message/rfc822"); email.putExtra(Intent.EXTRA_EMAIL, new String[]); email.putExtra(Intent.EXTRA_SUBJECT, subject); email.putExtra(Intent.EXTRA_TEXT, body); if (filePath != null) email.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new StorageFiles(ctx).getFile(filePath))); try < ctx.startActivity(Intent.createChooser(email, "Choser title")); >catch (android.content.ActivityNotFoundException ex) < >>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *