قبل از شروع مقاله بهتر است تعریف تخصصی از ایمیل داشته باشیم. ایمیل پیام هایی است که از طریق یک وسیله الکترونیکی و توسط یک کاربر ، به یک یا چند گیرنده ، از طریقه شبکه ارسال می شود.

قبل از شروع بحث در باب اکتیویتی ای همچون ایمیل ، باید با عملکرد ایمیل توسط intent ها آشنا شوید. همانطور که می دانید intent  ها داده هایی هستند که وظیفه انتقال اطلاعات از یک جز به جز دیگر ، با کمک اپلیکیشن یا خارج از حیطه ی اپلیکیشن را بر عهده دارند.
در مقالات پیشین ، در مورد Android Intent  گفتیم که آبجکتی است که هدفی را دنبال می کند، به عنوان مثال پیامی از یک مولفه به مولفه دیگر در داخل و یا خارج از برنامه.

برای ارسال ایمیل از اپلیکیشن خود ، نیاز به ایجاد email client نیست ؛ اما می توانید از یک موجودیتی همچون اپلیکیشن ایمیل پیش فرض از اندروید مانند : Gmail، Outlook، K-9 Mail و غیره استفاده کنید . در راستای تحقق این هدف ، نیاز به ایجاد یک اکتیویتی دارید که email client را راه اندازی کند. در مثالی که به شما ارائه خواهد شد ، هدف ارسال ایمیل از اپلیکیشن شما با استفاده از Intent object و راه اندازی email client می باشد .

شئ اینتنت- عمل ارسال ایمیل

شما از اکشن ACTION_SEND برای آغاز یک email client نصب شده روی دستگاه اندروید خود ، استفاده خواهید کرد. در زیر ، ترکیب ساده برای ایجاد یک Intent با اکشن ACTION_SEND را مشاهده می کنید :

Intent emailIntent = new Intent(Intent.ACTION_SEND);

شئ اینتنت- نوع داده برای ارسال ایمیل

برای ارسال یک ایمیل نیاز دارید mailto را مشخص کنید. همان طور که URI از متد ()setData استفاده می کند، و نوع داده با استفاده از متد ()setType از نوع text/plain خواهد بود، مانند زیر:

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

شئ اینتنت- ضمیمه برای ارسال ایمیل

اندروید در پشتیبانی می تواند فیلدهای TO، SUBJECT،CC ، TEXT و غیره را اضافه کند، که می توانند قبل از ارسال به کاربر ایمیل هدف، به intent ضمیمه شوند. شما می توانید از فیلدهای اضافه زیر برای ایمیل خود استفاده کنید.

شماره Extra Data & Description و توضیحات
1 EXTRA_BCC
یک رشته ی [] آدرس های ایمیلی را نگه می دارد که باید نسخه ی کپی شده ی مستور باشند.
2 EXTRA_CC
یک رشته ی [] آدرس های ایمیلی را نگه می دارد که باید نسخه ی کپی شده باشند.
3 EXTRA_EMAIL
یک رشته ی [] آدرس های ایمیلی را نگه می دارد که باید به آن ها تحویل داده شود.
4 EXTRA_HTML_TEXT
یک رشته ی ثابت که با Intent در ارتباط است، و با ACTION_SEND استفاده می شود تا به محض اینکه HTML متن را فرمت کرد برای EXTRA_TEXT یک گزینه فراهم کند.
5 EXTRA_SUBJECT
یک رشته ی ثابت که خط موضوع مورد نظر را از یک متن نگه می دارد.
6 EXTRA_TEXT
یک CharSequence ثابت که با Intent در ارتباط است، با ACTION_SEND مورد استفاده قرار می گیرد تا داده لیترال را برای ارسال فراهم کند.
7 EXTRA_TITLE
یک تیتر گفتگوی CharSequence برای ارائه به یوزر می باشد زمانی که با یک ACTION_CHOOSER مورد استفاده قرار می گیرد.

در این جا مثالی را می بینید که نشان می دهد چطور داده اضافه را به Intent خود اختصاص دهید.

emailIntent.putExtra(Intent.EXTRA_EMAIL  , new String[]{"Recipient"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject");
emailIntent.putExtra(Intent.EXTRA_TEXT   , "Message Body");

مثال

مثال زیر در عمل به شما نشان می دهد که چگونه از intent object برای آغاز کاربر ایمیل استفاده کنید تا یک ایمیل به گیرنده های ارائه شده ارسال کنید.

برای انجام این کار شما به یک دستگاه موبایل مجهز شده به آخرین نسخه ی Android OS نیاز دارید، در غیر اینصورت مجبورید با شبیه ساز کار کنید که ممکن است به درستی کار نکند. دوم اینکه شما به یک کاربر ایمیل مانند Gmail یا K9mail نصب شده روی دستگاه خود نیاز خواهید داشت.

مرحله توضیحات
1 شما از Eclipse IDE برای ایجاد یک برنامه ی اندروید استفاده خواهید کرد و آن را با عنوان SendEmailDemo تحت یک پکیج com.example.sendemaildemo نام گذاری می کنید. در هنگام ایجاد این برنامه مطمئن شوید که SDK و Compile را با آخرین ورژن اندروید SDK هدف قرار داده اید تا از API های سطوح بالاتر استفاده کنید.
2 فایل src/MainActivity.java را تغییر دهید و کد مورد نیاز را برای حفظ ارسال ایمیل به آن بیفزایید.
3 فایل layout XML را به src/MainActivity.java تغییر دهید و کد مورد نیاز را برای ارسال ایمیل به آن بیفزایید.
4 res/values/strings.xml را تغییر دهید تا مقادیر ثابت مورد نیاز را تعریف کنید.
5 AndroidManifest.xml را به روشی که در زیر نشان داده شده تغییر دهید
6 برای شروع کار در شبیه ساز اندروید برنامه را اجرا کنید و نتایج تغییرات انجام شده در برنامه را بررسی کنید.

محتوای تغییر یافته فایل اصلی اکتیویتی (main activity file ) src/com.example.Tutorialspoint/MainActivity.java :

package com.example.tutorialspoint;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      Button startBtn = (Button) findViewById(R.id.sendEmail);
      startBtn.setOnClickListener(new View.OnClickListener() {
         public void onClick(View view) {
            sendEmail();
         }
      });
   }
  
   protected void sendEmail() {
      Log.i("Send email", "");
      String[] TO = {""};
      String[] CC = {""};
      Intent emailIntent = new Intent(Intent.ACTION_SEND);
      
      emailIntent.setData(Uri.parse("mailto:"));
      emailIntent.setType("text/plain");
      emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
      emailIntent.putExtra(Intent.EXTRA_CC, CC);
      emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Your subject");
      emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message goes here");
      
      try {
         startActivity(Intent.createChooser(emailIntent, "Send mail..."));
         finish();
         Log.i("Finished sending email...", "");
      } catch (android.content.ActivityNotFoundException ex) {
         Toast.makeText(MainActivity.this, "There is no email client installed.", Toast.LENGTH_SHORT).show();
      }
   }
}

محتوای فایل res/layout/activity_main.xml را مشاهده می کنید :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >
   
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Sending Mail Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_above="@+id/imageButton"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_centerVertical="true"
      android:layout_centerHorizontal="true" />
      
   <Button 
      android:id="@+id/sendEmail"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/compose_email"/>
    
</LinearLayout>

در زیر محتوای res/values/strings.xml را برای تعریف دو ثابت جدید مشاهده می کنید :

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">Tutorialspoint</string>
   <string name="compose_email">Compose Email</string>
</resources>

در ادامه محتوای پیش فرض AndroidManifest.xml می باشد:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.Tutorialspoint" >
   
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.tutorialspoint.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

اجازه بدهید برنامه ی SendEmailDemo را اجرا کنیم. فرض می کنیم که دستگاه موبایل خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از قسمت Eclipse، یکی از فایل های فعالیت برنامه را باز کرده و روی آیکن RunEclipse Run Icon از toolbar کلیک کنید. قبل ازشروع برنامه، Eclipse پنجره ی زیر را نمایش خواهد داد تا یک گزینه را انتخاب کنید- جایی که می خواهید برنامه اندروید خود را اجرا کنید.

اکنون از دکمه ی Compose Email استفاده کنید تا لیست همه کاربران نصب شده ی ایمیل را داشته باشید. از این لیست می توانید یکی از کاربران ایمیل را انتخاب کنید تا ایمیل خود را به آن ارسال کنید. قصد داریم برای ارسال از کاربر Gmail استفاده کنیم که دارای همه ی فیلدهای پیش فرض ارائه شده خواهد بود. همانطور که در زیر مشاهده می کنید. در اینجا From: ایمیل پیش فرضی خواهد بود که برای دستگاه اندروید خود ثبت کرده اید.

شما میتوانید هر حالت پیش فرضی را تغییر بدهید و در نهایت از دکمه ی ارسال ایمیل برای ارسال کردن به دیگران استفاده کنید.