Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách gửi Email trên Android dùng JavaMail API

Ví dụ này minh họa cách gửi email trên Android sử dụng JavaMail API qua Gmail SMTP. Lưu ý: Cần bật "Less secure apps" hoặc dùng App Password cho Gmail.

Bước 1: Tạo dự án mới

Tạo dự án mới trong Android Studio.

Bước 2: Thêm dependency JavaMail

Trong build.gradle (Module: app):

dependencies {
    implementation 'com.sun.mail:android-mail:1.6.7'
    implementation 'com.sun.mail:android-activation:1.6.7'
}

Bước 3: Cấu hình layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">
    <TextView android:text="Email người nhận" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
    <EditText android:id="@+id/editTextEmail" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textEmailAddress"/>
    <TextView android:text="Tiêu đề" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
    <EditText android:id="@+id/editTextSubject" android:layout_width="match_parent" android:layout_height="wrap_content"/>
    <TextView android:text="Nội dung" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
    <EditText android:id="@+id/editTextMessage" android:layout_width="match_parent" android:layout_height="wrap_content" android:lines="4" android:inputType="textMultiLine"/>
    <Button android:id="@+id/buttonSend" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Gửi"/>
</LinearLayout>

Bước 4: Code MainActivity (src/MainActivity.java)

package com.app.sample;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText editTextEmail, editTextSubject, editTextMessage;
    private Button buttonSend;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        editTextEmail = findViewById(R.id.editTextEmail);
        editTextSubject = findViewById(R.id.editTextSubject);
        editTextMessage = findViewById(R.id.editTextMessage);
        buttonSend = findViewById(R.id.buttonSend);
        buttonSend.setOnClickListener(this);
    }
    
    private void sendEmail() {
        String email = editTextEmail.getText().toString().trim();
        String subject = editTextSubject.getText().toString().trim();
        String message = editTextMessage.getText().toString().trim();
        new SendMail(this, email, subject, message).execute();
    }
    
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.buttonSend) sendEmail();
    }
}

Bước 5: Config.java (src/Config.java)

package com.app.sample;
public class Config {
    public static final String EMAIL = "your-gmail@gmail.com";
    public static final String PASSWORD = "your-app-password"; // Dùng App Password
}

Bước 6: SendMail.java (src/SendMail.java)

package com.app.sample;
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;

public class SendMail extends AsyncTask {
    private Context context;
    private String email, subject, message;
    private ProgressDialog progressDialog;
    
    public SendMail(Context context, String email, String subject, String message) {
        this.context = context;
        this.email = email;
        this.subject = subject;
        this.message = message;
    }
    
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = ProgressDialog.show(context, "Đang gửi", "Vui lòng chờ...", false, false);
    }
    
    @Override
    protected Void doInBackground(Void... params) {
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        
        Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(Config.EMAIL, Config.PASSWORD);
            }
        });
        
        try {
            MimeMessage mm = new MimeMessage(session);
            mm.setFrom(new InternetAddress(Config.EMAIL));
            mm.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
            mm.setSubject(subject);
            mm.setText(message);
            Transport.send(mm);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        progressDialog.dismiss();
        Toast.makeText(context, "Đã gửi email!", Toast.LENGTH_LONG).show();
    }
}

Bước 7: Cấu hình Manifest (thêm quyền INTERNET)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.app.sample">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application ...>
        <activity android:name=".MainActivity">...</activity>
    </application>
</manifest>

Chạy ứng dụng

Nhập email nhận, tiêu đề, nội dung và nhấn Gửi. Kiểm tra hộp thư đến.

Cách gửi Email trên Android dùng JavaMail API