«ایمیل نرسید» سه مشکل متفاوت است: وردپرس اصلاً پیام را نساخته، سرویس ارسال آن را نپذیرفته، یا پیام پذیرفته شده اما در مسیر تحویل، Spam یا سیاست گیرنده متوقف شده است. نصب فوری یک افزونه SMTP بدون تشخیص مرحله خراب ممکن است فقط نشانه را جابهجا کند.
پاسخ سریع: یک پیام آزمایشی با گیرنده کنترلشده بفرستید، ثبت کنید آیا wp_mail() فراخوانی شده، پاسخ سرویس ارسال و message ID را ببینید و سپس وضعیت تحویل را در provider بررسی کنید. From جعلی، DNS ناقص و محدودیت هاست از علتهای رایجاند.
دامنه مشکل را مشخص کنید
- آیا reset password هم نمیرسد یا فقط یک فرم خاص؟
- همه گیرندگان مشکل دارند یا فقط یک دامنه؟
- ایمیل در Spam است یا هیچ اثری در log ندارد؟
- خطا بعد از مهاجرت، تغییر DNS یا آپدیت افزونه شروع شده؟
- صف یا cron مسئول ارسال عقب افتاده است؟
اگر فقط فرم خاص مشکل دارد، notification و شرطهای همان فرم را بررسی کنید. اگر همه ایمیلها قطعاند، transport، credential و شبکه محتملتر است.
ساخته شدن پیام را بررسی کنید
افزونه فرم یا ووکامرس ممکن است بهعلت validation، وضعیت سفارش یا template شرطی اصلاً ارسال را فراخوانی نکند. لاگ برنامه و hookهای مرتبط را ببینید. موفقیت تابع ارسال نیز تحویل Inbox را تضمین نمیکند؛ فقط پذیرش پیام در مرحله فعلی را نشان میدهد.
مشکل PHP mail یا محدودیت هاست
بعضی میزبانها تابع mail را محدود یا خروجی آن را بدون گزارش قابل استفاده مدیریت میکنند. نرخ ارسال، صف محلی، hostname و log سرویس mail را بررسی کنید. خاموش کردن firewall یا security برای حل موقت توصیه نمیشود؛ مقصد و پورت مورد نیاز باید دقیق مجاز شود.
From باید معتبر باشد
استفاده از آدرس کاربر فرم بهعنوان From میتواند با SPF/DMARC ناسازگار باشد. معمولاً From باید از دامنهای باشد که سرویس مجاز به ارسال آن است و آدرس کاربر در Reply-To قرار گیرد. header injection و ورودی خام کاربر نیز باید کنترل شود.
تفاوت ارسال و تحویل
اگر provider پیام را پذیرفته، message ID و eventهای delivered، bounced، deferred یا rejected را بررسی کنید. Spam folder فقط یکی از مقصدهاست. mailbox پر، policy سازمانی، reputation و احراز هویت دامنه میتوانند تحویل را متوقف کنند. ادعای «ارسال موفق» بدون log تحویل دقیق نیست.
SPF، DKIM و DMARC چه نقشی دارند؟
SPF فرستندههای مجاز دامنه، DKIM امضای پیام و DMARC سیاست و alignment را تعریف میکنند. رکوردها را از مستندات provider واقعی بسازید؛ چند SPF جدا یا کلید DKIM ساختگی درست نیست. تغییر DNS زمان انتشار دارد و باید از resolverهای مستقل بررسی شود.
روند رفع مرحلهای
- یک گیرنده و پیام آزمایشی مشخص انتخاب کنید.
- لاگ WordPress و transport را با timestamp ثبت کنید.
- credential، From و TLS را بدون افشای secret بررسی کنید.
- message ID را در provider تا رویداد نهایی دنبال کنید.
- DNS دامنه را اعتبارسنجی کنید.
- پس از اصلاح، reset password، فرم و سفارش آزمایشی را جداگانه بسنجید.
اشتباههای رایج
- قرار دادن رمز SMTP در screenshot یا repository.
- غیرفعال کردن verification گواهی TLS.
- استفاده از Gmail شخصی برای حجم عملیاتی نامشخص.
- تست فقط یک نوع ایمیل و نتیجهگیری برای همه مسیرها.
- افزودن چند افزونه SMTP همزمان.
صف، Cron و ایمیلهای زمانبندیشده
بعضی افزونهها ارسال را در همان درخواست انجام نمیدهند و پیام را به WP-Cron، Action Scheduler یا queue میسپارند. در این حالت سالم بودن اتصال SMTP کافی نیست. تعداد jobهای pending/failed، زمان آخرین اجرای worker و خطای هر job را بررسی کنید. اجرای کور همه jobهای عقبافتاده ممکن است ناگهان هزاران ایمیل قدیمی بفرستد؛ ابتدا دامنه و اثر تجاری صف را مشخص کنید.
Timeout و خطای TLS را چگونه جدا کنیم؟
timeout معمولاً به DNS، egress firewall، port یا پاسخندادن provider مربوط است؛ خطای authentication به credential یا policy حساب میرسد و certificate error به hostname، CA یا ساعت سیستم. متن دقیق exception را حفظ کنید. تغییر تصادفی port، خاموش کردن TLS یا افزایش بسیار زیاد timeout علت را پنهان میکند.
پیشگیری و مشاهدهپذیری
برای پیامهای حیاتی، نرخ failure و bounce، طول صف و آخرین ارسال موفق را مانیتور کنید. یک synthetic test محدود میتواند قطع کامل را زود نشان دهد، اما نباید mailbox یا اعتبار دامنه را با ارسال زیاد خراب کند. credentialها دورهای rotate و تغییر DNS مستند شود.
چه زمانی کمک تخصصی لازم است؟
اگر پیام ساخته میشود اما رویداد تحویل مبهم است، یا ارسال میان cron، ووکامرس و provider گم میشود، رفع مشکل فنی وردپرس میتواند مسیر را با log و message ID دنبال کند. برای انتخاب transport مناسب، راهنمای SMTP وردپرس را نیز ببینید.
پرسشهای متداول
آیا رسیدن ایمیل آزمایشی یعنی همه چیز درست است؟
خیر. مسیر فرم، سفارش و cron ممکن است متفاوت باشد؛ هر جریان مهم را جدا تست کنید.
چرا ایمیل به Gmail میرسد ولی به سازمان نه؟
policy، DNS، reputation یا quarantine گیرنده سازمانی میتواند متفاوت باشد. event تحویل و log گیرنده لازم است.
آیا SMTP همیشه مشکل را حل میکند؟
خیر. اگر پیام ساخته نمیشود یا template شرطی است، تغییر transport اثری ندارد.