কম্পিউটার টিউটোরিয়াল

JavaMail API ব্যবহার করে Android-এ ইমেইল পাঠানো

Android-এ JavaMail API দিয়ে ইমেইল পাঠানো

এই উদাহরণটি দেখায় কিভাবে JavaMail API ব্যবহার করে Android অ্যাপ থেকে ইমেইল পাঠানো যায়। Gmail SMTP সার্ভার ব্যবহার করে পृष्ठভাগে (AsyncTask-এ) ইমেইল পাঠানো হয়েছে।

ধাপ ১: নতুন প্রজেক্ট তৈরি করুন

Android Studio-তে File → New Project এ যান এবং একটি নতুন প্রজেক্ট তৈরি করুন।

ধাপ ২: লেআউট XML (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:text="Recipient Email"
        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="Subject"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp" />

    <EditText
        android:id="@+id/editTextSubject"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:text="Message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp" />

    <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:layout_marginTop="16dp"
        android:text="Send" />

</LinearLayout>

ধাপ ৩: MainActivity.java

package com.app.sample;

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

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();

        if (email.isEmpty() || subject.isEmpty() || message.isEmpty()) {
            // ভ্যালিডেশন: ফিল্ড খালি থাকলে দেখান
            return;
        }

        SendMail sm = new SendMail(this, email, subject, message);
        sm.execute();
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.buttonSend) {
            sendEmail();
        }
    }
}

ধাপ ৪: Config.java (ইমেইল কনফিগারেশন)

package com.app.sample;

public class Config {
    // এখানে আপনার Gmail ইউজারনেম এবং অ্যাপ পাসওয়ার্ড দিন
    // নিরাপত্তার জন্য সাধারণ পাসওয়ার্ডের পরিবর্তে App Password ব্যবহার করুন
    public static final String EMAIL = "your-gmail@gmail.com";
    public static final String PASSWORD = "your-app-password";
}

ধাপ ৫: SendMail.java (AsyncTask-এ ইমেইল পাঠানো)

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<Void, Void, Void> {

    private Context context;
    private Session session;
    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, "Sending message", "Please wait...", false, false);
    }

    @Override
    protected Void doInBackground(Void... params) {
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");

        session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
            @Override
            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);
        if (progressDialog != null && progressDialog.isShowing()) {
            progressDialog.dismiss();
        }
        Toast.makeText(context, "Message Sent", Toast.LENGTH_LONG).show();
    }
}

ধাপ ৬: AndroidManifest.xml (ইন্টারনেট পারমিশন)

<?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
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

গুরুত্বপূর্ণ নোট

  • Gmail-এর জন্য: ২-ফ্যাক্টর অথেন্টিকেশন সক্রিয় থাকলে App Password তৈরি করে ব্যবহার করুন।
  • সিকিউরিটি: প্রোডাকশন অ্যাপে পাসওয়ার্ড হاردকোড করবেন না। নিরাপদ সংরক্ষণের জন্য Android Keystore বা অন্য পদ্ধতি ব্যবহার করুন।
  • AsyncTask ডিপ্রিকেটেড: আধুনিক Android-এ (API 30+) AsyncTask ডিপ্রিকেটেড। ExecutorService, Coroutines বা WorkManager ব্যবহার করুন।

অ্যাপটি চালান

ডিভাইস সংযুক্ত করে Run ক্লিক করুন। ইমেইল, সাবজেক্ট, মেসেজ লিখে Send বাটনে ক্লিক করলে ইমেইল পাঠানো হবে।

JavaMail API ব্যবহার করে Android-এ ইমেইল পাঠানো

  1. অ্যান্ড্রয়েডে AlarmManager ব্যবহার করে সার্ভিস শুরু করার পদ্ধতি

  2. HTML ফর্ম ব্যবহার করে ইমেইল কীভাবে পাঠাবেন?

  3. Android-এ OpenKeychain দিয়ে এনক্রিপ্টেড ইমেইল পাঠানো

  4. অ্যান্ড্রয়েডে এনক্রিপ্টেড ইমেইল পাঠানোর পদ্ধতি