cPanel و WHM

رفع اسپم شدن ایمیل cPanel با SPF، DKIM و DMARC

اسپم شدن ایمیل cPanel معمولا یعنی گیرنده نمی تواند ثابت کند ایمیل واقعا از دامنه شما آمده است. راه حل ثبت سه رکورد TXT برای SPF و DKIM و DMARC و بعد بررسی هدر ایمیل در Gmail است. بخش Email Deliverability در cPanel وضعیت دو رکورد اول را نشان می دهد.

نوشته تیم فنی پیکوهاستبه روزرسانی: ۱۳ مهر ۱۴۰۵۸ دقیقه مطالعه

اگر ایمیل هایی که از آدرس دامنه خودتان می فرستید در پوشه Spam گیرنده می نشیند یا اصلا نمی رسد، علت اسپم شدن ایمیل cPanel بیشتر وقت ها ناقص بودن رکوردهای احراز هویت دامنه است. Gmail و Outlook و بقیه سرویس ها قبل از تحویل ایمیل سه چیز را چک می کنند: SPF، DKIM و DMARC. این مقاله می گوید هر کدام چیست، در cPanel کجا بررسی می شود و چطور رکوردش را می نویسید.

چرا ایمیل دامنه شما اسپم می شود

دلیل ها به ترتیب شیوع این ها هستند:

  1. رکورد SPF یا DKIM وجود ندارد یا اشتباه ثبت شده است.
  2. رکورد DMARC نیست و گیرنده دلیلی برای اعتماد به دامنه ندارد.
  3. ایمیل از جایی می رود که در SPF معرفی نشده، مثلا از یک سرویس خبرنامه یا سرور دیگر.
  4. IP سرور در یک لیست سیاه است یا هاست مشترک شما همسایه ای دارد که اسپم می فرستد.
  5. ایمیل خودش شبیه اسپم است: موضوع پر از علامت تعجب، لینک کوتاه شده یا فقط یک تصویر.

بند اول و دوم را خودتان رفع می کنید. بند چهارم به ارائه دهنده هاست مربوط است و در بخش آخر به آن می رسیم.

وضعیت فعلی را در Email Deliverability ببینید

در cPanel وارد بخش Email شوید و Email Deliverability را باز کنید. این صفحه فهرست دامنه ها را با وضعیت رکوردها نشان می دهد. اگر مشکلی باشد، کنار دامنه یک هشدار و دکمه Manage یا Repair می بینید. با باز کردن Manage، رکورد پیشنهادی cPanel برای SPF و DKIM نمایش داده می شود.

اگر DNS دامنه روی خود هاست است (یعنی name serverهای دامنه همان سرورهای هاست اند)، دکمه ای برای نصب خودکار رکورد پیشنهادی هست. اگر DNS دامنه جای دیگری مثل رجیستر دامنه یا Cloudflare است، cPanel آن رکورد را نمی تواند بنویسد و باید مقدار را کپی کنید و همان جا وارد کنید.

هر دامنه فقط یک رکورد SPF باید داشته باشد. اگر دو رکورد TXT با شروع v=spf1 ثبت کنید، گیرنده هر دو را نادیده می گیرد و SPF شکست می خورد. سرویس جدید را به رکورد قبلی اضافه کنید و رکورد دوم نسازید.

SPF: چه سرورهایی اجازه ارسال دارند

SPF یک رکورد TXT روی خود دامنه است که فهرست سرورهای مجاز برای ارسال ایمیل را می دهد. نمونه ای که cPanel معمولا می سازد:

example.com.  TXT  "v=spf1 +a +mx +ip4:203.0.113.10 ~all"

+a و +mx یعنی IP رکورد A و MX دامنه مجاز است، ip4 آدرس سرور ایمیل را می دهد و ~all به گیرنده می گوید بقیه مشکوک اند. اگر از یک سرویس بیرونی مثل SendGrid یا Google Workspace هم ایمیل می فرستید، include همان سرویس را قبل از ~all اضافه کنید. مقدار دقیق include را در مستندات خود سرویس بخوانید، چون هر سرویس نام خودش را دارد.

SPF حداکثر 10 جستجوی DNS دارد. اگر include های زیادی بگذارید و از این سقف رد شوید، نتیجه PermError می شود و ایمیل ها مثل نداشتن SPF حساب می شوند.

DKIM: امضای دیجیتال ایمیل

DKIM به هر ایمیل خروجی یک امضا اضافه می کند و کلید عمومی آن در DNS دامنه است. در cPanel کلید را سرور می سازد و رکورد روی نام default._domainkey ثبت می شود:

default._domainkey.example.com.  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqh..."

مقدار p طولانی است و بعضی پنل های DNS آن را در چند رشته می شکنند. مقدار را از Email Deliverability کپی کنید و ویرایش نکنید. اگر DKIM در آن صفحه غیرفعال یا ناقص است، دکمه Manage را باز کنید و رکورد پیشنهادی را نصب کنید. پیام سبز Valid بعد از انتشار DNS نمایش داده می شود.

DMARC: سیاست دامنه برای ایمیل های مردود

DMARC به گیرنده می گوید اگر ایمیلی هم SPF و هم DKIM را رد کرد، چه کند و گزارش را به کجا بفرستد. cPanel این رکورد را معمولا خودش نمی سازد و باید دستی در DNS ثبت کنید:

_dmarc.example.com.  TXT  "v=DMARC1; p=none; rua=mailto:[email protected]"

سه مقدار برای p وجود دارد: none فقط گزارش می گیرد، quarantine ایمیل مردود را به اسپم می برد و reject آن را رد می کند. از none شروع کنید، چند هفته گزارش rua را بخوانید و فقط وقتی مطمئن شدید همه منبع های مجاز ایمیل شما SPF یا DKIM را درست رد می کنند، سخت گیری را بالا ببرید.

مقدار rua باید یک ایمیل واقعی باشد که شما می خوانید. گزارش ها فایل XML فشرده اند و خواندنشان با چشم راحت نیست. برای این کار می توانید از یک سرویس رایگان تحلیل DMARC استفاده کنید یا فعلا فقط به وجود رکورد اکتفا کنید.

ثبت رکوردها در Zone Editor

اگر DNS روی هاست است، در بخش Domains گزینه Zone Editor را باز کنید و برای دامنه روی Manage بزنید. با Add Record نوع TXT را انتخاب کنید و نام و مقدار را وارد کنید. چند نکته:

  • نام رکورد را کامل با دامنه بنویسید، مثل _dmarc.example.com. که نقطه آخر دارد. بعضی پنل ها خودشان دامنه را اضافه می کنند و نباید دو بار بنویسید.
  • مقدار TXT را داخل کوتیشن می گذارند و اگر پنل خودش کوتیشن اضافه می کند، شما نگذارید.
  • رکورد قدیمی SPF را ویرایش کنید، رکورد تازه ای کنارش نسازید.

انتشار رکورد معمولا چند دقیقه طول می کشد، ولی بسته به TTL رکورد قبلی ممکن است ساعت ها هم شود.

چطور مطمئن شویم رکوردها درست کار می کنند

اول با dig یا nslookup خود رکورد را بخوانید:

dig TXT example.com +short
dig TXT default._domainkey.example.com +short
dig TXT _dmarc.example.com +short

در ویندوز معادلش nslookup -type=TXT example.com است. خروجی باید همان مقدار ثبت شده را نشان دهد.

دومین مرحله ارسال ایمیل واقعی است. از یک ایمیل دامنه خودتان به یک آدرس Gmail ایمیل بفرستید، پیام را باز کنید، منوی سه نقطه را بزنید و Show original را انتخاب کنید. بالای صفحه سه خط می بینید:

خطمعنیاگر FAIL بود
SPFIP فرستنده در رکورد SPF هست یا نهinclude سرویس فرستنده را اضافه کنید یا رکورد تکراری را حذف کنید
DKIMامضای ایمیل با کلید DNS یکی است یا نهرکورد default._domainkey را دوباره از cPanel کپی کنید
DMARCیکی از دو مورد بالا با دامنه From همخوان است یا نهرکورد _dmarc و همخوانی دامنه From را بررسی کنید

هر سه باید PASS باشند. اگر هنوز FAIL می بینید و رکوردها درست است، به دامنه ای که در Return-Path یا Mailed-by نوشته شده نگاه کنید. گاهی ایمیل از سرویس دیگری ارسال می شود که در SPF معرفی نشده است.

وقتی رکوردها درست است ولی ایمیل باز اسپم می شود

اگر هر سه PASS هستند، مشکل در جای دیگر است.

چند مورد کوچک هم اثر دارد. دامنه آدرس From باید همان دامنه ای باشد که SPF و DKIM برایش ثبت شده است، وگرنه DMARC همخوانی را رد می کند. رکورد PTR یا همان reverse DNS برای IP سرور هم باید به نام یک هاست معتبر اشاره کند و این رکورد را فقط صاحب IP، یعنی هاست یا دیتاسنتر، تنظیم می کند. ایمیل جدیدی که از دامنه تازه ثبت شده و بدون سابقه ارسال می رود هم در روزهای اول سخت گیری بیشتری می بیند و بهتر است حجم ارسال را کم کم بالا ببرید.

IP سرور را در یکی از سایت های بررسی لیست سیاه جستجو کنید. روی هاست مشترک IP بین حساب های زیادی مشترک است و اگر در لیست بود، باید از پشتیبانی هاست بخواهید موضوع را بررسی کند، چون شما به تنظیمات سرور دسترسی ندارید. روی VPS اگر IP اختصاصی دارید، پیگیری رفع لیست سیاه با خودتان است. انتخاب لوکیشن VPS هم روی اعتبار IP اثر دارد و در مقایسه VPS ایران و خارج بحث شده است.

از Email و بعد Track Delivery در cPanel می توانید ببینید ایمیل ها به کجا رفته اند و دلیل برگشت خوردن چیست. اگر پیام برگشتی «mailbox full» می گوید، فضای حساب پر شده است و راهنمای پر شدن سهمیه دیسک و inode کمک می کند.

یک علت دیگر هک شدن سایت یا یک ایمیل کاربری است. اگر ناگهان تعداد ایمیل خروجی بالا رفته، رمز ایمیل ها را عوض کنید، فرم های سایت را بررسی کنید و صف ایمیل را ببینید. هاست ها معمولا سقف ایمیل خروجی در ساعت دارند و پشتیبانی عدد دقیق آن را می گوید.

ایمیل های سایت وردپرس

ایمیل فرم تماس و سفارش ووکامرس بیشتر وقت ها با تابع mail() خود PHP فرستاده می شود و فرستنده آن یک آدرس عمومی مثل [email protected] است. اگر SPF و DKIM هم درست باشد، چنین ایمیلی چون از یک صندوق واقعی نمی آید زودتر به اسپم می رود. راه بهتر یک افزونه SMTP و اتصال آن به یک صندوق واقعی روی همان دامنه است. با این کار ایمیل با اعتبار و امضای همان صندوق می رود. فهرست تنظیم های دیگر هاست وردپرس در چک لیست انتخاب هاست وردپرس هست و توضیح کامل مراحل نصب افزونه SMTP در مستندات وردپرس پیدا می شود.

اگر خبرنامه یا ایمیل انبوه می فرستید، سرویس های بزرگ از فرستنده هایی که روزانه تعداد زیادی ایمیل می فرستند، SPF و DKIM و DMARC و امکان لغو اشتراک را می خواهند. جزئیات این شرط ها را از راهنمای فرستنده های Gmail بخوانید و شرط های دقیق سقف تعداد را هم همان جا ببینید.

اگر چند دامنه مشتری را روی یک حساب نمایندگی نگه می دارید، همین سه رکورد باید برای هر دامنه جداگانه چک شود. روش مدیریت حساب ها در راهنمای هاست نمایندگی و WHM آمده است. مرجع کامل بخش ایمیل در مستندات رسمی cPanel هست.