آموزش ارسال Email در برنامه نویسی اندروید
سلام دوستان امیدوارم حالتان خوب باشد در این سری از آموزش های برنامه نویسی اندروید به آموزش ارسال Email در برنامه نویسی اندروید می پردازیم در این آموزش بدون استفاده از Email پیشفرض گوشی ارسال به ایمیل خواهیم کرد و از کتاب خانه javamail api استفاده خواهیم کرد در ادامه با ما همراه باشید.
ابتدا باید سه کتاب خانه را به پروژه خود اضافه کنید در ادامه باید آن را دانلود کنید و به پروژه اضافه کنید.
لینک دانلود کتاب خانه ها
پس از دانلود می توانید مثل زیر آن را به اندروید استودیو یا Eclipse اضافه کنید.
از بخش سمت چپ همانند عکس زیر android را به Project تغییر دهید.
سپس پوشه libs را پیدا کرده و کتاب خانه ها را در آن قرار دهید.
کتاب خانه ها را انتخاب کنید (با CTRL همه را select کنید) سپس کلیک راست کرده و بروی add as library کلیک کنید.
در layout اصلی کدهای زیر را قرار دهید در اینجا برابر با activity_main.xml است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?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 ایجاد کنید و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 | 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 ایجاد کنید و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | 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 شده و دسترسی اینترنت را همانند زیر اضافه کنید.
1 | <uses-permission android:name="android.permission.INTERNET"/> |
این آموزش هم به پایان رسید.
موفق و موید باشید.
سلام ، خسته نباشید ؛
اگه امکانش هست راجع به این بخش آموزش (“…بهتر است این ایمیل و پسور را از اینترنت دریافت کنید…”) بیشتر توضیح بدید و مثالی ازش بگید .
میخواستم از این آموزش تو اپم بعنوان بخش ارسال نظرات کاربران استفاده کنم (کاربر فقط یه پیام بنویسه با یک عنوان ، بعد ارسال رو که زد بفرستش ایمیل من) چون خوبیه این آموزش اینه که دیگه بدون باز کردن برنامه اضافی پیام رو مستقیم ارسال میکنه . حالا لطف کنید راهنمایی بفرمایید چجوری ایمیل خودم رو باید بزارم داخل کد برای دریافت نظرات کاربران .
ممنون .
سلام و درود
منظور از اینترنت دریافت کنید یعنی شما یک api یا یک وب سرویسی در سمت اینترنت دارید که با دادن یک کلید خاص مقدار email و pass رو بر می گرداند بهترین راه استفاده از json برای خروجی گرفتن است.
ممنون از پاسخ شما ،
بسیار عالی ، متوجه شدم ؛ ولی متاسفانه تا حالا سرور ، json و … عملا کار نکردم و تازه کار هستم . اگه مقدوره یه مثال یا رفرنس مختصر معرفی کنید تا ازش کمک بگیرم و بتونم از این آموزش تو برنامم استفاده کنم .
سلام در سایت جستجو کنید کلی آموزش در رابطه با json وجود دارد نمونه لینک زیر
https://programchi.ir/2017/04/24/%d8%ae%d9%88%d8%a7%d9%86%d8%af%d9%86-json-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d9%88%db%8c%d8%b3%db%8c-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/
موفق باشید.
سلام
در این برنامه یوزر و پسورد ایمیل داخل خود برنامه هست و اگر در آینده قصد تغییر آنرا داشته باشیم این امکان از ما سلب خواهد شد و همچنین امنیت کافی نخواهد داشت. بهتر است این بخش را توسط یک برنامه php به دیتابیس ارتباط دهیم تا کاربردی گردد.
با سلام و خداقوت خدمت شما مهندس جعفری پور گرامی
ممنون از آموزش خوبتون
میخواستم ببینم آیا این روش ارسال ایمیل برای ارتباط با دیتابیس سمت سرور هست یا میشه بجای اون ایمیل و پسوردی که اول تعریف کردیم یک ایمیل و پسورد خودمون رو بنویسیم که مستقیما برای خودمون ارسال بشه؟؟؟
و دوم اینکه میخواستم بصورت مفهمومی کدهای داخل متد doInBackground رو بهتر متوجه بشم باید از چه طریقی عمل کنم و یا چه رفرنسی رو بخونم؟
ممنون میشم راهنمایی بفرمایید.
سلام و عرض خسته نباشید جناب مهندس جعفرپور گرامی
با تشکر از بابت آموزش خوب و جامعتون
من از این کد توی اپم استفاده کردم اما متاسفانه کار نمیکنه (بدون حتی یک ارور)
حتی یک توست مسیج هم گذاشتم که ببینم کدم کار میکنه یا نه بازم کار نکرد
آیا برای مجوزش از ران تایم پرمیژن استفاده کنم؟ یا تاثیری نداره؟
این کد رو توی ی اکتیویتی مجزا زدم و یه دکمه هم برای فعال کردنش گذاشتم، دکمه کار میکنه و همه تغییرات دیگه ای رو ک براش تعریف کردم انجام میده اما متاسفانه نمیدونم که چرا ایمیل ارسال نمیشه
البته ی مسئله هم قابل ذکره ک من از این کد میخوام به عنوان ارسال ایمیل به کاربر برای بازیابی رمز عبورش استفاده کنم
رمز عبور و ایمیل کاربر رو توسط Shared Preferences ذخیره کردم
توسط کدی که شما گفتین ایمیل خودم رو ک مخصوص برنامه ساختم به همراه رمزش به صورت ایستا در برنامه وارد کردم و ایمیل کاربر رو هم از Shared Preferences میگیرم و برنامه رو اجرا میکنم
ولی خب همونطور که گفتم بدون اینکه حتی یه ارور بده برنامه اجرا میشه اما ایمیل ارسال نمیشه
پرمیژن اینترنت رو هم توی منیفست وارد کردم و روی اندروید 6 اجرا میکنم
لطفا راهنمایی بفرمایید