TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #120 346
ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ 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
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 &rlm;LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  5. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
  6. Aug 27, 2026&rlm;یک قطعه‌کد زیر را در نظر بگیرید (زبان: PHP). تمرکز روی رفتار generator و ارجاع‌ها است…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →