Android: Gửi Email
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, "Soạn nội dung email ở đây"); try { startActivity(Intent.createChooser(intent, "Gửi email...")); finish(); Log.i("Hoàn thành việc gửi 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 gửi 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.
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:
Bạn chọn Gmail sẽ xuất hiện hộp thoại dạng như sau:
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:
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:
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:
Khi đó bạn chọn Messages sẽ hiện ra hộp thoại dạng như sau:
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:
Bạn soạn một nội dung rồi gửi xem sao nhé.