ایمیل ارسال نمیشود و هیچ خطایی هم نمیبینی؟ در بیشتر موارد وردپرس پیام را به تابع mail() سرور میسپارد و سرور آن را بیصدا دور میریزد. راه قطعی این است که ارسال را از مسیر SMTP یک سرویس واقعی ببری و متن خطای سرور را بخوانی. تفاوت خطای احراز هویت با خطای پورت، اولین چیزی است که باید تشخیص بدهی.
در بسیاری از سایتهای وردپرس، مشکل عدم ارسال ایمیل میتواند به سادگی از تنظیمات سرور یا افزونههای ایمیلساز ناشی شود. اکثر کاربران ابتدا به این فکر میکنند که مشکل فقط در فرم تماس یا اعلانهای خودکار است، اما در واقع ریشهٔ مشکل میتواند در پیکربندی PHP mail، محدودیتهای میزبان یا استفاده از SMTP نادرست باشد. وقتی یک ایمیل بهدرستی ارسال نمیشود، معمولاً پیامهای خطای «SMTP connect() failed» یا «mail() has been disabled» در لاگها ظاهر میشوند که نشانگر مشکلات پیکربندی هستند.
فهرست مطالب
- درک مشکل ارسال ایمیل وردپرس
- بررسی تنظیمات سرور ایمیل
- تشخیص نوع خطا: احراز هویت یا پورت
- پیکربندی SMTP با افزونه معتبر
- تنظیم SMTP در WP Mail SMTP و FluentSMTP (مسیر منو)
- محدودیتهای Gmail و سرویسهای ایرانی؛ چه زمانی سرویس را عوض کنیم
- تست ارسال ایمیل پس از تنظیمات
- تست تحویل ایمیل و خواندن هدر پیام
- رفع خطاهای رایج و لاگها
- خطاهای رایج ایمیل وردپرس با متن دقیق پیام
- سوالات متداول
درک مشکل ارسال ایمیل وردپرس
در بسیاری از سایتهای وردپرس، مشکل عدم ارسال ایمیل میتواند به سادگی از تنظیمات سرور یا افزونههای ایمیلساز ناشی شود. اکثر کاربران ابتدا به این فکر میکنند که مشکل فقط در فرم تماس یا اعلانهای خودکار است، اما در واقع ریشهٔ مشکل میتواند در پیکربندی PHP mail، محدودیتهای میزبان یا استفاده از SMTP نادرست باشد. وقتی یک ایمیل بهدرستی ارسال نمیشود، معمولاً پیامهای خطای «SMTP connect() failed» یا «mail() has been disabled» در لاگها ظاهر میشوند که نشانگر مشکلات پیکربندی هستند.
یک نگاه دقیق به عوامل متداول میتواند به شناسایی سریع کمک کند. جدول زیر خلاصهای از علائم رایج و دلایل محتمل آنها را ارائه میدهد:
| علائم | دلایل محتمل |
|---|---|
| عدم دریافت ایمیلهای ثبتنام کاربر | تابع mail() توسط سرور میزبانی مسدود شده است |
خطای SMTP connect() failed در لاگ | پورت بسته یا فیلترشده، ناسازگاری رمزنگاری با پورت، یا نام میزبان اشتباه — نه رمز عبور |
خطای Could not authenticate یا کد 535 در لاگ | اطلاعات احراز هویت SMTP نادرست است و سرور رمز را رد کرده |
| ایمیلها به پوشهٔ اسپم میروند | پیکربندی DKIM/SPF ناقص یا دامنهٔ فرستنده ناآشنا برای سرویس گیرنده |
| فقط برخی از ایمیلها (مانند اعلانهای WooCommerce) ارسال میشوند | تداخل افزونههای ایمیلساز یا استفاده از توابع سفارشی بدون تنظیمات SMTP |
یک مثال عملی میتواند روشنساز باشد: فرض کنید یک فروشگاه آنلاین با افزونهٔ WooCommerce دارید و پس از ثبت سفارش، مشتری ایمیل تأیید دریافت نمیکند. اگر لاگهای سرور را بررسی کنید، ممکن است خطای «553 5.7.1 Sender address rejected: not owned by user» ببینید؛ این نشان میدهد که آدرس From Email با حساب احرازشدهٔ SMTP یکی نیست و سرور ایمیل، فرستندهٔ ناهمخوان را رد میکند. در این حالت یکسان کردن آدرس فرستنده با نام کاربری SMTP مشکل را میبندد؛ افزودن رکوردهای SPF این خطا را رفع نمیکند.
در نهایت، برای تشخیص دقیق میتوانید یک تست سادهٔ ایمیل با ابزارهای داخلی وردپرس اجرا کنید؛ بهعنوان مثال از مسیر WP Mail SMTP → Tools → Email Test استفاده کنید. این ابزار پیام تستی به آدرس ایمیل دلخواه میفرستد و در صورت موفقیت یا شکست، جزئیات خطا را نمایش میدهد. با این اطلاعات، میتوانید بهسرعت تصمیم بگیرید که آیا باید تنظیمات PHP mail را تغییر دهید، سرویس SMTP جدیدی پیکربندی کنید یا با پشتیبان میزبانی خود دربارهٔ محدودیتهای ایمیلارسالی مشورت کنید.
بررسی تنظیمات سرور ایمیل
قبل از اینکه به سراغ افزونههای ایمیل یا سرویسهای شخص ثالث بروید، ابتدا باید تنظیمات سرور ایمیل خود را در وردپرس بررسی کنید. بسیاری از مشکلات «ارسال نشدن ایمیل» ناشی از پیکربندی نادرست سرویسنامهٔ mail() یا عدم دسترسی به سرویس SMTP میشود. بنابراین، اطمینان از اینکه سرور میتواند ایمیلها را از طریق روشهای استاندارد ارسال کند، گام اساسی برای رفع مشکل است.
در اکثر سرورهای میزبانی مشترک، تابع mail() توسط PHP فعال است، اما ممکن است مسیر sendmail_path اشتباه یا محدودیتهای امنیتی مانع ارسال شود. برای بررسی این موضوع میتوانید فایل phpinfo() را اجرا کنید و بخش mail function را جستجو کنید. اگر مقدار SMTP خالی یا بهصورت localhost تنظیم شده باشد، ولی سرور شما از سرویس SMTP خارجی (مانند Gmail یا یک سرویس ایمیل تجاری) استفاده میکند، نیاز به تنظیمات جدید دارید.
اگر تصمیم به استفاده از SMTP گرفتید، یک هشدار مهم: وردپرس هیچ ثابتی مانند WP_MAIL_SMTP_HOST یا WP_MAIL_SMTP_PASS نمیشناسد. اگر چنین خطوطی را به wp-config.php اضافه کنید، هیچ اتفاقی نمیافتد و هیچ خطایی هم نمیگیرید؛ فقط وقت از دست میدهید. تنظیم SMTP در هستهٔ وردپرس فقط از راه قلاب phpmailer_init انجام میشود یا از راه افزونهٔ SMTP. کد زیر را در فایل wp-content/mu-plugins/smtp-site.php بگذارید (اگر پوشهٔ mu-plugins نیست، خودتان بسازید):
<?php
/**
* Plugin Name: SMTP سایت
* مسیر: wp-content/mu-plugins/smtp-site.php
*/
add_action( 'phpmailer_init', function ( $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com';
$phpmailer->Port = 587;
$phpmailer->SMTPAuth = true;
$phpmailer->Username = '[email protected]';
$phpmailer->Password = 'APP-PASSWORD-HERE';
$phpmailer->SMTPSecure = 'tls'; // ۵۸۷ = tls و ۴۶۵ = ssl
$phpmailer->From = '[email protected]';
$phpmailer->FromName = 'نام سایت';
$phpmailer->SMTPDebug = 0;
}, 99 );
در ادامه یک جدول خلاصهٔ تنظیمات پایهٔ SMTP را میتوانید ببینید. این جدول میتواند بهعنوان یک چکلیست سریع هنگام پیکربندی استفاده شود.
| پارامتر | مقدار پیشنهادی | نکته کلیدی |
|---|---|---|
| Host | smtp.example.com | آدرس سرور خروجی ایمیل |
| Port | 587 (TLS) یا 465 (SSL) | پروتکل رمزنگاری مورد استفاده |
| Username | [email protected] | نام کاربری حساب ایمیل |
| Password | رمز برنامه یا رمز صندوق | در Gmail باید App Password باشد |
| Encryption | tls یا ssl | بسته به پورت انتخاب کنید |
| Authentication | فعال | اکثر سرویسها این گزینه را میخواهند |
حالا خود مسیر شبکه را بسنجید. بیشتر خطاهایی که «خطای رمز» به نظر میرسند، در واقع پورت بستهاند. این دو دستور را روی همان سروری اجرا کنید که وردپرس روی آن است:
# آزمون باز بودن پورت خروجی
timeout 8 bash -c 'cat < /dev/null > /dev/tcp/smtp.example.com/587'
&& echo "OK: 587 reachable" || echo "BLOCKED: 587"
# آزمون دستدادن TLS روی هر دو پورت
openssl s_client -connect smtp.example.com:587 -starttls smtp -servername smtp.example.com </dev/null 2>/dev/null | head -5
openssl s_client -connect smtp.example.com:465 -servername smtp.example.com </dev/null 2>/dev/null | head -5
اگر دستور اول BLOCKED داد، مشکل رمز نیست؛ فایروال خروجی است. اگر s_client روی ۵۸۷ پاسخ داد ولی روی ۴۶۵ نه، فقط باید tls با پورت ۵۸۷ بگذارید.
پس از اعمال تنظیمات، میتوانید با یک ایمیل تست ساده (از طریق افزونهٔ «WP Mail SMTP» یا این فرمان در WP‑CLI) عملکرد را بررسی کنید:
wp eval 'var_dump( wp_mail( "[email protected]", "تست وردپرس", "این یک پیام آزمایشی است." ) );'
اگر پیام تست با موفقیت دریافت شد، یعنی تنظیمات سرور ایمیل شما صحیح است و میتوانید به مرحلهٔ بررسی افزونهها یا فایروالهای سرور بپردازید.
تشخیص نوع خطا: احراز هویت یا پورت
این تفکیک بیشترین زمان را در عیبیابی صرفهجویی میکند و بیشتر راهنماها آن را قاطی میکنند. دو خطا کاملاً متفاوتاند:
| خطا | کجا شکسته است | اولین کاری که باید بکنید |
|---|---|---|
SMTP connect() failed یا Could not connect to SMTP host | لایهٔ انتقال — هیچوقت به مرحلهٔ رمز نرسیده | آزمون پورت بالا را اجرا کنید؛ رمز را دست نزنید |
SMTP Error: Could not authenticate. | لایهٔ احراز هویت — اتصال برقرار شده، رمز رد شده | نام کاربری و رمز یا رمز برنامه را بازبینی کنید |
stream_socket_enable_crypto(): SSL operation failed | ناسازگاری رمزنگاری با پورت | ۵۸۷ را با tls و ۴۶۵ را با ssl ست کنید |
553 5.7.1 Sender address rejected | فرستنده با حساب احرازشده یکی نیست | From Email را با Username یکسان کنید |
550-5.7.1 … unsolicited mail | سیاست ضداسپم گیرنده | SPF/DKIM را درست کنید و محتوای پیام را بازبینی کنید |
ابزار دوم، ثبت دلیل شکست است. این قطعه را موقتاً به functions.php قالب فرزند یا به همان فایل mu-plugin اضافه کنید؛ پیام دقیق سرور در error_log مینشیند:
add_action( 'wp_mail_failed', function ( $error ) {
error_log( 'WP_MAIL_FAILED: ' . $error->get_error_message() );
} );
ابزار سوم، دیدن کامل گفتوگوی SMTP است. با SMTPDebug سطح ۲ هر دستور و پاسخ سرور در لاگ میآید و معلوم میشود کجا قطع شده است: روی EHLO میماند یا روی AUTH:
add_action( 'phpmailer_init', function ( $phpmailer ) {
$phpmailer->SMTPDebug = 2;
$phpmailer->Debugoutput = function ( $str ) { error_log( 'SMTP: ' . $str ); };
}, 999 );
بعد از عیبیابی، این قطعهها را بردارید. لاگ پر از گفتوگوی SMTP هم فضای دیسک میخورد و هم رمز را در فایل لاگ مینشاند.
پیکربندی SMTP با افزونه معتبر
اکثر مشکلات عدم ارسال ایمیل در وردپرس از طریق تابع wp_mail() رخ میدهد، زیرا سرور میزبانیگر بهصورت پیشفرض از ارسال مستقیم ایمیل (PHP mail) استفاده میکند که اغلب توسط فیلترهای اسپم یا محدودیتهای سروری مسدود میشود. برای رفع این مشکل میتوانید تمام تراکنشهای ایمیلی را به یک سرویس SMTP معتبر هدایت کنید. پروتکل SMTP (Simple Mail Transfer Protocol) بهصورت رمزگذاریشده و با احراز هویت قوی عمل میکند، بنابراین شانس تحویل موفق ایمیلها بهطور چشمگیری افزایش مییابد. انتخاب یک افزونهٔ SMTP با پشتیبانی از TLS/SSL و قابلیت تنظیم چندین حساب ایمیل، گام مهمی در بهبود قابلیت ارسال است.
دو افزونهٔ پرکاربرد که بهخوبی با اکثر سرویسهای ایمیل سازگارند، WP Mail SMTP و FluentSMTP هستند. هر دو امکان استفاده از سرویسهای رایج مانند Gmail، Outlook، SendGrid و Amazon SES را میدهند. آمار زیر از مخزن رسمی وردپرس در ۲۹ اکتبر ۲۰۲۶ است:
| ویژگی | WP Mail SMTP | FluentSMTP |
|---|---|---|
| نسخهٔ فعلی | 4.10.3 | 2.4.1 |
| آخرین بهروزرسانی | ۲۰ اکتبر ۲۰۲۶ | ۲۷ سپتامبر ۲۰۲۶ |
| نصب فعال | بیش از ۴ میلیون | بیش از ۷۰۰ هزار |
| سازگاری آزمونشده | وردپرس 7.1.4 | وردپرس 7.1.4 |
| سرویسهای آماده | Gmail، Brevo، Mailgun، SendGrid، SMTP دلخواه | Gmail، Outlook، Amazon SES، SendGrid، Cloudflare، SMTP دلخواه |
| جای مناسب | سایت تکفرستنده با نیاز به ویزارد نصب | چند اتصال همزمان و لاگ ارسال رایگان |
پس از انتخاب افزونه، مراحل پایه یکی است: نصب از Plugins → Add New، فعالسازی با Install Now و Activate، انتخاب نوع ارسال SMTP، و وارد کردن میزبان، پورت، رمزنگاری، نام کاربری و رمز. مسیر دقیق هر دو افزونه در بخش بعد آمده است.
تنظیم SMTP در WP Mail SMTP و FluentSMTP (مسیر منو)
مسیر زیر برای نسخههای فعلی هر دو افزونه است. اگر منوی شما با این فرق دارد، نسخهتان قدیمی است؛ اول بهروزرسانی کنید.
WP Mail SMTP:
- Plugins → Add New، جستوجوی
WP Mail SMTP، سپس Install Now و Activate. - ویزارد نصب باز میشود. در Mailer گزینهٔ Other SMTP را بزنید (برای Gmail، گزینهٔ Gmail SMTP).
- در From Email آدرس فرستنده را بنویسید و تیک Force From Email را بزنید تا افزونههای دیگر نتوانند آن را عوض کنند.
- در بخش Other SMTP: SMTP Host، Encryption = TLS، SMTP Port =
587، SMTP Authentication = Yes، سپس Username و Password. - ذخیره کنید، سپس WP Mail SMTP → Tools → Email Test، آدرس گیرنده را بزنید و Send Email.
FluentSMTP:
- Plugins → Add New، جستوجوی
FluentSMTP، سپس Install Now و Activate. - به Settings → FluentSMTP بروید.
- در Mailer Settings سرویس را انتخاب کنید: Other SMTP برای سرور دلخواه یا Gmail.
- Sender Email و Sender Name را پر کنید، سپس SMTP Host، SMTP Port (
587)، Encryption = TLS، Authentication = Yes، نام کاربری و رمز. - در همان صفحه Send Test Email را بزنید. برای آزمونهای بعدی، تب Email Test در همان تنظیمات هست.
- لاگ ارسالها را در FluentSMTP → Email Logs ببینید؛ برای خطاهایی که فقط برای کاربر رخ میدهد، این لاگ تعیینکننده است.
هنگام اتصال به Gmail، اگر مراحل OAuth وسط راه با 401 Unauthorized یا 405 Method Not Allowed متوقف شد، مشکل افزونهٔ ایمیل نیست؛ توکن دسترسی یا نوع درخواست رد شده است. مسیر رفع این دو خطا در راهنمای خطای 401 و راهنمای خطای 405 آمده است.
محدودیتهای Gmail و سرویسهای ایرانی؛ چه زمانی سرویس را عوض کنیم
Gmail برای نامههای انسانی ساخته شده، نه برای ایمیل تراکنشی سایت. سه سقف دارد که هیچ تنظیمی آن را برنمیدارد:
- سقف گیرندهٔ روزانه. گوگل برای حساب رایگان حدود ۵۰۰ گیرنده در روز و برای Workspace حدود ۲٬۰۰۰ گیرنده اعلام کرده است. این عدد را در صفحهٔ محدودیتهای حساب خودتان تأیید کنید، چون به وضعیت حساب بستگی دارد. با عبور از سقف، خطای
550 5.7.0یا قطع سرویس موقت میگیرید. - الزام رمز برنامه. اگر تأیید دو مرحلهای روشن باشد، رمز اصلی حساب روی SMTP کار نمیکند و خطای
534-5.7.9 Application-specific password requiredمیگیرید. باید در حساب گوگل یک App Password ۱۶ کاراکتری بسازید. - حذف مسیرهای قدیمی. گزینهٔ Less secure apps در گوگل حذف شده است. هر راهنمایی که میگوید «آن را فعال کنید»، کهنه است و مسیرش دیگر وجود ندارد.
در سمت ایران، بیشتر سایتها روی SMTP هاست اشتراکی (سیپنل یا دایرکتادمین) هستند. چهار ویژگی این مسیر را بشناسید:
| ویژگی SMTP هاست اشتراکی | پیامدی که میبینید |
|---|---|
| پورت ۲۵ خروجی معمولاً بسته است | SMTP connect() failed یا Connection timed out — با ۵۸۷ عوضش کنید |
| فرستنده باید صندوق واقعی روی همان سرور باشد | 553 5.7.1 Sender address rejected: not owned by user |
| سقف ارسال ساعتی یا روزانه از طرف میزبان | 421 4.7.0 Try again later در ارسال انبوه |
| شهرت IP مشترک با سایر سایتها | رسیدن به اسپم یا 550-5.7.1 بدون هیچ خطای تنظیماتی |
سرویس را عوض کنید، نه وقتی که «مشکل دارید»، بلکه وقتی یکی از این چهار نشانه را دیدید:
| نشانه | معنی | اقدام |
|---|---|---|
| ایمیلهای ووکامرس در ساعتهای پرترافیک نمیرسند | رسیدن به سقف ساعتی هاست | سرویس ایمیل تراکنشی با صف و تلاش مجدد |
550-5.7.1 تکرار میشود ولی محتوا سالم است | شهرت IP مشترک سوخته است | سرویس با IP اختصاصی و دامنهٔ فرعی ارسال |
| به سقف روزانهٔ Gmail میرسید | ابزار اشتباه برای حجم سایت | سرویس تراکنشی؛ Gmail فقط برای پاسخ انسانی |
| هیچ لاگ و شمارش تحویل ندارید | کور پرواز میکنید | سرویسی که وضعیت تحویل و بازشدن را نشان میدهد |
در هر سه حالت، دامنهٔ فرستنده را عوض نکنید؛ فقط رکوردهای SPF و DKIM را از پنل سرویس جدید بگیرید و در DNS همان دامنه بگذارید. تغییر دامنه در این مرحله، شهرتی را که ساختهاید دور میریزد.
تست ارسال ایمیل پس از تنظیمات
پس از پیکربندی SMTP یا سایر تنظیمات ایمیل در وردپرس، اولین قدم برای اطمینان از عملکرد صحیح، ارسال یک ایمیل آزمایشی است. این کار به شما امکان میدهد تا بهسرعت تشخیص دهید که آیا ارتباط بین سرور وبسایت و سرویسدهنده ایمیل برقرار شده یا نه، و در صورت بروز مشکل، قبل از اینکه کاربران نهایی متوجه شوند، آن را رفع کنید. در بسیاری از موارد، مشکلات رایج مثل اشتباه در پورت، اعتبارنامههای نادرست یا مسدود شدن اتصال توسط فایروال، تنها با یک ایمیل تست آشکار میشوند.
برای ارسال ایمیل تست میتوانید از افزونهٔ WP Mail SMTP یا ابزارهای مشابه استفاده کنید. مراحل زیر را به ترتیب انجام دهید:
- به پیشخوان وردپرس رفته و از منوی «پلاگینها» افزونهٔ WP Mail SMTP را نصب و فعال کنید.
- در صفحه تنظیمات افزونه، اطلاعات سرور SMTP (نام سرور، پورت، نوع رمزگذاری TLS/SSL) و حساب کاربری (نام کاربری و رمز عبور) را وارد کنید.
- در بخش «Test Email»، آدرس ایمیل دریافتکننده (معمولاً ایمیل مدیر سایت) را وارد کنید.
- دکمهٔ «Send Test Email» را کلیک کنید و منتظر دریافت پیام باشید.
اگر ایمیل با موفقیت دریافت شد، به این معناست که تنظیمات شما صحیح هستند و میتوانید بهسرعت به سراغ بررسی سایر عملکردهای ایمیل (مثل اعلانهای فرمها یا ثبتنام کاربران) بروید. در غیر این صورت، پیام خطایی که در پنجرهٔ افزونه نمایش میشود، سرنخی مهم دربارهٔ مشکل ارائه میدهد. برخی از علل رایج عدم ارسال عبارتند از:
- پورت اشتباه: رمزنگاری با پورت نمیخواند؛ ۵۸۷ با
tlsو ۴۶۵ باssl. - احراز هویت نادرست: نام کاربری یا رمز عبور ممکن است بهروزرسانی نشده باشد.
- مسدود شدن توسط فایروال: سرورهای میزبانی گاهی ارتباط خروجی SMTP را محدود میکنند.
- فیلترهای اسپم: پیام ممکن است به پوشهٔ اسپم هدایت شود؛ بنابراین صندوق ورودی و اسپم را بررسی کنید.
در ادامه یک جدول خلاصهٔ نتایج متداول پس از ارسال ایمیل تست آورده شده است. این جدول میتواند بهعنوان یک راهنمای سریع برای تشخیص وضعیت استفاده شود.
| مرحله | نتیجهٔ مورد انتظار | اقدام بعدی |
|---|---|---|
| ارسال موفق | پیام در صندوق ورودی یا اسپم دریافت شد | پیکربندی را نهایی کنید |
| خطای اتصال (Timeout) | عدم دریافت پیام و نمایش خطای زمانپذیری | پورت و دسترسی فایروال را بررسی کنید |
| خطای احراز هویت | پیام «Authentication failed» در لاگ | نام کاربری و رمز عبور را دوباره وارد کنید |
بهعنوان مثال، اگر پس از ارسال تست، پیام «Authentication failed» نمایش داده شد، سریعاً به تنظیمات افزونه بازگردید، نام کاربری و رمز عبور را دوباره وارد کنید یا از یک کلید اپلیکیشن (App Password) مخصوص سرویسدهندگی Gmail استفاده کنید. این کار معمولاً مشکل را برطرف میکند و ایمیلهای آینده بهدرستی ارسال میشوند. پس از رفع مشکل، دوباره یک تست ارسال کنید تا اطمینان حاصل شود که تنظیمات بهدرستی اعمال شدهاند.
اگر افزونه پیام تست را «موفق» اعلام کرد ولی چیزی نرسید، بدانید این تشخیص در سطح پذیرش سرور است، نه تحویل نهایی. برای همین مرحلهٔ بعد لازم است.
تست تحویل ایمیل و خواندن هدر پیام
پذیرش با تحویل فرق دارد. سرور میتواند پیام را بپذیرد و بعد در صف خودش دور بریزد. تنها راه دیدن این تفاوت، خواندن هدر پیام در صندوق گیرنده است.
در Gmail، پیام را باز کنید و از منوی سهنقطه Show original را بزنید. در Outlook، مسیر File → Properties → Internet headers. این پنج فیلد را ببینید:
| فیلد | چه میگوید | مقدار سالم |
|---|---|---|
Authentication-Results | نتیجهٔ اعتبارسنجی گیرنده | spf=pass و dkim=pass و dmarc=pass |
Return-Path | پاکت فرستنده؛ آدرسی که برگشتیها به آن میرود | همان حساب SMTP، روی دامنهٔ خودتان |
Received | زنجیرهٔ سرورها؛ از پایین به بالا مسیر طیشده | اولین سرور، همان سروری است که انتظار دارید |
Message-ID | امضای پیام | دامنهاش دامنهٔ سایت شما باشد، نه دامنهٔ سرویسدهندهٔ اشتراکی |
From و Reply-To | فرستندهٔ نمایشی و آدرس پاسخ | هر دو روی دامنهٔ خودتان و یکسان با حساب SMTP |
یک آزمون تکمیلی هم هست که چند ثانیه وقت میگیرد: آدرس تست را از سرویس mail-tester.com بگیرید، یک ایمیل واقعی از سایت به آن بفرستید و امتیاز را ببینید. امتیاز بالای ۹ از ۱۰ یعنی SPF، DKIM و DMARC درست نشستهاند. اگر امتیاز پایین بود، گزارش همان صفحه دقیقاً میگوید کدام رکورد غایب است — این دقیقتر از حدس زدن در پنل DNS است.
رفع خطاهای رایج و لاگها
یکی از اولین کارهایی که باید برای تشخیص مشکل ایمیلنویسی در وردپرس انجام دهید، بررسی لاگهای سرور و لاگهای افزونههای ایمیل است. اکثر خطاها در فایل error_log یا در لاگ SMTP که توسط افزونهای نظیر “WP Mail SMTP” تولید میشود، ثبت میشوند. بهدلیل اینکه لاگها معمولاً شامل کدهای خطا (مانند 550 یا 421) و پیامهای متنی هستند، میتوانید بهسرعت منبع مشکل را شناسایی کنید.
در ادامه جدول کوتاهی آورده شده که رایجترین خطاهای گزارششده در لاگها را همراه با توضیح مختصر و راهحل پیشنهادی نشان میدهد. این جدول میتواند بهعنوان یک چکلیست سریع هنگام بررسی لاگها مورد استفاده قرار گیرد.
| کد خطا / پیام | دلیل معمول | راهحل پیشنهادی |
|---|---|---|
550 5.1.1 | آدرس گیرنده وجود ندارد یا مسدود شده است | آدرس ایمیل گیرنده را تأیید کنید یا لیست سیاه سرور را بررسی کنید |
421 4.4.2 | اتصال به سرور SMTP قطع شده یا زمانسنجی شده است | پیکربندی پورت و TLS/SSL را بازبینی کنید؛ در صورت نیاز از پورت ۵۸۷ استفاده کنید |
SMTP connect() failed | اتصال شبکه برقرار نشده است: پورت بسته یا فیلترشده، فایروال مسدودکننده، یا نام میزبان اشتباه | آزمون پورت را اجرا کنید و دسترسی خروجی به پورتهای 25/465/587 را بررسی کنید. تا اتصال برقرار نشود، رمز را عوض نکنید |
Could not authenticate یا 535 | اتصال برقرار شده ولی سرور رمز را رد کرده است | نام کاربری و رمز SMTP را دوباره وارد کنید؛ در Gmail رمز برنامه بسازید |
mail() has been disabled for security reasons | تابع mail() در PHP غیرفعال است | به SMTP مهاجرت کنید؛ نیازی به فعال کردن mail() نیست |
بعد از شناسایی خطا، گام بعدی اعمال تغییرات مناسب است. یک قاعدهٔ ساده کمک میکند: کدهای 4xx موقتی هستند و تلاش مجدد جواب میدهد، کدهای 5xx دائمی هستند و تکرار بیفایده است. روی 421 صبر کنید، روی 550 تنظیمات را عوض کنید.
یک مثال عملی: یک سایت فروشگاهی با افزونه “WooCommerce” در زمان ثبت سفارش ایمیل تأیید ارسال نمیشد. با بررسی لاگ، خطای 550 5.1.1 دیده شد که نشان میداد آدرس ایمیل مشتری بهدرستی وارد نشده بود. پس از اصلاح قالب فرم ثبت ایمیل (اضافه کردن فیلتر sanitize_email) و تست دوباره، ایمیلها بهدرستی ارسال شد. این نوع بررسی دقیق لاگها میتواند از بروز مشکلات مشابه در آینده جلوگیری کند.
خطاهای رایج ایمیل وردپرس با متن دقیق پیام
این جدول را با متن واقعی خطا تطبیق دهید. اگر پیام شما در ستون اول نیست، مشکل شما در این فهرست نیست و باید لاگ کامل را بخوانید.
| متن دقیق خطا | علت | راهحل |
|---|---|---|
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting | اتصال TCP برقرار نشد: پورت بسته، میزبان اشتباه یا فایروال خروجی | آزمون پورت؛ ۵۸۷ با TLS؛ درخواست بازکردن پورت از میزبان |
SMTP Error: Could not authenticate. | اتصال برقرار شد، رمز رد شد | رمز برنامه بسازید؛ نام کاربری را کامل با دامنه بنویسید |
535-5.7.8 Username and Password not accepted | در Gmail رمز اصلی بهجای App Password وارد شده | تأیید دو مرحلهای را روشن و رمز برنامهٔ ۱۶ کاراکتری بسازید |
534-5.7.9 Application-specific password required | حساب Gmail تأیید دو مرحلهای دارد ولی رمز برنامه ندارد | ساخت App Password در تنظیمات امنیتی گوگل |
530 5.7.0 Authentication Required | احراز هویت خاموش است یا سرور بدون آن رله نمیکند | SMTP Authentication را Yes کنید |
553 5.7.1 Sender address rejected: not owned by user | آدرس From روی حساب SMTP نیست | فرستنده را با نام کاربری یکسان کنید |
550-5.7.1 … message is likely unsolicited mail | سیاست ضداسپم گیرنده؛ اعتبار دامنه ضعیف است | SPF/DKIM/DMARC؛ حذف لینکهای مشکوک؛ دامنهٔ فرعی برای ارسال انبوه |
421 4.7.0 Try again later, closing connection | محدودیت نرخ یا تعداد اتصال همزمان | کاهش سرعت ارسال یا سرویس با صف |
550 5.1.1 … Recipient address rejected: User unknown | آدرس گیرنده وجود ندارد یا فاصله یا غلط تایپی دارد | پاکسازی ورودی با sanitize_email؛ آزمون با آدرس مطمئن |
stream_socket_enable_crypto(): SSL operation failed | رمزنگاری با پورت نمیخواند | ۵۸۷ = tls و ۴۶۵ = ssl؛ هرگز برعکس |
mail() has been disabled for security reasons | تابع mail() در PHP غیرفعال است | استفاده از SMTP؛ نیازی به فعالکردن mail() نیست |
PHP Warning: mail(): Failed to connect to mailserver at "localhost" port 25 | سرور محلی SMTP ندارد ولی کد همچنان از mail() استفاده میکند | تنظیم SMTP یا mu-plugin بخش قبل |
سوالات متداول
چرا وردپرس ایمیل فراموشی رمز عبور را ارسال نمیکند؟
چون وردپرس برای این ایمیل هم از wp_mail() استفاده میکند و اگر سرور mail() را بسته باشد یا SMTP تنظیم نشده باشد، پیام بیصدا دور ریخته میشود. اول با wp eval تست کنید که wp_mail() مقدار درست برمیگرداند یا نه، بعد لاگ را بخوانید.
تفاوت خطای احراز هویت با خطای پورت چیست؟
خطای پورت یعنی اتصال شبکه برقرار نشده و پیام آن SMTP connect() failed یا Connection timed out است؛ در این حالت رمز هرگز بررسی نشده، پس عوض کردن رمز بیفایده است. خطای احراز هویت یعنی اتصال برقرار شده و سرور رمز را رد کرده است؛ پیامش Could not authenticate یا کد 535 است.
چرا Gmail رمز عبور معمولی را قبول نمیکند؟
چون گوگل ورود با رمز اصلی روی SMTP را برای حسابهای دارای تأیید دو مرحلهای بسته است و گزینهٔ Less secure apps هم حذف شده. باید در حساب گوگل یک App Password بسازید و همان ۱۶ کاراکتر را در فیلد رمز بگذارید.
ایمیل ارسال میشود ولی در پوشهٔ اسپم میافتد؛ مشکل چیست؟
تنظیمات SMTP درست است ولی اعتبار دامنه ناقص. با خواندن Authentication-Results در هدر پیام ببینید spf و dkim و dmarc پاس هستند یا نه، و رکورد غایب را در DNS دامنه اضافه کنید.
آیا میشود SMTP را بدون افزونه تنظیم کرد؟
بله، با قلاب phpmailer_init در یک فایل mu-plugin. ثابتهای فرضی مثل WP_MAIL_SMTP_HOST در وردپرس وجود ندارند و نوشتنشان در wp-config.php هیچ اثری ندارد.
کدام پورت را انتخاب کنم، ۵۸۷ یا ۴۶۵؟
۵۸۷ با tls انتخاب پیشفرض است و از فایروالها راحتتر رد میشود. ۴۶۵ را با ssl بگذارید و فقط وقتی سراغش بروید که ۵۸۷ بسته باشد. ترکیب ۵۸۷ با ssl یا ۴۶۵ با tls خطای رمزنگاری میدهد.
چه زمانی باید از SMTP هاست به سرویس ایمیل تراکنشی مهاجرت کنم؟
وقتی به سقف ساعتی هاست میرسید، وقتی 550-5.7.1 تکرار میشود در حالی که محتوای پیام سالم است، یا وقتی به سقف روزانهٔ Gmail میخورید. در این سه حالت مشکل تنظیمات نیست و تغییر تنظیمات جواب نمیدهد.
چرا فقط ایمیلهای ووکامرس نمیرسند و بقیه میرسند؟
چون ووکامرس در حجم و در لحظهٔ ثبت سفارش ارسال میکند و ممکن است به سقف نرخ بخورد یا افزونهٔ دیگری فرستندهٔ آن را عوض کند. تیک Force From Email در افزونهٔ SMTP و لاگ ارسال را بررسی کنید.
چکلیست سریع
- متن دقیق خطا را از لاگ بردارید و لایهٔ آن را مشخص کنید: اتصال، احراز هویت، سیاست گیرنده یا گیرندهٔ ناموجود.
- اگر لایه اتصال است، اول پورت را با
/dev/tcpوopensslبسنجید، نه رمز را. - ارسال را از
mail()جدا کنید: افزونهٔ SMTP یا mu-plugin باphpmailer_init. - آدرس From را با حساب SMTP یکی کنید و Force From Email را روشن بگذارید.
- یک ایمیل تست به دو مقصد بفرستید — یکی داخلی، یکی Gmail.
- هدر پیام را باز کنید و
spfوdkimوdmarcرا ببینید؛ امتیازmail-tester.comرا هم ثبت کنید. - اگر سقف یا شهرت IP مشکل است، سرویس را عوض کنید نه دامنه را.




