ارسال ایمیل با phpmailer
یکی از بهترین کتابخونه های php که جایگزین ()mail باشه و بشه باهاش ایمیل ارسال کرد phpmailer هست .این کتابخونه بهراحتی در سیستمهای مدیریت محتوایی (CMS) مانند وردپرس کار میکنه و مورد استفاده بسیاری از توسعهدهندگان PHP هست.
از جمله مزایای phpmailer:
- میتونه انواع پیامهای خطا را در هنگام عدم ارسال ایمیل با بیش از 40 زبان چاپ کنه
- برای پشتیبانی از پروتکل SMTP و احراز هویت بر SSL و TLS توسعه یافته
- میتونه یک ایمیل متنی جایگزین برای مشتریان ایمیل غیر HTML ارسال کنه
- دارای یک انجمن توسعهدهنده بسیار فعال هست که باعث میشه ایمن و به روز باشه
کتابخونه phpmailer رو می تونید از این لینک از گیت هاب به صورت فایل زیپ دانلود کنید .
بعد از دانلود در هر فولدری که قصد استفاده دارید آپلود می کنید. بعد از آپلود و اکسترکت کردن، همه چیز آماده استفاده از phpmailer هست.
من فایل زیپ رو توی یه فولدر به نام contact آپلود و اکسترکت کردم و در کنار این فولدر فایلی رو برای ارسال پیام ایجاد کردم.
حالا کافیه که این چند خط کد رو برای شروع و استفاده از کلاس phpmailer به فایل خودم اضافه کنم :
require 'contact/PHPMailer-master/src/PHPMailer.php'; require 'contact/PHPMailer-master/src/Exception.php'; require 'contact/PHPMailer-master/src/SMTP.php'; use PHPMailer\PHPMailer\PHPMailer;
در صورتی که بخواید با phpmailer ایمیل ارسال کنید اما از smtp استفاده نشه ممکنه با این ارور مواجه بشید
Mailer Error: Could not instantiate mail function
این خطا به این معنی هست که تابع mail رو هاست شما غیرفعال شده و باید برای ارسال ایمیل از smtp استفاده کنید
در ادامه یه کد خیلی ساده برای ارسال پیام تست و آیا اینکه اصلا این کدهای ما کار می کنه یا نه اضافه می کنیم و تست می کنیم .
$emailContent="این یک پیام تست می باشد"; $eml_to="wordpresskar1@gmail.com"; try{ $email = new PHPMailer(true); $email->CharSet = 'UTF-8'; $email-> isSMTP(); # SMTP is enabled now. $email-> Host = 'mail.wordpresskar.com'; //smtp.gmail.com $email->SMTPDebug = 2; $email->SetFrom('contact@wordpresskar.com', 'وردپرس کار'); $email->isHTML(true); $email->Subject = 'موضوع پیام ارسالی'; $email->Body = $emailContent; $email->AddAddress( $eml_to ); //$email->AddAttachment( $file_to_attach ); $email->Send(); }catch(phpmailerException $e){echo $e->errorMessage();} }
با استفاده از این کد پیام ما به ایمیلی که تعیین کردیم ارسال میشه . به احتمال زیاد این ایمیل به فولدر اسپم خواهد رفت.
$email->CharSet = 'UTF-8';
توی این خط ما کاراکتر ست رو تنظیم می کنیم اگر این کد رو اضافه نکنیم متن و موضوع ایمیل به صورت کاراکترهای ناخوانا درمیان و قابل خوندن نیستن. اینطوری :
با استفاده از کد زیر دباگ رو فعال می کنیم تا اگر احیانا مشکلی بود بتونیم تشخیص بدیم و طبیعتا بعد از انجام کار و تست غیرفعال خواهد شد .
$email->SMTPDebug = 2;
با استفاده از کد زیر می تونیم ایمیل html ارسال کنیم و از رنگ، فونت و تصویر در ایمیل خودمون استفاده کنیم .
$email->isHTML(true);
در صورتی که ایمیل گیرنده های دیگه ای هم داره می تونیم هدر ایمیل رو سفارشی کنیم و موارد زیر رو اضافه کنیم :
// از کجا داره ایمیل می فرستیم $mail->setFrom('info@wordpresskar.com', 'wordpresskar'); // جواب ایمیل به کجا بره $mail->addReplyTo('info@wordpresskar.com', 'wordpresskar'); $mail->addAddress('recipient1@wordpresskar.com', 'Tim'); $mail->addCC('cc1@example.com', 'Elena'); $mail->addBCC('bcc1@example.com', 'Alex');
اگر تعداد بیشتری دریافت کننده ایمیل وجود داشته باشه می تونیم از کد زیر استفاده کنیم :
$mail->AddAddress('person1@domain.com', 'Person One'); $mail->AddAddress('person2@domain.com', 'Person Two'); // .. //To make things easy, you should loop through an array to do this. $recipients = array( 'person1@domain.com' => 'Person One', 'person2@domain.com' => 'Person Two', // .. ); foreach($recipients as $email => $name) { $mail->AddAddress($email, $name); } //Better yet, add them as Carbon Copy recipients. $mail->AddCC('person1@domain.com', 'Person One'); $mail->AddCC('person2@domain.com', 'Person Two'); // .. //To make things easy, you should loop through an array to do this. $recipients = array( 'person1@domain.com' => 'Person One', 'person2@domain.com' => 'Person Two', // .. ); foreach($recipients as $email => $name) { $mail->AddCC($email, $name); }