آموزش سئو

رفع مشکل ایمیل وردپرس: از تشخیص تا تحویل

وحید بهنام21 دقیقه مطالعه4 بازدید0 دیدگاه
تصویر شاخص

ایمیل ارسال نمی‌شود و هیچ خطایی هم نمی‌بینی؟ در بیشتر موارد وردپرس پیام را به تابع mail() سرور می‌سپارد و سرور آن را بی‌صدا دور می‌ریزد. راه قطعی این است که ارسال را از مسیر SMTP یک سرویس واقعی ببری و متن خطای سرور را بخوانی. تفاوت خطای احراز هویت با خطای پورت، اولین چیزی است که باید تشخیص بدهی.

در بسیاری از سایت‌های وردپرس، مشکل عدم ارسال ایمیل می‌تواند به سادگی از تنظیمات سرور یا افزونه‌های ایمیل‌ساز ناشی شود. اکثر کاربران ابتدا به این فکر می‌کنند که مشکل فقط در فرم تماس یا اعلان‌های خودکار است، اما در واقع ریشهٔ مشکل می‌تواند در پیکربندی PHP mail، محدودیت‌های میزبان یا استفاده از SMTP نادرست باشد. وقتی یک ایمیل به‌درستی ارسال نمی‌شود، معمولاً پیام‌های خطای «SMTP connect() failed» یا «mail() has been disabled» در لاگ‌ها ظاهر می‌شوند که نشانگر مشکلات پیکربندی هستند.

فهرست مطالب

درک مشکل ارسال ایمیل وردپرس

در بسیاری از سایت‌های وردپرس، مشکل عدم ارسال ایمیل می‌تواند به سادگی از تنظیمات سرور یا افزونه‌های ایمیل‌ساز ناشی شود. اکثر کاربران ابتدا به این فکر می‌کنند که مشکل فقط در فرم تماس یا اعلان‌های خودکار است، اما در واقع ریشهٔ مشکل می‌تواند در پیکربندی 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 نیست، خودتان بسازید):

CODE
<?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 را می‌توانید ببینید. این جدول می‌تواند به‌عنوان یک چک‌لیست سریع هنگام پیکربندی استفاده شود.

پارامترمقدار پیشنهادینکته کلیدی
Hostsmtp.example.comآدرس سرور خروجی ایمیل
Port587 (TLS) یا 465 (SSL)پروتکل رمزنگاری مورد استفاده
Username[email protected]نام کاربری حساب ایمیل
Passwordرمز برنامه یا رمز صندوقدر Gmail باید App Password باشد
Encryptiontls یا sslبسته به پورت انتخاب کنید
Authenticationفعالاکثر سرویس‌ها این گزینه را می‌خواهند

حالا خود مسیر شبکه را بسنجید. بیشتر خطاهایی که «خطای رمز» به نظر می‌رسند، در واقع پورت بسته‌اند. این دو دستور را روی همان سروری اجرا کنید که وردپرس روی آن است:

CODE
# آزمون باز بودن پورت خروجی
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) عملکرد را بررسی کنید:

CODE
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 می‌نشیند:

CODE
add_action( 'wp_mail_failed', function ( $error ) {
    error_log( 'WP_MAIL_FAILED: ' . $error->get_error_message() );
} );

ابزار سوم، دیدن کامل گفت‌وگوی SMTP است. با SMTPDebug سطح ۲ هر دستور و پاسخ سرور در لاگ می‌آید و معلوم می‌شود کجا قطع شده است: روی EHLO می‌ماند یا روی AUTH:

CODE
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 SMTPFluentSMTP
نسخهٔ فعلی4.10.32.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:

  1. Plugins → Add New، جست‌وجوی WP Mail SMTP، سپس Install Now و Activate.
  2. ویزارد نصب باز می‌شود. در Mailer گزینهٔ Other SMTP را بزنید (برای Gmail، گزینهٔ Gmail SMTP).
  3. در From Email آدرس فرستنده را بنویسید و تیک Force From Email را بزنید تا افزونه‌های دیگر نتوانند آن را عوض کنند.
  4. در بخش Other SMTP: SMTP Host، Encryption = TLS، SMTP Port = 587، SMTP Authentication = Yes، سپس Username و Password.
  5. ذخیره کنید، سپس WP Mail SMTP → Tools → Email Test، آدرس گیرنده را بزنید و Send Email.

FluentSMTP:

  1. Plugins → Add New، جست‌وجوی FluentSMTP، سپس Install Now و Activate.
  2. به Settings → FluentSMTP بروید.
  3. در Mailer Settings سرویس را انتخاب کنید: Other SMTP برای سرور دلخواه یا Gmail.
  4. Sender Email و Sender Name را پر کنید، سپس SMTP Host، SMTP Port (587)، Encryption = TLS، Authentication = Yes، نام کاربری و رمز.
  5. در همان صفحه Send Test Email را بزنید. برای آزمون‌های بعدی، تب Email Test در همان تنظیمات هست.
  6. لاگ ارسال‌ها را در 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 یا ابزارهای مشابه استفاده کنید. مراحل زیر را به ترتیب انجام دهید:

  1. به پیشخوان وردپرس رفته و از منوی «پلاگین‌ها» افزونهٔ WP Mail SMTP را نصب و فعال کنید.
  2. در صفحه تنظیمات افزونه، اطلاعات سرور SMTP (نام سرور، پورت، نوع رمزگذاری TLS/SSL) و حساب کاربری (نام کاربری و رمز عبور) را وارد کنید.
  3. در بخش «Test Email»، آدرس ایمیل دریافت‌کننده (معمولاً ایمیل مدیر سایت) را وارد کنید.
  4. دکمهٔ «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 مشکل است، سرویس را عوض کنید نه دامنه را.


نوشته‌شده و بازبینی‌شده توسط

متخصص سئو، وردپرس و تولید محتوا

اولین نفری باش که نظر می‌ده!

فقط نام لازم است، ایمیل اختیاریه و منتشر نمی‌شه.