PHPMailer یکی از کتابخانه های متن باز رایج در پی اچ پی هست که ارسال ایمیل رو از این طریق انجام میدن.(نویسنده: حتی وردپرس هم از این کتابخونه برا تابع wp_mail خودش استفاده می کنه) این کتابخونه برای اولین بار در سال ۲۰۰۱ منتشر شد و بعد اون یکی از علاقه مندی ها و کتابخونه های خوب برای توسعه دهنده های php شد تا در پروژه های برنامه نویسی شون از اون برای ارسال ایمیل استفاده کنند. البته در کنار اون از کتابخونه هایدیگه شبیه Swiftmailer هم استفاده میشد.
میتونین این کتابخونه رو از آدرس GitHub دانلود کنید یا از طریق composer این کار و انجام بدین:
composer require phpmailer/phpmailer
ارسال ایمیل از وب سرور لوکال(محلی) با استفاده از PHPMailer
این سرور باید میل سرور روش نصب باشه
براتون در اینجا یکی از ساده ترین مثال ها رو برای ارسال ایمیل از وب سرور محلی با استفاده از PHPMailer آوردیم:
<?php
require_once "vendor/autoload.php";
//PHPMailer Object
$mail = new PHPMailer;
//From email address and name
$mail->From = "from@yourdomain.com";
$mail->FromName = "Full Name";
//To address and name
$mail->addAddress("recepient1@example.com", "Recepient Name");
$mail->addAddress("recepient1@example.com"); //Recipient name is optional
//Address to which recipient will reply
$mail->addReplyTo("reply@yourdomain.com", "Reply");
//CC and BCC
$mail->addCC("cc@example.com");
$mail->addBCC("bcc@example.com");
//Send HTML or Plain Text email
$mail->isHTML(true);
$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";
if(!$mail->send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message has been sent successfully";
}
گمون نکنم نیازی به توضیح داشته باشه ولی خب توضیح میدم:
خط ۳ – اگه از طریق composer این کتابخونه رو گرفتین که خب باید فایل autoload.php رو از شاخه vendor اینکلود کنین. اگه از GitHub دانلود کردین باید فایل PHPMailerAutoload.php رو فراخونی کنین.
خط ۶ – یک شی از کلاس phpmailer میسازین(یا اصلاحا جناب پستچی رو خبر میکنین)
خط ۹، ۱۰ – آدرس فرستنده و اسم فرستنده رو به شی ارسال میکنین(خودتون رو به پستچی معرفی میکنین)
خط۱۳، ۱۴ – آدرس ها رو + نام گیرنده رو به شی ارسال میکنین.میبینین که ارسال نام گیرنده الزامی نیست(به پستچی آدرس های گیرنده و اسمشون رو میگین حالا اسمش رو هم نگفتین مشکلی نیست)
خط ۱۷ – آدرسی که پاسخ ایمیل به اون ارسال میشه رو ثبت میکنین(به پستچی میگین اگه جواب دادن، جواب رو به این ادرس ببر)
خط ۲۰، ۲۱ – ثبت ادرس های رونوشت ایمیل(میگین از این نامه من یه نسخه برا فلانی و فلانی ببر)
خط ۲۴ – مشخص میکنین که نوع محتوای ایمیلتون از نوع HTML هست.
خط ۲۶، ۲۷، ۲۸ – مشخص کردن موضوع، متن اصلی پیام با فرمت html و بعدی هم به عنوان معرف که میتونین نسخه ایمیل رو مشخص کنین.
خطوط ۳۰ تا ۳۷ – میگین پیام رو ارسال کن و اگه پیام ارسال شد بگو پیام ارسال شد و اگه نه بگو ارسال نشد!
ارسال ایمیل همراه با فایل یا پیوست
یه مثال هم برای ارسال فایل با PHPMailer هم ببینین:
<?php
require_once "vendor/autoload.php";
$mail = new PHPMailer;
$mail->From = "from@yourdomain.com";
$mail->FromName = "Full Name";
$mail->addAddress("recipient1@example.com", "Recipient Name");
//Provide file path and name of the attachments
$mail->addAttachment("file.txt", "File.txt");
$mail->addAttachment("images/profile.png"); //Filename is optional
$mail->isHTML(true);
$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";
if(!$mail->send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message has been sent successfully";
}
خطوط ۱۳ و ۱۴ – آدرس فایل رو برای ارسال مشخص کردیم. خط ۱۳ اسم هم گذاشتیم براش ولی خب الزامی نیست.
استفاده از SMTP برای ارسال ایمیل
شما میتونین از وب سرور در سرور دیگه ای مثل GMail استفاده کنین اما برای اینکار نیاز دارین که سرور هویت شما رو تایید کنه یا اصلاحا احراز هویت بشین مثلا برای استفاده از وب سرور GMai لازمه که یه حساب کاربری GMail داشته باشین.
SMTP یه پروتکله که کاربرا میتونین برای ارسال ایمیل از این طریق درخواست بدن. و این پروتکل مشخص میکنه آیا پیام ارسالی ما به مقصد رسیده یا نه.
اینجا هم یه مثال ار ارسال ایمیل توسط سرور Gmail میزنیم بنابراین شما نیازی به وب سرور محلی ندارین.
ممکنه برای سبک بودن سرور شما نخواین وب سرور مستقل نصب کنین برا همین میتونین از این پروتکل و وب سرور دیگه استفاده کنین.
<?php
require_once "vendor/autoload.php";
$mail = new PHPMailer;
//Enable SMTP debugging.
$mail->SMTPDebug = 3;
//Set PHPMailer to use SMTP.
$mail->isSMTP();
//Set SMTP host name
$mail->Host = "smtp.gmail.com";
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;
//Provide username and password
$mail->Username = "name@gmail.com";
$mail->Password = "super_secret_password";
//If SMTP requires TLS encryption then set it
$mail->SMTPSecure = "tls";
//Set TCP port to connect to
$mail->Port = 587;
$mail->From = "name@gmail.com";
$mail->FromName = "Full Name";
$mail->addAddress("name@example.com", "Recepient Name");
$mail->isHTML(true);
$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";
if(!$mail->send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message has been sent successfully";
}
خط ۸ – با کد ۳ حالت دیباگ یا رفع خطا رو برای توسعه فعال کردیم.
خط ۱۰ – میگیم که میخوایم از طریق پروتکل SMTP ارسال ایمیل انجام بدیم.
خط ۱۲ – آدرس هاست وب سرور که اینجا GMail هست رو میدیم.
خط ۱۴ – مشخص میکنیم که برای اتصال نیاز به تایید هویت داریم.
خط ۱۶، ۱۷ – نام کاربری و گذرواژه(همون username و password) رو میدیم.
خط ۱۹ – encryption یا شیوه رمزنگاری روی این پروتکل رو مشخص میکنیم که tls رو تنظیم میکنیم.
خط ۲۱ – شماره پورتی که این پروتکل روش کار میکنه رو مشخص میکنیم که مقدارش رو ۵۸۷ قرار میدیم.
یه فایده بزرگ استفاده از SMTP و استفاده از وب سرور دیگه مثل GMail اینه که: فرض کنین هاست شما example.com هستو ایمیلی با آدرس name@gmail.com به مقصد toname@yahoo.com ارسال میکنین سرور یاهو اون ایمیل رو جز اسپم قرار میده. چرا؟ چون پسوند gmail.com ولی از example.com ارسال شده. ولی وقتی واقعا از سرور gmail ارسال بشه یاهو اون رو جزء اسپم قرار نمیده چون gmail معتبره برا یاهو.
دریافت ایمیل با استفاده از پرتکل POP3
کتابخونه PHPMailer همچنین اجازه میده تا با استفاده از احراز هویت POP-before-SMTP ارسال ایمیل انجام بدین. به عبارت دیگه میتونین با استفاده از POP احراز هویت کنین و با SMTP ایمیل ارسال کنین. متاسفانه کتابخونه PHPMailer از دریافت ایمیل از وب سرورها با استفاده از پرتکل POP3 پشتیبانی نمیکنه. و فقط به ارسال ایمیل محدود شده.
والا من شرمنده م. من فقط ترجمه کردم که اینم جزء متن اصلی بود
نمایش پیام های خطای محلی
$mail->ErrorInfo
میتونه پیام خطا رو در ۴۳ زبان مختلف نمایش بده. برای نمایش خطا در زبان های مختلف پوشه language رو در پوشه پروژه تون کپی کنین.برای نمایش پیام خطا مثلا به زبان روسی زبان شی PHPMailer رو با استفاده از متد زیر روی Russian تنظیم کنید:
$mail->setLanguage("ru");
همچنین میتونین فایل زبان خودتون رو در پوشه language قرار بدین.
نتیجه
اگه شما یه توسعه دهنده php هستین این شناس براتون وجود داره تا از ارسال ایمیل به صورت برنامه نویسی و وقتگیر جلوگیری کنین.
تا وقتی که شما فاکتور سومی شبیه Mandrill و Sendgrid دارین بهتره که از ایمیل خودتون مثل حساب کاربری جی میلتون ایمیل ارسال کنین.
همچنین میتونین مستندات رسمی کتابخونه PHPMailer رو از اینجا مشاهده کنید.
منابع: