امروز قصد دارم یکی از بهترین کلاس هایی که برای ارسال ایمیل با 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 ندارم و کارام راحت تر شده ، اگه کلاس های بهتری رو سراغ دارید خوشحال می شم که معرفی کنید .
سلام
خیلی عالی بود
سلام
تشکر فراوان
نحوه بیانتون عالی هست
:))
مای گاد
عزیزم فحش خیلی بد چیه ؟ فحش معمولی چیه ؟
تجدید نظر کن 😀
سلام
روی 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
سه شنبه ۲۳ خرداد ۱۳۹۱ و ساعت ۴:۲۲ ب.ظ
واقعا ممنونم از این مطلب مفید و آموزنده شما و باید صادقانه بگم که نحوه نوشتن مطلبتون هم بسای روان و قابل فهم بود مخصوصا برای من که هیچ سر رشته ایی ندارم ….
امیدوارم موفق و موید و پیروز باشید …