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

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

  • автор:

Не удается отправить файл на email в андроид

Приветствую спецов! Я начинающий в программировании на java андроид. Пытаюсь отправить файл через почтовый клиент. Файл прикрепляется к письму и появляется в почтовом клиенте. Письмо приходит на указанный адрес, но без файла. Файл не пустой, проверял файловым менеджером. Использую такой код:

 final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setType("plain/text"); // Кому emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] < "ххххххх@gmail.com" >); // Зачем emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, tema); // С чем emailIntent.putExtra(android.content.Intent.EXTRA_STREAM,Uri.fromFile(new File("Logf.txt"))); 

Файл создавался во внутренней памяти таким кодом:

BufferedWriter Writer = new BufferedWriter(new OutputStreamWriter(openFileOutput("Logf.txt", MODE_PRIVATE | MODE_APPEND), "UTF-8")); Writer.write(log_text+"\n"); Writer.flush(); Writer.close(); 

заметил, что при попытке чтения файла также возникала неудача, хотя файл был непустой. Код для чтения такой:

 BufferedReader Reader = new BufferedReader(new InputStreamReader(openFileInput("Logf.txt"), "UTF-8")); while (Reader.readLine() != null)

В результате чтения str было » null «. Прошу спецы подскажите, что я делал не так?

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

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

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

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

Комментировать
Решения вопроса 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) < >>

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

Это простая демонстрация для отправки электронной почты в Android с вложением. Для вложения я использую Intent.ACTION_GET_CONTENT.

Не забудьте добавить разрешения в ваш manifest.xml-

Screenshot_2013-09-23-00-07-49

1) MainActivity.java

package com.manish.sendemaildemo;

import android.app.Activity;

import android.content.Intent;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.provider.MediaStore;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

* @author manish

public class MainActivity extends Activity implements OnClickListener <

EditText editTextEmail, editTextSubject, editTextMessage;

Button btnSend, btnAttachment;

String email, subject, message, attachmentFile;

Uri URI = null ;

private static final int PICK_FROM_GALLERY = 101 ;

int columnIndex;

protected void onCreate(Bundle savedInstanceState) <

super .onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

editTextEmail = (EditText) findViewById(R.id.editTextTo);

editTextSubject = (EditText) findViewById(R.id.editTextSubject);

editTextMessage = (EditText) findViewById(R.id.editTextMessage);

btnAttachment = (Button) findViewById(R.id.buttonAttachment);

btnSend = (Button) findViewById(R.id.buttonSend);

btnSend.setOnClickListener( this );

btnAttachment.setOnClickListener( this );

protected void onActivityResult( int requestCode, int resultCode, Intent data) <

if (requestCode == PICK_FROM_GALLERY && resultCode == RESULT_OK) <

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

Author24 — интернет-сервис помощи студентам

Хочу передать себе данные анкеты из приложения. Кроме 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’)

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

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

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