قبل از انجام فعالیت ارسال ایمیل در اندروید ، باید عملکرد ایمیل با Intent را بدانید. Intent داده ها را از یک کامپوننت به کامپوننت دیگری در داخل برنامه و خارج از برنامه منتقل می کند.
برای ارسال ایمیل از برنامه خود، لازم نیست از ابتدا یک سرویس گیرنده ایمیل پیاده سازی کنید، اما می توانید از یک برنامه ایمیل موجود مانند برنامه ایمیل پیش فرض ارائه شده از Android، Gmail، Outlook، K-9 Mail و غیره استفاده کنید. برای این منظور، باید یک Activity بنویسیم که یک سرویس گیرنده ایمیل را با استفاده از یک Intent ضمنی با عملکرد و داده های مناسب راه اندازی کند. در این مثال، ما با استفاده از یک شیء Intent که کلاینتهای ایمیل موجود را راهاندازی میکند، یک ایمیل از برنامه خود ارسال میکنیم.
بخش زیر بخشهای مختلف شی Intent مورد نیاز برای ارسال ایمیل را توضیح میدهد.
آبجکت Intent – اقدام برای ارسال ایمیل در اندروید
از اکشن ACTION_SEND برای اجرای یک سرویس گیرنده ایمیل نصب شده در دستگاه Android خود استفاده خواهید کرد. در زیر یک روش ساده برای ایجاد یک intent با عملکرد ACTION_SEND آورده ایم.
Intent emailIntent = new Intent(Intent.ACTION_SEND);
آبجکت Intent – داده / نوع ارسال ایمیل
برای ارسال ایمیل باید mailto را مشخص کنید و به عنوان URI با استفاده از متد setData و نوع داده با استفاده از متد setType به text/plain خواهد بود.
emailIntent.setData(Uri.parse("mailto:")); emailIntent.setType("text/plain");
آبجکت Intent – داده های اضافی برای ارسال ایمیل
Android دارای پشتیبانی داخلی برای افزودن فیلدهای TO، SUBJECT، CC، TEXT و غیره است که میتوان آنها را قبل از ارسال intent برای اجرا به intent پیوست کرد. می توانید فیلدهای اضافی زیر را ببینید و در صورت نیاز از آنها در ایمیل خود استفاده کنید:
اطلاعات اضافی و توضیحات | ردیف |
EXTRA_BCC
یک string[] که نشانیهای ایمیل را در خود نگه میدارد که باید کپی شوند. |
1 |
EXTRA_CC
یک string[] حاوی آدرسهای ایمیلی که باید کپی شوند. |
2 |
EXTRA_EMAIL
لیست ایمیلی های مقصد را مشخص میکند. |
3 |
EXTRA_HTML_TEXT
یک رشته ثابت که به Intent مرتبط است، با ACTION_SEND برای ارائه جایگزینی برای EXTRA_TEXT به عنوان متن قالببندی شده HTML استفاده میشود. |
4 |
EXTRA_SUBJECT
متن موضوع ایمیل را مشخص میکند. |
5 |
EXTRA_TEXT
یک CharSequence ثابت که به Intent مرتبط است و با ACTION_SEND برای ارائه دادههای تحت اللفظی ارسالی استفاده میشود. |
6 |
EXTRA_TITLE
عنوان محاوره ای CharSequence برای ارائه به کاربر هنگام استفاده با ACTION_CHOOSER. |
7 |
کدهای زی مثالی است که تنظیم intent ارسال ایمیل را مشخص میکند:
emailIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{"ایمیل دریافت کننده"}); emailIntent.putExtra(Intent.EXTRA_SUBJECT, "عنوان ایمیل"); emailIntent.putExtra(Intent.EXTRA_TEXT , "متن بدنه ایمیل");
مثال
مثال زیر بطور عملی نشان میدهد که چگونه میتوان از شیء Intent برای راه اندازی سرویس گیرنده ایمیل برای ارسال ایمیل به گیرندگان داده شده, استفاده شود. برای اجرای این مثال, مراحل زیر را دنبال کنید:
مراحل و توضیحات | ردیف |
در AndroidStudio یک پروژه جدید با پکیج نیم جدید ایجاد کنید و مراحل زیر را دنبال کنید. | 1 |
کدهای درون فایل MainActivity.class را مطابق کدهای که در پایین وجود دارد تغییر بدهید. | 2 |
کدهای درون فایل activity_main.xml را مطابق کدهای که در پایین وجود دارد تغییر بدهید. | 3 |
برنامه را بر روی یک تلفن واقعی یا شبیه ساز اجرا کنید و تست را انجام بدهید. | 5 |
کدهای فایل MainActivity.java
package com.example.test12a; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private EditText email, title, content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); email = findViewById(R.id.email_address); title = findViewById(R.id.email_title); content = findViewById(R.id.email_content); findViewById(R.id.sendEmail).setOnClickListener(v -> { String eA = email.getText().toString(); String eT = title.getText().toString(); String eC = content.getText().toString(); if(eA.isEmpty() || eT.isEmpty() || eC.isEmpty()){ Toast.makeText(this, "وارد کردن تمامی موارد الزامی است", Toast.LENGTH_SHORT).show(); }else { sendEmail(eA, eT, eC); } }); } @SuppressLint("IntentReset") private void sendEmail(String emailAddress, String emailTitle, String emailContent){ Intent emailIntent = new Intent(Intent.ACTION_SEND); emailIntent.setData(Uri.parse("mailto:" + emailAddress)); emailIntent.setType("text/plain"); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{emailAddress}); emailIntent.putExtra(Intent.EXTRA_SUBJECT, emailTitle); emailIntent.putExtra(Intent.EXTRA_TEXT, emailContent); try { startActivity(Intent.createChooser(emailIntent, "درحال ارسال ایمیل ...")); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(MainActivity.this, "هیچ برنامه ای برای ارسال ایمیل پیدا نشد.", Toast.LENGTH_SHORT).show(); } } }
کدهای فایل activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center|top" android:padding="16dp" android:orientation="vertical"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="مثال ارسال ایمیل" android:textSize="30sp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="7cloner.com" android:textColor="#2196F3" android:textSize="30sp" /> <EditText android:id="@+id/email_address" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="55dp" android:padding="8dp" android:layout_marginBottom="8dp" android:hint="آدرس ایمیل"/> <EditText android:id="@+id/email_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:minHeight="55dp" android:padding="8dp" android:hint="عنوان ایمیل"/> <EditText android:id="@+id/email_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="160dp" android:padding="8dp" android:gravity="top|start" android:hint="متن ایمیل"/> <Button android:id="@+id/sendEmail" android:layout_width="match_parent" android:layout_height="55dp" android:text="ارسال ایمیل" /> </LinearLayout>
سرآخر بعد از اجرا میتوانید تست کنید و عملکرد برنامه را بسنجدید. ما پروژه را اجرا کرده ایم و نتیجه کار به این صورت بود:
در این آموزش, عمل ارسال ایمیل توسط یک برنامه دیگر انجام میگیرد و اپ ما تنها درخواست ارسال ایمیل را انجام میدهد.