یه کلاس خوب php برای ارسال ایمیل
لینک کوتاه

امروز قصد دارم یکی از بهترین کلاس هایی که برای ارسال ایمیل با php رو دیدم بهتون معرفی کنم . این کلاس ویژگی های خیلی خوبی داره و خیلی هم سبکه و می شه باهاش کارای زیادی انجام داد . قبل از اینکه این کلاس و طرز کارش رو توضیح بدم اول می گم که ارسال ایمیل با کدهای php چه جوریه و فرقش با این کلاس چیه .

یک تابع به صورت پیش فرض برای ارسال ایمیل با php وجود داره ، تابع mail که خیلی هم کار باهاش راحته و می تونید با دادن متغیرهای ایمیل ، به راحتی ایمیل مورد نظرتونو ارسال کنید . به عنوان مثال اگه من یه ایمیل با موضوع تست و متن سلام به آدرس me@jentelman.com با تابع mail بخوام بفرستم به شکل زیر می نویسم :

<?php
$to = “me@jentelman.com”;
$subject = “تست”;
$message = “سلام”;
mail($to,$subject,$message);
echo “ایمیل ارسال شد !”;
?>

اما مشکلی که این تابع داره اینه که وابسته به تنظیمات ایمیل apache هست و از سروری که توی apache تعریف شده ایمیل ها رو ارسال می کنه . یعنی شما اگه یه سایت خدماتی خیلی ساده روی یه هاست بخواین راه بندازین و از این تابع برای ارسال ایمیل استفاده کنید آدرس فرستنده ی ایمیل آدرسی هست که روی apache تعریف شده و اگه به تنظیمات سرور دسترسی نداشته باشید نمی تونید آدرس فرستنده رو طوری تغیر بدید که گیرنده ی ایمیل آدرس ایمیل شما رو به عنوان فرستنده ببینه !

مشکل دیگه ای که این تابع پیش فرض داره اینه که ایمیل ها رو به شکل متن ارسال می کنه و نمی شه به ایمیل استایل و یا حالت خاصی داد . مثلن اگه شما بخواین فونت ایمیلتون چیز دیگه ای باشه و یا اندازه ی متن توی بعضی جاها عوض شده باشه و یا هر استایلی که بخواید ایمیلتون داشته باشه ، با این تابع نمی شه و کدهای html رو هم به شکل متن ارسال می کنه !

چند تا کلاس برای رفع این مشکلات و ارسال یه ایمیل خوب برای php نوشته شده که به نظرم بهترین کلاسی که دیدم phpmailer هست و خیلی سبک و خوبه . با این کلاس شما می تونید ایمیل ها رو با شکل و ظاهری که دوست دارید بفرستید و روی لوکال هاست هم بدون تغیرات توی apache می تونید ایمیلتون رو ارسال کنید .

  • قبل از شروع ایمیل فرستنده رو مشخص می کنیم :

فرض کنید من می خوام ایمیل هامو با آدرس me@jentelman.com بفرستم . اول از همه باید از یه سرور خوب برای ارسال ایمیل استفاده کنم که بهترینش به نظرم جیمیل هست . ما قصد داریم جیمیل رو این وسط واسطه قرار بدیم تا ایمیل ها رو به وسیله ی سرورهاش با آدرس me@jentelman.com به مقصد برسونه . اما حالا چرا جیمیل رو انتخاب کردم و از سروری که سایتم روشه کمک نمی گیرم ، به این دلایل :

  • محدودیتی که روی هاست ها برای ارسال ایمیل وجود داره معمولن ۱۰۰ ایمیل در روزه ! ولی جیمیل می تونه تا ۵۰۰ ایمیل در روز رو ارسال کنه .
  • جیمیل ایمیل ها رو رمزنگاری شده می فرسته و امنیت کاربرها هم حفظ می شه .
  • اگر تایید دومرحله ای جیمیلتون فعال باشه لازم نیست توی این کلاس پسورد اصلی ایمیلتون رو بنویسید و امنیت ایمیلتون حتا اگر سایتتون هک بشه حفظ می شه و کسی نمی تونه به پسورد ایمیلتون دسترسی داشته باشه .
  • و…

قبل از کار با کلاس باید ایمیل فرستنده رو بسازید و به جیمیلتون وصلش کنید . برای این کار توی سی پنل روی Email Accounts کلیک کنید و ایمیل مورد نظرتونو بسازید که من به عنوان مثال ایمیل me@jentelman.com رو می سازم . بعد باید این ایمیل رو به جیمیلتون وصل کنید که من مراحل اتصالش رو نمی گم و می تونید اینجا و یا اینجا روش اتصالش رو ببینید .

وقتی ایمیلتون رو به جیمیل وصل کردید همه چی آمادست و نوبت به کلاس phpmailer می رسه . این کلاس رو می تونید از توی گوگل کد دانلود کنید ، ولی اگه به گوگل داک دسترسی ندارید می تونید اون رو از اینجا دانلود کنید . بعد از دانلود ، فایل ها رو از حالت فشرده خارج کنید و فایل های class.phpmailer.php و class.pop3.php و class.smtp.php رو توی یک فولدر کنار فایل های سایتتون قرار بدید . فرض کنید من این ۳ فایل رو توی فولدر phpmailer ریختم و توی کد مثالمم می خوام از این فولدر بازش کنم .

حالا برای استفاده از این کلاس توی صفحه ی مورد نظرمون از کد زیر استفاده می کنیم :

<?php
require(‘phpmailer/class.phpmailer.php’);
$mail=new PHPMailer();
$mail->CharSet = ‘UTF-8’;
$body = ‘<P dir=rtl><FONT size=2 face=”tahoma”>سلام !</FONT></P>’;
$mail->IsSMTP();
$mail->Host = ‘smtp.gmail.com’;
$mail->SMTPSecure = ‘tls’;
$mail->Port = 587;
$mail->SMTPDebug = 1;
$mail->SMTPAuth = true;
$mail->Username = ‘jentelman’;
$mail->Password = ‘123456’;
$mail->From = ‘me@jentelman.com’;
$mail->FromName = ‘jentelman’;
$mail->Subject = ‘تست’;
$mail->MsgHTML($body);
$mail->AddAddress(test@yahoo.com, ‘کامران’);
if($mail->Send())
echo ‘ایمیل ارسال شد !’;
else
echo ‘ایمیل ارسال نشد !’;
?>

توی کد بالا همونطور که می بینید اول کلاس رو صدا زدیم و همونطور که گفتم چون من کلاس رو توی فولدر phpmailer ریختم از اونجا صداش کردم . خط دوم و سوم هم یک ایمیل جدید به صورت UTF-8 ساختیم که از فارسی هم پشتیبانی کنه ، توی خط چهارم متغیر body رو متن ایمیلمون تعریف کردیم و همونطور هم که می بینید توی متن ایمیل از کدهای html استفاده کردم که با یه استایل خاصی ایمیلم ارسال بشه . خط های بعدی کد برقرار کردن ارتباط با سرورهای جیمیل هست و مشخصات SMTP و پورت جیمیل رو وارد کردیم . مقابل متغیر Username همونجور که می بینید نام کاربری جیمیل و مقابل Password هم پسورد جیمیلمون رو می نویسیم . یه نکته ی مهم اینجا وجود داره و اونم اینکه حتمن تایید دو مرحله ای جیمیل رو فعال کنید ( چه جوری فعال کنیم ؟! ) وقتی که تایید دو مرحله ای فعال باشه می تونید برید اینجا و یک پسورد جدید بسازید و از اون پسورد توی کلاس استفاده کنید ، اینجوری پسورد اصلی جیمیلتون در امانه و احتمال هک ایمیلتون در صورت هک شدن سایت وجود نداره !

در مقابل From و FromName ، ایمیل و اسم فرستنده رو تعریف کردیم . همونطور که توی مراحل قبل دیدید اول ایمیل me@jentelman.com رو به جیمیل متصل کردیم و بعد می تونیم از این ایمیل به عنوان فرستنده استفاده کنیم . بعد هم موضوع ایمیل رو مشخص کردیم و متن ایمیل رو داخل تابع MsgHTML نوشتیم که با حالت مورد نظرمون ارسال بشه . در نهایت هم آدرس و اسم گیرنده ی ایمیل رو مشخص کردیم که من به عنوان مثال می خوام ایمیلم به آدرس test@yahoo.com که متعلق به کاربر کامران هست ارسال بشه .

به همین راحتی با یه کلاس ساده تونستیم ایمیلمون رو ارسال کنیم . یه ویژگی خیلی خوب استفاده از این کلاس اینه که چون توسط جیمیل ، ایمیل ها ارسال می شن گزارش دریافت هم به جیمیل ارسال می شه و اگه کاربری بخواد ایمیل غیر واقعی توی سایتتون وارد کنه توی جیمیل براتون گزارش دریافت میاد که ایمیل به مقصد نرسیده و می فهمید اون آدرس ایمیل غیر واقعیه !

این کلاس امکانات دیگه ای هم داره مثل پیوست کردن فایل به ایمیل و … که می تونید اینجا امکانات و مثال هاش رو ببینید .

من از وقتی که از این کلاس استفاده می کنم خیلی راحتم و مشکلی با ارسال ایمیل توی php ندارم و کارام راحت تر شده ، اگه کلاس های بهتری رو سراغ دارید خوشحال می شم که معرفی کنید .

اگه خوشتون اومد این ها رو هم بخونید :
ارسال ایمیل گروهی به صورت مخفی
ایمیل ارسال شده را Undo کنید
با یه جیمیل کلی آدرس ایمیل داشته باشید
ایمیل فیس بوک من راه افتاد !
رقیب جدید جیمیل در راه است
نوشته بعدی
نوشته قبلی
به اشتراک بگذارید
tojihi.com گفت :
سه شنبه ۲۳ خرداد ۱۳۹۱ و ساعت ۴:۲۲ ب.ظ

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

امیدوارم موفق و موید و پیروز باشید …

پاسخ یه این نظر

مهدی گفت :
شنبه ۱۸ شهریور ۱۳۹۱ و ساعت ۱۱:۳۵ ق.ظ

سلام
خیلی عالی بود

پاسخ یه این نظر

مریم گفت :
دوشنبه ۲۲ آبان ۱۳۹۱ و ساعت ۶:۲۷ ب.ظ

سلام
تشکر فراوان
نحوه بیانتون عالی هست

پاسخ یه این نظر

مریم گفت :
دوشنبه ۲۲ آبان ۱۳۹۱ و ساعت ۶:۴۱ ب.ظ

:))
مای گاد
عزیزم فحش خیلی بد چیه ؟ فحش معمولی چیه ؟
تجدید نظر کن 😀

پاسخ یه این نظر

مریم گفت :
دوشنبه ۲۲ آبان ۱۳۹۱ و ساعت ۶:۴۷ ب.ظ

سلام
روی xammp اجرا کردم این خطا رو داد
Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\xampp\htdocs\1\4\phpmailer\class.smtp.php on line 200
علت چی هست ؟
چون لوکال هست ؟ رو هاست اجرا میشه ؟

متشکر

پاسخ یه این نظر

جواد در پاسخ گفت :
سه شنبه ۲۳ آبان ۱۳۹۱ و ساعت ۱۲:۰۸ ق.ظ

فکر می کنم چون شما روی لوکال ssl رو فعال کردید این ارور رو داده 😐

پاسخ یه این نظر

مریم گفت :
دوشنبه ۲۲ آبان ۱۳۹۱ و ساعت ۶:۵۸ ب.ظ

$mail->SMTPSecure = ‘tls’;
این خط بالا رو پاک کردم

این خطا رو داد:
SMTP -> ERROR: AUTH not accepted from server: 530 5.7.0 Must issue a STARTTLS command first. e7sm16565064eep.1
SMTP Error: Could not authenticate. یمیل ارسال نشد !

:(

پاسخ یه این نظر

جواد در پاسخ گفت :
سه شنبه ۲۳ آبان ۱۳۹۱ و ساعت ۱۲:۰۹ ق.ظ

فکر می کنم با سرور ایمیل نتونسته ارتباط برقرار کنه یه بار دیگه بررسی کن ببینید همه ی اطلاعات اتصال درست باشه

پاسخ یه این نظر

علیرضا گفت :
چهارشنبه ۲۵ دی ۱۳۹۲ و ساعت ۱:۰۵ ب.ظ

واجب شد تو خبرنامه سایتت عضو شم!
مطلب خیلی خوبی بود

پاسخ یه این نظر

ایمان گفت :
سه شنبه ۲۱ مرداد ۱۳۹۳ و ساعت ۱۰:۳۹ ق.ظ

سلام و خسته نباشید
من با خطای زیر مواجه میشم

SMTP -> ERROR: Password not accepted from server: 535 Incorrect authentication data

ممنون میشم راهنمایی کنید

پاسخ یه این نظر

جواد در پاسخ گفت :
چهارشنبه ۲۲ مرداد ۱۳۹۳ و ساعت ۷:۰۷ ب.ظ

فکر می کنم تایید دو مرحله ای جیمیلت فعال باشه . وقتی تایید دو مرحله ای فعاله باید از رمز دوم مخصوص اپلیکیشن استفاده کنی و رمز جیمیلتو نمی تونی بدی !
برای گرفتن رمز دوم تایید دو مرحله ای برو اینجا : https://www.google.com/accounts/IssuedAuthSubTokens?hide_authsub=1

پاسخ یه این نظر

نظر بدهید
  • نام: ضروری
  • ایمیل: ضروری
  • وبسایت:
  • پارسی را پاس بدارید و نظراتتان را با خط زیبای پارسی بنویسید. اگر صفحه کلید پارسی ندارید از بهنویس استفاده کنید.
    اگر می خواهید تصویرتان به صورت آواتار در کنار نظرتان نمایش داده شود از گراواتار استفاده کنید.
    ایمیلتون رو توی کادر زیر وارد کنید و عضو خبرنامه ی جنتلمن بشید تا همیشه آخرین مطالب رو توی ایمیلتون بخونید :
    اگه نمی خواید از طریق ایمیل جنتلمن رو دنبال کنید راه های دیگه ای هم برای اشتراک هست !
    آرشیو ماهانه
    برچسب ها
    لینک های خوشمزه
  • برو بچه ها بلاگر
  • دوستای مجازی
    تبلیغ
  • مطالبی که می نویسم آزاد هستند و انعکاس آن از هر طریقی مشکلی ندارد!
    Jentelman.com . Made With In IRAN . 2010- 2023