آموزش کتابخانه phpmailer + مثال کاربردی ارسال ایمیل
در راستای نیازهای یک نرمافزار تحت وب، وجود یک سیستم ارتباطی مناسب در سایت بسیار حیاتی است تا فرآیند ارتباط بین کاربران و مدیران وبسایت به خوبی انجام شود. از طریق ایمیل، میتوان کاربران را از تغییرات مطلع ساخت و حتی امنیت وبسایت را بهبود بخشید. استفاده از یک سیستم ارسال ایمیل در جلوگیری از ثبتنام کاربران نامعتبر و رباتها بسیار اهمیت دارد. در این مقاله، با کتابخانه PHPMailer آشنا میشویم و از طریق یک مثال عملی ، نحوه ارسال ایمیل با استفاده از phpmailer را آموزش میدهیم.
PHPMailer چیست و چه ویژگی های دارد؟
PHPMailer یک کتابخانه قدرتمند و محبوب در زبان برنامهنویسی PHP است که برای ارسال ایمیلها از طریق سرور SMTP یا PHP مستقیم استفاده میشود. این کتابخانه امکانات گستردهای برای ایجاد و ارسال ایمیلها در PHP فراهم میکند و به برنامهنویسان اجازه میدهد تا با استفاده از پروتکلهای SMTP، SSL و TLS، ایمیلها را با قابلیتهای پیشرفته مانند ضمیمهها، تصاویر، قالببندی HTML و امضاهای دیجیتالی ارسال کنند.
مزایای استفاده از PHPMailer عبارتند از:
- سهولت استفاده: PHPMailer از روشهای سادهای برای ایجاد و ارسال ایمیلها استفاده میکند که برنامهنویسان حتی با تجربه کم نیز میتوانند از آن استفاده کنند.
- امنیت: با استفاده از پروتکلهای امنیتی مانند SSL و TLS، PHPMailer امکان ارسال ایمیلها را با امنیت بالا فراهم میکند.
- پشتیبانی از قابلیتهای پیشرفته: PHPMailer از ویژگیهای مانند ضمیمهها، تصاویر، قالببندی HTML و امضاهای دیجیتالی پشتیبانی میکند، که به برنامهنویسان امکان میدهد ایمیلهای پیچیدهتر را ایجاد کنند.
- سازگاری: PHPMailer با اکثر سرورها و ایمیل سرویسها سازگاری کامل دارد و به برنامهنویسان امکان میدهد تا بدون مشکلات سازگاری ایمیلها را ارسال کنند.
به طور کلی، PHPMailer یک ابزار قدرتمند برای ارسال ایمیلها در PHP است که به برنامهنویسان امکان میدهد فرآیند ارسال ایمیل را سادهتر و قابل اعتمادتر کنند.
در عوض استفاده از کتابخانه PHPMailer، میتوان از تابع mail() در PHP استفاده کرد. با این حال، این تابع برای عملکرد صحیح نیاز به تنظیمات سرور ایمیل دارد که ممکن است در هنگام تغییرات مشکلاتی ایجاد کند. اگر از یک محیط توسعه محلی برای توسعه کد استفاده کنید، اصلاً اجازه تغییرات در سرور ایمیل را ندارید. یک مسئله دیگر این است که با استفاده از این تابع، امکان استفاده همزمان از چندین پیکربندی وجود ندارد. به عنوان مثال، امکان استفاده همزمان از چندین حساب SMTP و جابجایی بین آنها وجود ندارد.
تابع mail برای ارسال ایمیلهای ساده مناسب است، اما اگر نیاز به ارسال فایلهای غیرمتنی یا انجام کارهای پیچیدهتری باشد، کارآیی آن محدود است. از طرفی، با اضافه کردن چند خط کد، PHPMailer به راحتی امکان ارسال ایمیلهای پیچیدهتر را فراهم میکند.
تابع ()mail یا ()PHPMailer ؟
انتخاب بین تابع mail()
و کتابخانه PHPMailer
بستگی به نیازها و متقاضیان شما دارد. در ادامه، برخی از مواردی که برای انتخاب مناسب بین این دو مورد باید در نظر گرفته شوند را بررسی میکنیم:
استفاده از تابع mail()
:
- سادگی: تابع
mail()
بسیار ساده است و برای ارسال ایمیلهای ساده و بدون نیاز به قابلیتهای پیشرفته میتواند مناسب باشد. - عملکرد محلی: اگر برنامه خود را بر روی یک محیط توسعه محلی اجرا میکنید و نیاز به تست ارسال ایمیل دارید، تابع
mail()
میتواند راه حل مناسبی باشد. - سازگاری: تابع
mail()
به طور عمومی با تمام سرورها سازگار است و نیازی به نصب کتابخانه خارجی ندارد.
استفاده از کتابخانه PHPMailer
:
- قابلیتهای پیشرفته: اگر نیاز به ارسال ایمیل با ضمیمهها، قالببندی HTML پیچیده، تصاویر یا امضاهای دیجیتالی دارید،
PHPMailer
امکانات گستردهتری را فراهم میکند و به شما اجازه میدهد ایمیلهای پیچیدهتر را ایجاد کنید. - امنیت: با استفاده از پروتکلهای SSL و TLS،
PHPMailer
امکان ارسال ایمیل با امنیت بالا را فراهم میکند. - قابلیت پیکربندی: با
PHPMailer
میتوانید چندین پیکربندی را به طور همزمان استفاده کنید، از جمله ارسال ایمیل از طریق چند حساب SMTP و جابجایی بین آنها.
به طور کلی، اگر نیاز به امکانات پیشرفتهتری برای ایمیلهای خود دارید، مانند ضمیمهها، قالببندی HTML پیچیده و امنیت بالا، PHPMailer
گزینه بهتری است. اگر ایمیلهای سادهتری را برای ارسال دارید و نیازی به امکانات پیشرفته ندارید، تابع mail()
میتواند کافی باشد.
آموزش دانلود و نصب کتابخانه ()PHPMailer
همانطور که قبلاً اشاره کردیم، شما میتوانید کتابخانه PHPMailer را به صورت رایگان از لینک زیر به طور کامل دانلود کنید:
اگرچه نیازی به دانلود کامل کتابخانه نیست، زیرا شما ممکن است از تمام کلاسهای آن استفاده نکنید. با استفاده از این کتابخانه، میتوانید ایمیل را از هر سروری ارسال کنید، شامل سرورهای Gmail، Yahoo، Outlook و غیره. با این حال، اگر شما یک هاست دارید، توصیه میکنم از اطلاعات SMTP خود برای ارسال ایمیل استفاده کنید.
برای نصب PHPMailer
با استفاده از Composer، میتوانید مراحل زیر را دنبال کنید:
- ابتدا مطمئن شوید که Composer در سیستم شما نصب شده است. شما میتوانید با اجرای دستور
composer --version
در خط فرمان، نصب Composer را بررسی کنید. در صورتی که Composer نصب نیست، باید آن را نصب کنید. برای نصب Composer، به صفحه رسمی Composer در آدرس زیر مراجعه کنید:
https://getcomposer.org/ - در پروژه خود، یک فایل
composer.json
ایجاد کنید یا اگر این فایل از قبل وجود دارد، آن را ویرایش کنید. - به فایل
composer.json
خود بروید و بخش"require"
را پیدا کنید. در اینجا باید"phpmailer/phpmailer"
را به عنوان وابستگی پروژه اضافه کنید. مطمئن شوید که نسخه مورد نظر را هم مشخص کنید. برای مثال:
json
{
"require": {
"phpmailer/phpmailer": "^6.5"
}
}
- پس از اضافه کردن وابستگی، در خط فرمان به مسیر پروژه خود بروید و دستور
composer install
را اجرا کنید. این دستور Composer را متوقف میکند و وابستگیهای پروژه را نصب میکند. Composer فایلcomposer.lock
را ایجاد میکند و کتابخانهPHPMailer
به پروژه شما اضافه میشود. - حالا میتوانید
PHPMailer
را در کد PHP خود فراخوانی کنید. مثال زیر نشان میدهد چطور کتابخانه را فراخوانی کنید:
require 'vendor/autoload.php';
// PHPMailer
$mail = new PHPMailer\PHPMailer\PHPMailer();
if ($mail->send()) {
} else {
' . $mail->ErrorInfo;
}
- توجه داشته باشید که پس از نصب
PHPMailer
با استفاده از Composer، فایلcomposer.json
و فولدرvendor
در پروژه شما ایجاد میشوند. فایلautoload.php
در داخل فولدرvendor
، کدی است که بارگیری خودکار کلاسهایPHPMailer
را انجام میدهد. لذا در کد PHP خود، با اضافه کردنrequire 'vendor/autoload.php';
، فایلautoload.php
را فراخوانی کنید.
مثال ساده از ارسال ایمیل با PHPMailer
(جامع)
در ادامه یک مثال ساده اما جامع و کاربردی برای ارسال ایمیل از سرور وب محلی با استفاده از PHPMailer
آمده است.
<?php
require 'vendor/autoload.php';
// Using the PHPMailer class
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Creating an instance of PHPMailer class
$mail = new PHPMailer(true);
try {
// SMTP settings
$mail->isSMTP();
$mail->Host = 'smtp.example.com'; // SMTP server address
$mail->SMTPAuth = true;
$mail->Username = 'your_username'; // SMTP username
$mail->Password = 'your_password'; // SMTP password
$mail->SMTPSecure = 'tls'; // Security type (tls or ssl)
$mail->Port = 587; // SMTP server port
// Email sending settings
$mail->setFrom('[email protected]', 'Sender Name'); // Sender email address and name
$mail->addAddress('[email protected]', 'Recipient Name'); // Recipient email address and name
$mail->Subject = 'Test Email'; // Email subject
$mail->Body = 'This is a test email.'; // Email body
// Send email
$mail->send();
echo 'Email sent successfully.';
} catch (Exception $e) {
echo 'An error occurred while sending the email: ' . $mail->ErrorInfo;
}
?>
در این مثال، ابتدا کتابخانه PHPMailer
و کلاسهای مورد نیاز را فراخوانی کرده و یک نمونه از کلاس PHPMailer
ایجاد میکنیم. سپس تنظیمات SMTP را برای اتصال به سرور SMTP تنظیم میکنیم. نام کاربری و رمز عبور SMTP خود را در این تنظیمات قرار دهید و سایر جزئیات اتصال را نیز مطابق با سرور SMTP خود تنظیم کنید.
سپس تنظیمات ارسال ایمیل اعمال میشود. شما میتوانید آدرس ایمیل فرستنده و گیرنده، موضوع و متن ایمیل را در این تنظیمات تغییر دهید.
در نهایت، با استفاده از send()
، ایمیل ارسال میشود. در صورت موفقیت آمیز بودن ارسال، پیام “ایمیل با موفقیت ارسال شد.” نمایش داده میشود. در غیر این صورت، پیام خطا مربوطه نمایش داده میشود.
لطفاً توجه داشته باشید که بایدر مثال قبلی، هرچند ساده است، اما برای استفاده صحیح از PHPMailer
، باید تنظیمات SMTP را با مشخصات سرور SMTP و اطلاعات حساب کاربری خود تنظیم کنید. همچنین، ممکن است بسته به پیکربندی سرور SMTP شما، نیاز به تنظیمات اضافی داشته باشید. برای استفاده در سرور وب محلی، معمولاً میتوانید از سرور SMTP محلی خود (مانند localhost
) استفاده کنید، اما باید تنظیمات SMTP را مطابق با پیکربندی سرور خود تنظیم کنید.
در زیر مثالی ارائه شده است که برای ارسال ایمیل از سرور وب محلی با استفاده از PHPMailer
در نظر گرفته شده است:
<?php
require 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer(true);
try {
// SMTP settings for local web server
$mail->isSMTP();
$mail->Host = 'localhost'; // Local SMTP server address
$mail->Port = 25; // Local SMTP server port
// Email sending settings
$mail->setFrom('[email protected]', 'Sender Name'); // Sender email address and name
$mail->addAddress('[email protected]', 'Recipient Name'); // Recipient email address and name
$mail->Subject = 'Test Email'; // Email subject
$mail->Body = 'This is a test email.'; // Email body
// Send email
$mail->send();
echo 'Email sent successfully.';
} catch (Exception $e) {
echo 'An error occurred while sending the email: ' . $mail->ErrorInfo;
}
?>
در این مثال، تنظیمات SMTP برای سرور وب محلی تنظیم شده است. localhost
به عنوان آدرس سرور SMTP و پورت ۲۵
استفاده شده است. برای استفاده در سرور وب محلی، احتمالاً نیازی به تأیید هویت (احراز هویت) در سرور SMTP محلی نیست.
شما میتوانید آدرس ایمیل فرستنده و گیرنده، موضوع و متن ایمیل را در مثال فوق تغییر دهید.
ارسال ایمیل با پیوست در PHPMailer
برای ارسال ایمیل با پیوستها با استفاده از PHPMailer، میتوانید کد را به شکل زیر تغییر دهید:
<?php
require 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer(true);
try {
// SMTP settings
$mail->isSMTP();
$mail->Host = 'smtp.example.com'; // SMTP server address
$mail->SMTPAuth = true;
$mail->Username = 'your_username'; // SMTP username
$mail->Password = 'your_password'; // SMTP password
$mail->SMTPSecure = 'tls'; // Security type (tls or ssl)
$mail->Port = 587; // SMTP server port
// Email sending settings
$mail->setFrom('[email protected]', 'Sender Name'); // Sender email address and name
$mail->addAddress('[email protected]', 'Recipient Name'); // Recipient email address and name
$mail->Subject = 'Test Email'; // Email subject
$mail->Body = 'This is a test email.'; // Email body
// Attachments
$mail->addAttachment('path/to/file1.pdf', 'File 1'); // Add attachment with a custom name
$mail->addAttachment('path/to/file2.jpg'); // Add attachment with the original name
// Send email
$mail->send();
echo 'Email sent successfully.';
} catch (Exception $e) {
echo 'An error occurred while sending the email: ' . $mail->ErrorInfo;
}
?>
در کد فوق، دو پیوست به ایمیل با استفاده از متد addAttachment اضافه میشوند. پارامتر اول مسیر فایل است و پارامتر دوم (اختیاری) نام پیوست است. شما میتوانید با فراخوانی متد addAttachment چندین بار با مسیرهای فایل مختلف، پیوست اضافه کنید.
حتماً به جای ‘path/to/file1.pdf’ و ‘path/to/file2.jpg’ مسیرهای واقعی پیوستهای خود را قرار دهید.
بازیابی ایمیل از طریق POP3
برای بازیابی ایمیل با استفاده از پروتکل POP3 (Post Office Protocol version 3) در PHP، میتوانید از کتابخانه PHPMailer همراه با کتابخانه PHP-IMAP استفاده کنید. PHP-IMAP به شما امکان میدهد تا به ایمیلها در سرور POP3 دسترسی پیدا کرده و آنها را بازیابی کنید. در زیر یک مثال کد برای بازیابی ایمیل با استفاده از POP3 آمده است:
<?php
require_once 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// POP3 server settings
$hostname = 'pop.example.com'; // POP3 server address
$username = 'your_username'; // POP3 username
$password = 'your_password'; // POP3 password
$port = 995; // POP3 server port
// Connect to the POP3 server
$inbox = imap_open("{{$hostname}:{$port}/pop3/ssl/novalidate-cert}", $username, $password) or die('Cannot connect to POP3: ' . imap_last_error());
// Get the total number of emails in the inbox
$total_emails = imap_num_msg($inbox);
// Retrieve emails
for ($i = 1; $i <= $total_emails; $i++) {
// Get email header information
$header_info = imap_headerinfo($inbox, $i);
// Display email header information
echo 'From: ' . $header_info->fromaddress . '<br>';
echo 'Subject: ' . $header_info->subject . '<br>';
echo 'Date: ' . $header_info->date . '<br>';
// Get the email body
$email_body = imap_fetchbody($inbox, $i, 1.1);
// Display the email body
echo 'Body: ' . $email_body . '<br>';
}
// Disconnect from the POP3 server
imap_close($inbox);
?>
در کد فوق، ابتدا تنظیمات سرور POP3 را تعیین کنید، سپس با استفاده از تابع imap_open
به سرور POP3 متصل شوید و به ایمیلها دسترسی پیدا کنید. سپس با استفاده از توابع imap_num_msg
و imap_headerinfo
اطلاعات هدر ایمیلها را دریافت کرده و با استفاده از تابع imap_fetchbody
متن ایمیلها را بازیابی میکنید.
مراقب باشید که به جای 'pop.example.com'
، 'your_username'
و 'your_password'
مقادیر مربوطه را با اطلاعات واقعی سرور POP3 خود جایگزین نمایید.
رفع ارور و عیب یابی در PHPMailer
PHPMailer یک کتابخانه قدرتمند برای ارسال ایمیل در PHP است. در صورتی که با مشکلی در استفاده از PHPMailer مواجه شدهاید، میتوانید از روشهای زیر برای عیب یابی استفاده کنید:
بررسی خطاها و پیغامها: بررسی پیغام خطاها و پیغامهایی که PHPMailer در هنگام اجرا میدهد، میتواند به شما کمک کند تا دلیل مشکل را متوجه شوید. شما میتوانید از متغیر $mail->ErrorInfo
برای نمایش پیغام خطا استفاده کنید.
} catch (Exception $e) {
echo 'An error occurred while sending the email: ' . $mail->ErrorInfo;
}
```
بررسی تنظیمات SMTP: بررسی تنظیمات SMTP مانند آدرس سرور SMTP، پورت، نام کاربری و رمز عبور برای اطمینان از صحت آنها بسیار مهم است. مطمئن شوید که از اطلاعات صحیح برای سرور SMTP استفاده میکنید.
بررسی قوانین فایروال: بعضی از فایروالها و سیستمهای امنیتی ممکن است از ارسال ایمیلها جلوگیری کنند یا آنها را به عنوان اسپم در نظر بگیرند. در صورتی که ایمیل شما ارسال نمیشود، میتوانید با مدیر سیستم یا سرویس دهنده خود تماس بگیرید و از ایشان بخواهید تا بررسی کنند که آیا ایمیل شما به درستی ارسال میشود یا خیر.
بررسی نسخه PHPMailer و PHP: مطمئن شوید که شما از نسخه مناسب PHPMailer و نسخه سازگار PHP استفاده میکنید. بررسی مستندات رسمی PHPMailer برای اطمینان از نسخه مورد نیاز و سازگاری با نسخه PHP استفاده شده مفید است.
بررسی دسترسی فایلها: اگر از پیوستها استفاده میکنید، مطمئن شوید که فایلهای مورد نظر قابل دسترسی هستند و مسیرهای فایلها درست است. اطمینان حاصل کنید که فایلها و دایرکتوریها قابل خواندن و دسترسی برای PHP هستند.
این روشها میتوانند به شما در عیب یابی مشکلات مربوط به PHPMailer کمک کنند. همچنین، میتوانید به مستندات رسمی PHPMailer مراجعه کنید و در صورت نیاز از منابع دیگری برای رفع مشکل استفاده کنید.