ارسال ایمیل تأیید ثبتنام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه PHP جدی لازم میشود. اینجا با هم یک ماژول ساده و تمیز با PHPMailer میسازیم که هم امن باشد، هم قابلگسترش. 😉
منبع اصلیای که ایدهها ازش گرفته شده، داکیومنت رسمی و مثالهای PHPMailer در گیتهاب است؛ حتماً ارزش یک نگاه عمیقتر را دارد. 🔍
۱️⃣ نصب PHPMailer با Composer
اول مطمئن شو روی سرور یا سیستم لوکال، Composer نصب است. بعد داخل رoot پروژه این دستور را بزن:
composer require phpmailer/phpmailer
حالا پوشه vendor ساخته میشود و میتوانی از Autoload استفاده کنی.
۲️⃣ ساخت یک کلاس EmailService تمیز
بهجای اینکه هرجا لازم شد مستقیم شیء PHPMailer بسازی، بهتر است یک کلاس سرویس داشته باشی تا کانفیگ SMTP فقط یکجا باشد و بعداً راحت عوض شود (مثلاً وقتی از Gmail رفتی روی Mailgun یا SMTP هاست).
یک فایل مثل EmailService.php بساز و ساختار را شبیه مثال زیر نگه دار 👇
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require __DIR__ . '/vendor/autoload.php';
class EmailService
{
private PHPMailer $mailer;
public function __construct()
{
$this->mailer = new PHPMailer(true);
// تنظیمات پایه SMTP
$this->mailer->isSMTP();
$this->mailer->Host = '
smtp.gmail.com';
$this->mailer->SMTPAuth = true;
$this->mailer->Username = 'your-email@gmail.com';
$this->mailer->Password = 'app-password-here';
$this->mailer->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$this->mailer->Port = 587;
$this->mailer->setFrom('no-reply@yourapp.test', 'Your App');
$this->mailer->isHTML(true);
$this->mailer->CharSet = 'UTF-8';
}
public function send(string $to, string $subject, string $htmlBody): bool
{
try {
$this->mailer->clearAllRecipients();
$this->mailer->addAddress($to);
$this->mailer->Subject = $subject;
$this->mailer->Body = $htmlBody;
return $this->mailer->send();
} catch (Exception $e) {
error_log('Mail error: ' . $e->getMessage());
return false;
}
}
}
🔐 نکته مهم: برای Gmail باید از App Password استفاده کنی (نه پسورد عادی اکانت). راهنماش توی صفحه رسمی گوگل موجود است و بدون این کار معمولاً اتصال SMTP بلاک میشود.
۳️⃣ استفاده در سناریوی واقعی
مثلاً بعد از ثبتنام، یک لینک فعالسازی بفرست:
$emailService = new EmailService();
$activationLink = '
https://yourapp.test/activate?token=' . urlencode($token);
$html = "سلام {$userName}!<br>برای فعالسازی حسابت روی لینک زیر کلیک کن:<br><a href='{$activationLink}'>فعالسازی حساب";
$emailService->send($userEmail, 'فعالسازی حساب کاربری', $html);
🧩 چند نکته تجربی کوتاه:
- لاگ ارور را حتماً جایی ذخیره کن تا اگر روی سرور ایمیل نرسید، راحتتر دیباگ شود.
- محتوا را هم HTML نگه دار، هم یک نسخه متن ساده برای سازگاری بهتر با بعضی کلاینتها (قابلیت AltBody در PHPMailer).
- اطلاعات SMTP و پسوردها را داخل فایل env. نگه دار، نه مستقیم داخل کلاس.
در هر پروژه جدید، داشتن یک EmailService آماده کلی زمان ذخیره میکند. اگر این ساختار را کمی برای خودت شخصیسازی کنی، عملاً یک ماژول ایمیل قابلاستفاده مجدد برای تمام پروژههای PHP خواهی داشت. 🚀
🔖 #PHP #پی_اچ_پی #PHP #PHPMailer #Email #SMTP #Backend #Security
👤 Developix
💎 Channel:
@DevelopixPHP