آموزش کامل ارسال ایمیل با PHP بر اساس استانداردهای جدید گوگل (2024)
مقدمه: چرا ایمیلهای PHP ما اسپم میشوند؟
بسیاری از توسعهدهندگان وب پس از استفاده از تابع پیشفرض mail() در PHP متوجه میشوند که ایمیلهای ارسالی آنها مستقیماً به پوشه اسپم (Spam) منتقل شده یا اصلاً تحویل داده نمیشوند. علت اصلی این موضوع، عدم تایید هویت فرستنده ایمیل و رعایت نکردن پروتکلهای امنیتی است. گوگل و یاهو از سال ۲۰۲۴ قوانین بسیار سختگیرانهای را برای فرستندگان ایمیل اعمال کردهاند. در این مقاله یاد میگیریم که چطور با استفاده از PHP ایمیلی ارسال کنیم که ۱۰۰٪ تایید شده و به صندوق ورودی (Inbox) کاربران هدایت شود.
استانداردهای سهگانه گوگل برای ارسال ایمیل امن
گوگل برای تایید هویت دامنه شما و تفکیک آن از ارسالکنندگان هرزنامه، سه رکورد DNS حیاتی را الزامی کرده است:
- SPF (Sender Policy Framework): مشخص میکند کدام سرورها اجازه دارند از طرف دامنه شما ایمیل ارسال کنند.
- DKIM (DomainKeys Identified Mail): یک امضای دیجیتال رمزنگاریشده به هدر ایمیل اضافه میکند تا اصالت پیام حفظ شود.
- DMARC (Domain-based Message Authentication): مشخص میکند در صورت رد شدن بررسیهای SPF یا DKIM، گیرنده با ایمیل ارسالی چه رفتاری داشته باشد (مثلاً رد کردن یا پوشه اسپم).
چرا نباید از تابع mail() در PHP استفاده کنیم؟
تابع mail() در PHP اطلاعات هدر کافی را به طور استاندارد ارسال نمیکند و فاقد احراز هویت SMTP است. بهترین جایگزین برای آن، استفاده از کتابخانه محبوب و استاندارد PHPMailer است. این کتابخانه به شما اجازه میدهد تا به سرورهای امن SMTP متصل شده و ایمیلهای خود را منطبق بر آخرین استانداردهای امنیتی ارسال کنید.
گام اول: نصب PHPMailer
بهترین و سادهترین راه برای نصب کتابخانه PHPMailer استفاده از مدیریت پکیج Composer است. ترمینال خود را در مسیر پروژه باز کرده و دستور زیر را اجرا کنید:
composer require phpmailer/phpmailer
گام دوم: پیادهسازی کد ارسال ایمیل با PHP و PHPMailer
در این بخش، یک اسکریپت کامل برای ارسال ایمیل با اتصال به یک SMTP معتبر (مانند جیمیل یا سرور هاست خودتان) ایجاد میکنیم. این ساختار تمام هدرهای استاندارد مورد نیاز گوگل را رعایت میکند:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// لود کردن اتولودر کامپوزر
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
// تنظیمات سرور SMTP
$mail->isSMTP(); // ارسال از طریق SMTP
$mail->Host = 'mail.yourdomain.com'; // آدرس سرور SMTP شما
$mail->SMTPAuth = true; // فعالسازی تایید هویت SMTP
$mail->Username = 'info@yourdomain.com'; // نام کاربری ایمیل
$mail->Password = 'your_strong_password'; // رمز عبور ایمیل
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // رمزنگاری امن TLS
$mail->Port = 587; // پورت استاندارد TLS
// تنظیم کاراکترست برای پشتیبانی کامل از زبان فارسی
$mail->CharSet = 'UTF-8';
// اطلاعات فرستنده و گیرنده
$mail->setFrom('info@yourdomain.com', 'وبسایت ما');
$mail->addAddress('recipient@gmail.com', 'کاربر گرامی'); // افزودن گیرنده
$mail->addReplyTo('support@yourdomain.com', 'پشتیبانی');
// محتوای ایمیل
$mail->isHTML(true); // فرمت ایمیل به صورت HTML
$mail->Subject = 'تایید حساب کاربری - استانداردهای جدید گوگل';
// طراحی بدنه ایمیل به صورت HTML
$mail->Body = '
< div style = " direction: rtl; font-family: Tahoma; padding: 20px; line-height: 1.8; " >
< h2 style = " color: #2c3e50; " > سلام کاربر عزیز < / h2 >
< p > ثبتنام شما با موفقیت انجام شد. این ایمیل با رعایت استانداردهای جدید امنیتی ارسال شده است. < / p >
< / div > ';
$mail->AltBody = 'سلام کاربر عزیز، ثبتنام شما با موفقیت انجام شد.'; // نسخه متنی ساده برای کلاینتهای قدیمی
$mail->send();
echo 'ایمیل با موفقیت ارسال شد و در اینباکس قرار خواهد گرفت!';
} catch (Exception $e) {
echo "خطا در ارسال ایمیل. جزئیات خطا: {$mail->ErrorInfo}";
}
گام سوم: چیدمان رکوردهای DNS در هاست
برای نهایی کردن استانداردسازی، وارد کنترل پنل هاست خود (سیپنل یا دایرکتادمین) شده و در بخش Zone Editor رکوردهای زیر را تنظیم کنید:
۱. رکورد SPF:
یک رکورد از نوع TXT بسازید که مقدار آن به صورت زیر باشد (این مقدار نشان میدهد سرور هاست شما مجاز به ارسال است):
v=spf1 mx include:secureserver.net ~all
۲. رکورد DKIM:
معمولاً کنترل پنل هاست شما گزینهای به نام "Email Deliverability" دارد که کلید عمومی DKIM را به طور خودکار تولید کرده و به رکوردهای DNS شما اضافه میکند. اطمینان حاصل کنید که وضعیت آن Active باشد.
۳. رکورد DMARC:
یک رکورد TXT دیگر با نام _dmarc.yourdomain.com بسازید و مقدار زیر را در آن قرار دهید تا سیاستهای سختگیرانه برای ایمیلهای نامعتبر اعمال شود:
v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc-reports@yourdomain.com
نتیجهگیری
با مهاجرت از تابع قدیمی mail() به کتابخانه امن PHPMailer، پیکربندی صحیح پورتهای TLS (پورت ۵۸۷) و تنظیم رکوردهای سهگانه SPF، DKIM و DMARC در مدیریت DNS دامنه خود، با خیال راحت میتوانید مطمئن باشید که تمامی ایمیلهای ارسالی سیستم PHP شما به سلامت به صندوق ورودی (Inbox) کاربران جیمیل و سایر سرویسدهندگان معتبر تحویل داده خواهند شد.
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید