آموزش ارسال Email در برنامه نویسی اندروید

امتیاز 3.00 ( 1 رای )

سلام دوستان امیدوارم حالتان خوب باشد در این سری از آموزش های برنامه نویسی اندروید به آموزش ارسال Email در برنامه نویسی اندروید می پردازیم در این آموزش بدون استفاده از Email پیشفرض گوشی ارسال به ایمیل خواهیم کرد و از کتاب خانه javamail api استفاده خواهیم کرد در ادامه با ما همراه باشید.
 
ابتدا باید سه کتاب خانه را به پروژه خود اضافه کنید در ادامه باید آن را دانلود کنید و به پروژه اضافه کنید.
لینک دانلود کتاب خانه ها
 
پس از دانلود می توانید مثل زیر آن را به اندروید استودیو یا Eclipse اضافه کنید.
از بخش سمت چپ همانند عکس زیر android را به Project تغییر دهید.
سپس پوشه libs را پیدا کرده و کتاب خانه ها را در آن قرار دهید.
کتاب خانه ها را انتخاب کنید (با CTRL همه را select کنید) سپس کلیک راست کرده و بروی add as library کلیک کنید.
در layout اصلی کدهای زیر را قرار دهید در اینجا برابر با  activity_main.xml  است.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:text="Recipient Email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextEmail" />
    <TextView
        android:text="Subject"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextSubject" />
    <TextView
        android:text="Message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:lines="4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextMessage" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/buttonSend"
        android:text="Send"/>
</LinearLayout>

 
در بالا 3 فیلد وجود دارد که هر کدام به ترتیب ایمیل شخصی که می خواهید به آن پیام ارسال کنید , عنوان و در آخر پیام قرار داده شده است کد بالا همانند زیر می شود.

یک فایل به نام Config.java ایجاد کنید و کدهای زیر را در آن قرار دهید.

package ir.programchi;
/**
 * Created by JFP on 10/30/2018.
 */
public class Config {
    public static final String EMAIL ="your-gmail-username";
    public static final String PASSWORD ="your-gmail-password";
}

در بالا باید یک ایمیل و یک پسورد قرار دهید شما باید یک ایمیل Temporary داشته باشید و در بالا قرار دهید دقت کنید می توانید از gmail یا yahoo یا سروس ایمیل Cpanel  و حتی directadmin استفاده کنید.
بهتر است این ایمیل و پسور ار از اینترنت دریافت کنید تا در صورتی که برنامه شما کرک شد ایمیل شما نیز هک نشود.
یک کلاس به نام SendMail.java ایجاد کنید و کدهای زیر را در آن قرار دهید.

package ir.programchi;
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;
/**
 * Created by JFP on 10/30/2018.
 */
//Class is extending AsyncTask because this class is going to perform a networking operation
public class SendMail extends AsyncTask<Void,Void,Void> {
    private Context context;
    private Session session;
    private String email;
    private String subject;
    private String 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 onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        progressDialog.dismiss();
        Toast.makeText(context,"Message Sent",Toast.LENGTH_LONG).show();
    }
    @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() {
                    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;
    }
}

در بالا ما یک کلاس کمکی (Helper) ساختیم تا عمل ارسال email  را کمی برایمان راحت تر کند این کتاب خانه از socket به منظور ارسال ایمیل استفاده می کند. زمانی که از این کلاس استفاده شود باید به Constructor آن چهار ورودی ارسال شود که عبارتند از :

  • Context
  • Email شخصی که می خواهیم پیام ارسال شود.
  • subject عنوان پیام
  • message پیامی که می خواهید ارسال شود.

در ادامه تا زمانی که پیام ارسال شود یک ProgressDialog نمایش داده می شود.
یک توضیح برای افرادی که می خواهند به صورت سفارشی (از سرویس ایمیل خود پیام ارسال کنند) باید بخش smtp.gmail.com و port آن را تغییر دهید.
و در نهایت باید وارد فایل AndroidManifest.xml شده و دسترسی اینترنت را همانند زیر اضافه کنید.

    <uses-permission android:name="android.permission.INTERNET"/>

 
 
این آموزش هم به پایان رسید.
 
موفق و موید باشید.

مطالعه بیشتر