Android: Gửi Email


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Email là các thông điệp được phân phối bởi các cách thức điện tử từ một hệ thống người dùng tới một hoặc nhiều người nhận thông qua một mạng.

Trước khi bắt đầu Email Activity, bạn phải biết tính năng Email với Intent. Intent mang dữ liệu từ một thành phần tới thành phần khác bên trong ứng dụng hoặc bên ngoài ứng dụng.

Để gửi một mail từ ứng dụng, bạn không phải triển khai một Email Client lúc ban đầu, nhưng bạn có thể sử dụng một Client đang tồn tại như Email App mặc định được cung cấp bởi Android, Gmail, Outlook, … Để thực hiện mục đích này, chúng ta cần viết một Activity để thực thi một Email Client, sử dụng một Implicit Intent với action và data thích hợp. Trong ví dụ dưới đây, chúng ta gửi mail từ ứng dụng bằng cách sử dụng một đối tượng Intent để chạy Email Client đang tồn tại.

Action để gửi Email

Bạn sử dụng action là ACTION_SEND để chạy một Email Client đã được cài đặt trên thiết bị Android của bạn (mặc định là Gmail). Cú pháp đơn giản để tạo một Intent với ACTION_SEND là:

Intent email = new Intent(Intent.ACTION_SEND);

Dữ liệu/kiểu để gửi Email

Để gửi một Email, bạn cần xác định mailto: dạng URI sử dụng phương thức setData() và kiểu dữ liệu sẽ là text/plain bằng cách sử dụng phương thức setType(), như sau:

email.setData(Uri.parse("mailto:"));
email.setType("text/plain");

Extra để gửi Email

Android có sẵn hỗ trợ để thêm các trường TO, SUBJECT, CC, TEXT, … có thể được đính kèm với Intent trước khi gửi Intent đó tới một Email Client. Bạn có thể sử dụng các trường Extra sau trong email của bạn:

Stt. Extra Data & Miêu tả
1 EXTRA_BCC

Một String[] giữ địa chỉ email mà nên là Blind Carbon Copied

2 EXTRA_CC

Một String[] giữ địa chỉ email mà nên là Carbon Copied.

3 EXTRA_EMAIL

Một String[] giữ địa chỉ email nên được gửi tới

4 EXTRA_HTML_TEXT

Một hằng chuỗi được gắn kết với Intent, được sử dụng với ACTION_SEND để cung cấp một thay thế cho EXTRA_TEXT dạng text được định dạng HTML

5 EXTRA_SUBJECT

Một hằng chuỗi giữ dòng Subject của thông điệp

6 EXTRA_TEXT

Một dãy ký tự hằng được gắn kết với Intent, được sử dụng với ACTION_SEND để cung cấp dữ liệu để được gửi

7 EXTRA_TITLE

Một title để cung cấp tới người dùng khi được sử dụng với một ACTION_CHOOSER

Ví dụ sau minh họa cách bạn gán dữ liệu Extra tới Intent:

email.putExtra(Intent.EXTRA_EMAIL  , new String[]{"Người nhận"});
email.putExtra(Intent.EXTRA_SUBJECT, "Tiêu đề email");
email.putExtra(Intent.EXTRA_TEXT   , "Nội dung email");

Ví dụ gửi email

Ví dụ sau minh họa cách sử dụng đối tượng Intent để chạy Email Client nhằm gửi một Email tới người nhận đã cho.

Lưu ý: Bạn nên thử nghiệm ví dụ này trên thiết bị Mobile Android, nếu không bạn sẽ gặp trục trặc với màn hình mô phỏng Emulator. Bạn cũng cần có một Email Client như Gmail (theo mặc định mỗi phiên bản Android có ứng dụng Gmail Client).

Sau đây là nội dung của file MainActivity.java:

package v1study.com.email;

import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

    Button buttonComposeEmail = findViewById(R.id.buttonComposeEmail);
    buttonComposeEmail.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        sendEmail();
      }
    });
  }

  private void sendEmail() {
    Log.i("Send email", "");
    String[] TO = {""};
    String[] CC = {""};
    Intent intent = new Intent(Intent.ACTION_SEND);

    intent.setData(Uri.parse("mailto:"));
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_EMAIL, TO);
    intent.putExtra(Intent.EXTRA_CC, CC);
    intent.putExtra(Intent.EXTRA_SUBJECT, "Tiêu đ email");
    intent.putExtra(Intent.EXTRA_TEXT, "Son ni dung email  đây");

    try {
      startActivity(Intent.createChooser(intent, "Gi email..."));
      finish();
      Log.i("Hoàn thành vic gi email...", "");
    } catch (ActivityNotFoundException exception) {
      Toast.makeText(MainActivity.this, "Không có email nào được cài đt", 3000).show();
    }
  }
}

Sau đây là nội dung của file res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".MainActivity">

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/demo_gui_email"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.092"
    android:textSize="30sp"
    android:textStyle="bold"
    android:textColor="#4CAF50"/>
  
  <ImageView
    android:layout_width="200dp"
    android:layout_height="200dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:id="@+id/textView"
    app:layout_constraintVertical_bias="0.331"
    tools:srcCompat="@drawable/logo_v1study"
    app:srcCompat="@drawable/logo_v1study"
    app:layout_constraintHorizontal_bias="0.497"
    android:contentDescription="@string/logo_v1study"/>
  
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/compose_email"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:id="@+id/buttonComposeEmail"
    app:layout_constraintVertical_bias="0.713"
    android:textSize="24sp"
    android:textStyle="bold"
    android:textColor="#009688"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Sau đây là nội dung của res/values/strings.xml để định nghĩa hai hằng:

<resources>
  <string name="app_name">EmailV1Study</string>
  <string name="demo_gui_email">Demo gi Email</string>
  <string name="compose_email">Compose Email</string>
  <string name="logo_v1study">Logo V1Study</string>
</resources>

Bây giờ ta bắt đầu test ứng dụng Android vừa tạo ở trên.

Send Email trong Android

Bạn hãy nhấn nút Compose Email. Nếu bạn đang chạy app trên điện thoại thì sẽ xuất hiện hộp thoại dạng như sau:

Chọn hình thức gửi email

Bạn chọn Gmail sẽ xuất hiện hộp thoại dạng như sau:

Soạn email

Bạn điền email người nhận, soạn tiêu đề và nội dung email, sau đó nhấn gửi dạng như sau:

Gửi email

Kết quả là một email sẽ được gửi đến người nhận. Bạn vào check email, kết quả sẽ nhận được email dạng thế này:

Kết quả nhận email

Trường hợp bạn chạy trên trình giả lập (Emullator) sẽ hiện ra hộp thoại lựa chọn như sau:

Email, lựa loại hình

Khi đó bạn chọn Messages sẽ hiện ra hộp thoại dạng như sau:

Gửi email

Bạn điền 1 email vào phần To (ở đây mình điền email dangtranlong@gmail.com) rồi click nút tick màu xanh tròn ở dưới sẽ ra kết quả như sau:

Soạn email

Bạn soạn một nội dung rồi gửi xem sao nhé.

» Tiếp: AudioManager trong Android
« Trước: Drag và Drop trong Android
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!