Афоризм
"Нахал!" – совсем не значит "Прекратите".
Наталья Резник
Последние статьи

 • Многомодульный maven
Пример создания многомодульного maven проекта
июнь 2019
 • Maven плагин launch4j
Создание exe-файла из исполняемого jar
июнь 2019
 • Основы Contacts API
Описание структуры хранения списка контактов
май 2019
 • Синхронизаторы потока
Примеры синхронизаторов пакета java.util.concurrent.
май 2019
 • Сервисы в Android
Неявное Intent отправки Email.
апрель 2019
 • Сервисы в Android
Описание и пример создания Android сервиса.
апрель 2019
 • Вызов AlarmClock
Неявное Intent для вызова AlarmClock.
март 2019
 • Намерения Intent
Описание Intent, фильтры объектов Intent.
март 2019
 • Пример 2-х Activity
Жизненные циклы 2-х Activity android положения.
март 2019

Intent отправки Email

В данной статье рассматривается пример использования неявного намерения Intent для отправки Email сообщения. Для реализации данной функции в приложении необходимо определить доступ (uses-permission) в манифесте приложения, сформировать и вызвать неявное намерение отправки сообщения в активности.

Примечание :
1. В примере отправки Email-сообщения система android под управлением AVD (Android Virtual Device) реально запросит адрес и пароль отправителя;
2. Сообщения в примере будут реально отправлены по указанным адресам, даже если будет использован AVD.

Определение uses-permission в манифесте AndroidManifest.xml

Для использования неявного намерения для отправки Email-сообщений следует в манифесте примера AndroidManifest.xml указать разрешения <uses-permission> на доступ к определенным функциям, как это представлено в следующем коде :

<?xml version="1.0" encoding="utf-8"?>
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.test.p09intent">
	
    <uses-permission 
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission
        android:name="android.permission.READ_INTERNAL_STORAGE" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE" />
	
    <application
	    . . .
    </application>
</manifest>

Описание интерфейса

При описании интерфейса примера в файле «res/layout/activity_main.xml» (наименование может отличаться) используем шаблон типа RelativeLayout с кнопкой отправки Email сообщения.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/rl"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:padding="16dp"
  tools:context=".EmailActivity"
  android:background="#fdedfd" >

  <Button
      android:id="@+id/btn"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerInParent="true"
      android:text="Send email"
      android:textStyle="bold"
      android:textColor="#3e87ec" />
</RelativeLayout>

Код активности EmailActivity

Активность EmailActivity реализует интерфейс View.OnClickListener, согласно которому переопределяется метод onClick. Вызов данного метода подключен к кнопке.

В методе onClick определяется неявное намерение типа Intent.ACTION_SENDTO. Возможно использовать один из 3-х вариантов :

Типы действий Action

  • ACTION_SENDTO (без вложений);
  • ACTION_SEND (одно вложение);
  • ACTION_SEND_MULTIPLE (множество вложений);
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CalendarContract;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.util.Calendar;

public class EmailActivity extends AppCompatActivity 
                           implements View.OnClickListener
{
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_email);

        context = getApplicationContext();

        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        String[] emails;
        String[] emailsCC;
        String[] emailsBCCl
        
        emails = new String[]{ "jim@example.com"};

        // emails for cc
        emailsCC = new String[]{"tom@example.com"};

        // emails for bcc
        emailsBCC = new String[]{"kate@example.com"};

        String mailSubject = "Тема email";
        String mailBody    = "Текст сообщения";

        // Initialize a new Intent
        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.putExtra(Intent.EXTRA_EMAIL, emails);

        // Define the email cc and bcc
        intent.putExtra(Intent.EXTRA_CC , emailsCC);
        intent.putExtra(Intent.EXTRA_BCC, emailsBCC);

        intent.putExtra(Intent.EXTRA_SUBJECT, mailSubject);

        intent.putExtra(Intent.EXTRA_TEXT,mailBody);

        // For only email app should handle this intent
        intent.setData(Uri.parse("mailto:"));

        // Try to start the activity
        if (intent.resolveActivity(
                            getPackageManager()) != null) {
            startActivity(intent);
            Toast.makeText(context, "Send email.", 
                           Toast.LENGTH_SHORT).show();
        } else {
            // If there are no email client installed 
            // in this device
            String err;
            err="No email client installed in this device.";
            Toast.makeText(context, err,
                           Toast.LENGTH_SHORT).show();
        }
    }
}

MIME Type

При определении типа mime используйте следующие варианты :

  • "text/plain"
  • "*/*"

Пример определения типа mime в фильтре намерения :

<activity ...>
    <intent-filter>
        <action
          android:name="android.intent.action.SEND" />
        <data android:type="*/*" />
        <category 
          android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <intent-filter>
        <action
          android:name="android.intent.action.SENDTO" />
        <data android:scheme="mailto" />
        <category
          android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Extra данные

При определении типа данных возможны следующие варианты :

  • Intent.EXTRA_EMAIL
  • Intent.EXTRA_CC
  • Intent.EXTRA_BCC
  • Intent.EXTRA_SUBJECT
  • Intent.EXTRA_TEXT
  • Intent.EXTRA_STREAM

Связанные страницы

Объект намерения Intent

  Рейтинг@Mail.ru