یادم می‌آید یک فروشگاه وردپرسی، ماهانه هزاران ایمیل تراکنشی می‌فرستاد: تأیید سفارش، بازیابی رمز، اطلاع‌رسانی ارسال. صاحب کسب‌وکار شاکی بود که بخش قابل‌توجهی از این ایمیل‌ها به پوشه اسپم مشتریان می‌رود و هیچ‌کس متوجه نمی‌شود. بررسی که کردم، SPF درست تنظیم شده بود، ولی DKIM نه تنها تنظیم نشده بود، بلکه در ابتدا هیچ‌کس نمی‌دانست چیست. بعد از تنظیم DKIM در همان هفته، نرخ رسیدن به Inbox حدود سه برابر شد.

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

DKIM دقیقا چیست؟

DKIM مخفف DomainKeys Identified Mail است و استانداردی است که با آن، ایمیل ارسال‌شده از یک دامنه، یک امضای دیجیتال می‌گیرد. گیرنده، با استفاده از این امضا می‌تواند مطمئن شود که ایمیل در مسیر ارسال تغییر نکرده و واقعا از دامنه‌ای که ادعا می‌کند ارسال شده است. برای درک دقیق‌تر تاریخچه و ساختار این استاندارد، نگاهی به صفحه DomainKeys Identified Mail بیندازید.

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

نکته‌ای که در تجربه‌ام زیاد دیده‌ام: خیلی از تیم‌ها DKIM را با SSL اشتباه می‌گیرند. SSL ارتباط بین سرور و کاربر را رمزنگاری می‌کند، ولی DKIM درباره اصالت ایمیل و سالم بودن محتوای آن در مسیر است. این دو مفهوم کاملا متفاوتند. برای درک مرتبط، نگاهی به SSL چیست و چرا سایت به آن نیاز دارد بیندازید.

SPF می‌گوید چه کسی اجازه دارد بفرستد، DKIM می‌گوید چه چیزی فرستاده شده و آیا سالم رسیده است.

DKIM چطور با امضای دیجیتال کار می‌کند؟

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

سه مرحله دقیق این فرآیند. اول، سرور ارسال‌کننده، ایمیل را با کلید خصوصی خودش امضا می‌کند. این امضا شامل خلاصه‌ای از هدرهای مهم و بدنه ایمیل است. دوم، امضا در هدر DKIM-Signature به ایمیل اضافه می‌شود و ایمیل ارسال می‌شود. سوم، سرور گیرنده، امضا را از هدر می‌خواند و کلید عمومی را از DNS دامنه فرستنده (بخش selector._domainkey.example.com) دریافت می‌کند و با آن، اصالت امضا را بررسی می‌کند.

اگر امضا معتبر بود، سرور گیرنده ایمیل را به‌عنوان ایمیل امضاشده و سالم علامت‌گذاری می‌کند. اگر معتبر نبود، DKIM Fail می‌شود و در سیاست DMARC دامنه شما تعیین می‌کند که این ایمیل چه سرنوشتی پیدا کند. برای درک عمیق‌تر این چرخه، پیشنهاد می‌کنم نگاهی به رکوردهای DNS کدامند بیندازید؛ در همان متن، نقش TXT Record در این فرآیند روشن‌تر می‌شود.

تفاوت DKIM با SPF و DMARC

این سه مفهوم در کنار هم کار می‌کنند، ولی هر کدام نقش متفاوتی دارند. تجربه من این است که بیشتر تیم‌ها فقط SPF را تنظیم می‌کنند و به همین دلیل، ایمیل‌هایشان همیشه در سطح متوسطی از اعتماد باقی می‌ماند. برای مرور دقیق SPF، پیشنهاد می‌کنم نگاهی به SPF چیست و چطور از جعل ایمیل جلوگیری می‌کند بیندازید.

SPF در سطح DNS مشخص می‌کند چه سرورهایی مجاز به ارسال ایمیل از دامنه شما هستند. DKIM مشخص می‌کند محتوای ایمیل پس از ارسال تغییر نکرده و از دامنه‌ای که ادعا می‌کند آمده است. DMARC مشخص می‌کند اگر SPF یا DKIM شکست خورد، سرور گیرنده چه واکنشی نشان دهد. DMARC بدون SPF و DKIM کار نمی‌کند؛ ولی این دو بدون DMARC هم کار می‌کنند. تجربه من این است که تنظیم هر سه در کنار هم، ایمیل شما را از سطح «قابل قبول» به سطح «قابل اعتماد» می‌رساند.

برای مرور بیشتر این سه‌گانه، نگاهی به DMARC چیست و چطور امنیت ایمیل را تقویت می‌کند بیندازید. در همان متن توضیح داده‌ام که چرا حتی بعد از DKIM و SPF، این استاندارد سوم لازم است. برای پیاده‌سازی عملی، راهنمای راه‌اندازی DMARC گام‌به‌گام نقطه شروع خوبی است.

چرا DKIM برای ایمیل‌های تراکنشی حیاتی است؟

ایمیل‌های تراکنشی، یعنی همان‌هایی که سیستم برای تأیید سفارش، بازیابی رمز و اطلاع‌رسانی ارسال می‌کند، برخلاف ایمیل‌های تبلیغاتی، انتظار کاربر را برآورده می‌کنند؛ یعنی کاربر منتظرشان است. اگر این ایمیل‌ها به اسپم بروند، تجربه کاربری از دست می‌رود و در فروشگاه‌ها، مشتری را دلسرد می‌کند. تجربه من نشان داده که DKIM در این دسته از ایمیل‌ها بیشترین اثر را دارد.

دلیل فنی این است که سرویس‌های گیرنده مثل Gmail، Outlook و Yahoo در سیاست‌های ضد‌اسپم خود، به‌ایمیل‌های DKIM-sign شده امتیاز بالاتری می‌دهند. در کنار این، بعضی از سرویس‌ها حتی در نبود DKIM، ایمیل‌های شما را به‌طور پیش‌فرض محدود می‌کنند یا در Rate Limiting قرار می‌دهند. اگر در پروژه‌ای به‌کرات با ایمیل تراکنشی کار می‌کنید، نگاهی به خطای ارسال ایمیل در وردپرس بیندازید؛ در همان متن، ارتباط DKIM با خطاهای رایج روشن‌تر شده است.

یک نکته از تجربه‌ام در پروژه‌های فروشگاهی: پس از تنظیم DKIM، تنها تفاوت در رسیدن یا نرسیدن ایمیل نبود؛ تفاوت در اعتماد تیم پشتیبانی به سیستم ایمیل هم بود. قبلا هر بار که مشتری می‌گفت ایمیل تأیید سفارش را نگرفتم، تیم پشتیبانی نمی‌دانست مشکل از کجاست. بعد از DKIM، این شک و تردید از بین رفت، چون با ابزارهای تست می‌شد مطمئن شد که ایمیل با امضای معتبر ارسال شده است.

جدول مقایسه DKIM، SPF و DMARC

برای این‌که این سه استاندارد را یک‌جا ببینید، جدول زیر را آماده کرده‌ام. تجربه من این است که شفاف‌سازی نقش هر کدام، از هر توضیح طولانی مفیدتر است.

استانداردهدفمحل ثبتنتیجه بررسی
SPFتعیین سرورهای مجازTXT Record در DNSPass، Fail، SoftFail
DKIMامضای دیجیتال ایمیلTXT Record در DNSPass، Fail، Neutral
DMARCسیاست واکنش در شکستTXT Record در _dmarcNone، Quarantine، Reject

در تجربه‌ام، یک قاعده عملی وجود دارد: اگر فقط یکی از این سه را می‌خواهید تنظیم کنید، SPF را انتخاب کنید. اگر دو تا، SPF و DKIM. اگر می‌خواهید در برابر جعل دامنه جدی محافظت کنید، هر سه. برای مرور دقیق‌تر این مفاهیم، نگاهی به DNS چیست و چطور کار می‌کند بیندازید؛ در همان متن، ساختار کلی این رکوردها روشن‌تر می‌شود.

هرچه لایه‌های احراز هویت ایمیل بیشتر شوند، اعتماد سرور گیرنده به دامنه شما عمیق‌تر می‌شود.

راه‌اندازی DKIM روی هاست‌های مختلف

فرآیند راه‌اندازی DKIM بسته به هاستینگ و کنترل‌پنل شما متفاوت است. تجربه من با cPanel، DirectAdmin، Plesk و پنل‌های اختصاصی نشان داده که سه مسیر اصلی وجود دارد.

اول، از طریق کنترل‌پنل خود هاست. اکثر هاست‌های اشتراکی در cPanel یا DirectAdmin، بخشی برای DKIM دارند که با یک کلیک کلیدها را می‌سازد و به DNS اضافه می‌کند. برای آشنایی با این کنترل‌پنل، نگاهی به cPanel چیست و چه کاربردی دارد بیندازید. دوم، از طریق سرویس ارائه‌دهنده ایمیل. اگر از سرویس‌هایی مثل Google Workspace، Microsoft 365 یا Mailgun استفاده می‌کنید، خودشان کلید DKIM را تولید و مسیر تنظیم را مشخص می‌کنند.

سوم، از طریق تنظیم دستی. اگر هاست شما DKIM خودکار ندارد، باید کلید خصوصی و عمومی تولید کنید و رکورد TXT را در پنل DNS خود اضافه کنید. تجربه من این است که در این حالت، دقت در کپی‌کردن کلید عمومی نقش کلیدی دارد. برای مرور تنظیمات DNS در این سطح، نگاهی به چطور DNS دامنه را تنظیم کنیم بیندازید.

یک نکته که در تجربه‌ام زیاد به کار آمده: همیشه قبل از هر تغییر در رکوردهای DNS مربوط به ایمیل، یک بکاپ از رکوردهای فعلی بگیرید. اگر اشتباهی رخ داد، بازیابی آن‌ها از روی بکاپ، بسیار سریع‌تر از بازسازی دستی است.

تنظیم DKIM برای ارسال ایمیل وردپرس

در وردپرس، ایمیل‌های تراکنشی توسط تابع wp_mail() و از طریق PHP ارسال می‌شوند. این روش در هاست‌های اشتراکی معمولا از طریق sendmail یا PHP Mail کار می‌کند. تجربه من این است که این مسیر ارسال، در اکثر سرویس‌های ایمیل بزرگ به‌عنوان نیمه‌معتبر دیده می‌شود، به‌خصوص اگر DKIM نداشته باشد.

راه‌حل استانداردی که در پروژه‌ها استفاده می‌کنم، اتصال وردپرس به یک سرویس SMTP معتبر است. این سرویس خودش DKIM را مدیریت می‌کند و از طرف دامنه شما ایمیل می‌فرستد. برای پیاده‌سازی، نگاهی به رفع مشکلات SMTP در وردپرس بیندازید. در همان متن، نکات مهم راه‌اندازی و اشتباهات رایج توضیح داده شده است.

یک تجربه واقعی از یک پروژه فروشگاهی: پس از انتقال ارسال ایمیل از PHP Mail به یک سرویس SMTP با DKIM فعال، نرخ رسیدن ایمیل‌ها از حدود بیست درصد به بالای هشتاد درصد رسید. هیچ تغییر دیگری در تنظیمات سایت اعمال نشده بود. این عدد نشان می‌دهد که در سایت‌های وردپرسی، DKIM تنها یک تنظیم فنی نیست؛ یک ارتقای مستقیم در تجربه کاربری است.

چطور بفهمیم DKIM درست کار می‌کند؟

بعد از تنظیم DKIM، باید مطمئن شوید که واقعا درست کار می‌کند. تجربه من این است که سه ابزار اصلی برای این کار کافی هستند. اول، سرویس‌های آنلاین مثل MXToolbox که با ارسال یک ایمیل تستی، وضعیت SPF، DKIM و DMARC را گزارش می‌دهند. دوم، ارسال یک ایمیل به یک آدرس Gmail و باز کردن هدرهای آن؛ در بخش Authentication-Results، وضعیت DKIM مشخص است.

سوم، استفاده از ابزار داخلی کنترل‌پنل هاست که در بخش ایمیل معمولا وضعیت DKIM را نشان می‌دهد. یک نکته مهم: اگر بعد از تنظیم DKIM، هنوز وضعیت Fail می‌بینید، به‌احتمال زیاد به‌دلیل کش DNS است. انتشار رکوردهای DNS بین چند دقیقه تا چند ساعت طول می‌کشد. برای درک این مفهوم، نگاهی به پروپاگیشن DNS چیست بیندازید.

در کنار این ابزارها، یکی از عادت‌های خوب در پروژه‌های خودم این است که ماهانه یک ایمیل تستی به چند سرویس مختلف (Gmail، Outlook، Yahoo) می‌فرستم و وضعیت DKIM را در هدرها چک می‌کنم. تجربه‌ام نشان داده که این پایش دوره‌ای، جلوی بعضی از تغییرات خاموش را می‌گیرد؛ مثلا زمانی که ارائه‌دهنده DNS تنظیمات را به‌طور غیرمنتظره‌ای تغییر می‌دهد.

اشتباهات رایج در تنظیم DKIM

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

اشتباه دوم، تنظیم DKIM برای دامنه‌ای که با آن ایمیل نمی‌فرستید. در تجربه‌ام دیدم که تیم‌ها DKIM را برای دامنه اصلی تنظیم می‌کنند، ولی ایمیل‌ها از یک زیر‌دامنه یا یک سرویس دیگر ارسال می‌شوند. در این حالت، امضای DKIM معتبر نیست. اشتباه سوم، نادیده‌گرفتن selector و استفاده از یک selector برای چند سرویس. هر سرویس ارسال باید selector خودش را داشته باشد.

اشتباه چهارم، تنظیم DMARC با سیاست p=reject بدون آزمایش DKIM و SPF. این کار می‌تواند در روز اول، همه ایمیل‌های سایت شما را مسدود کند. اشتباه پنجم، فراموش‌کردن کلیدهای DKIM بعد از مهاجرت هاست. اگر سرور ایمیل شما تغییر کرد، باید کلیدهای DKIM را دوباره تنظیم کنید. برای مرور گسترده‌تر اشتباهات، نگاهی به عیب‌یابی مشکلات DNS در چند دقیقه بیندازید.

عیب‌یابی خطاهای DKIM

وقتی DKIM Fail می‌شود، باید مرحله‌به‌مرحله جلو بروید. تجربه من این است که چهار مرحله عیب‌یابی، تقریبا همه مشکلات را پوشش می‌دهد. اول، کلید عمومی را در DNS چک کنید. کلید عمومی باید در آدرس selector._domainkey.yourdomain.com به‌صورت TXT Record ثبت شده باشد.

دوم، صحت امضا در هدر ایمیل را بررسی کنید. با باز کردن Raw Message ایمیل، بخش DKIM-Signature را ببینید. اگر این هدر وجود ندارد، یعنی سرور ارسال‌کننده امضا نمی‌زند. سوم، در سرویس گیرنده، پیام خطای دقیق را ببینید. معمولا سرویس‌هایی مثل Gmail در هدر، دلیل دقیق شکست را می‌نویسند.

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

سناریوهای واقعی از پروژه‌های خودم

چند مورد از تجربه‌هایم را با شما به اشتراک می‌گذارم که الگوهای مشترکی دارند. اول، یک فروشگاه وردپرسی با مشکل مشابه پروژه اول همین متن. بعد از تنظیم DKIM و DMARC، نرخ اسپم به‌طور محسوس پایین آمد و تیم پشتیبانی توانست به مشتریان بگوید که سیستم ایمیل معتبر است. این اعتماد در حفظ مشتری نقش مهمی داشت.

دوم، یک سایت خبری که ایمیل‌های خبرنامه‌ای ارسال می‌کرد. بعد از تنظیم DKIM، نرخ Open Rate در گزارش ابزار ارسال، حدود بیست درصد رشد داشت، بدون هیچ تغییری در محتوا. این رشد نشان می‌دهد که DKIM نه‌فقط روی رسیدن ایمیل، بلکه روی رفتار کاربران هم اثر دارد.

سوم، یک پروژه SaaS که ایمیل‌های تراکنشی زیادی داشت و از یک سرویس SMTP بین‌المللی استفاده می‌کرد. با این‌که سرویس، DKIM خودکار داشت، ولی تیم فنی متوجه نشده بود که باید رکورد TXT را در DNS دامنه اصلی هم تنظیم کند. نتیجه این‌که چند ماه ایمیل‌ها امضای DKIM معتبر نداشتند. بعد از رفع این مشکل، نرخ Bounce به‌طور محسوس پایین آمد. برای مرور مفاهیم مرتبط، نگاهی به تفاوت IMAP و POP3 بیندازید؛ در همان متن، چرخه کلی ایمیل توضیح داده شده است.

در پروژه‌های واقعی، DKIM تنها یک تنظیم فنی نیست؛ یک سیگنال اعتماد است که از دامنه شما به سرویس گیرنده می‌رسد.

پرسش‌های پرتکرار درباره DKIM

آیا DKIM به‌تنهایی برای رسیدن ایمیل کافی است؟

خیر. DKIM یکی از سه رکن احراز هویت ایمیل است. برای رسیدن پایدار به Inbox، بهتر است SPF و DMARC هم تنظیم باشند. تجربه من این است که هر سه در کنار هم، اثری چند برابر دارند. برای جزئیات بیشتر، نگاهی به SPF چیست بیندازید.

چند وقت یک بار باید کلیدهای DKIM را عوض کنیم؟

در تجربه‌ام، چرخش دوره‌ای هر ۶ تا ۱۲ ماه توصیه می‌شود. ولی تغییر کلید باید با دقت انجام شود؛ چون در بازه انتشار DNS، ممکن است بعضی ایمیل‌ها DKIM Fail شوند. برنامه چرخش را طوری بچینید که در ساعات کم‌ترافیک انجام شود.

آیا DKIM روی سرعت ارسال ایمیل اثر دارد؟

تأخیر DKIM در حد میلی‌ثانیه است و عملا محسوس نیست. اثر اصلی DKIM روی نرخ رسیدن به Inbox است، نه سرعت ارسال. تجربه من این است که این تفاوت زمانی، در سطح تجربه کاربری دیده نمی‌شود.

چرا بعد از تنظیم DKIM هنوز ایمیل به اسپم می‌رود؟

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

آیا DKIM روی ایمیل‌های خروجی از وب‌سایت شخصی هم لازم است؟

بله، حتی اگر حجم ارسال کم باشد. تجربه من این است که سرویس‌های بزرگ، به دامنه‌های بدون DKIM با شک بیشتری نگاه می‌کنند. تنظیم DKIM یک بار است ولی سال‌ها سود می‌دهد.

اگر سرویس ارسال ایمیل من DKIM ندارد، چه گزینه‌ای دارم؟

سه گزینه. اول، مهاجرت به یک سرویس SMTP که DKIM دارد. دوم، تنظیم دستی DKIM روی سرور خودتان. سوم، استفاده از یک سرویس واسط که DKIM را برای شما مدیریت کند. تجربه من این است که گزینه اول در اکثر پروژه‌ها کافی است. برای مسیر عملی، نگاهی به رفع مشکلات SMTP در وردپرس بیندازید.

آیا DKIM و SPF می‌توانند هم‌زمان تنظیم شوند؟

بله و توصیه می‌شود. این دو، جای یکدیگر را نمی‌گیرند؛ مکمل هم هستند. اگر می‌خواهید در برابر جعل دامنه جدی محافظت کنید، هر دو را با یک DMARC تنظیم کنید. برای مرور این چرخه، نگاهی به DMARC چیست بیندازید.

تصمیم نهایی: یک ساعت وقت، چند سال اطمینان

از تجربه‌ام در ده‌ها پروژه، یک نتیجه ساده گرفته‌ام: DKIM یکی از کم‌هزینه‌ترین و پرسودترین تنظیماتی است که می‌توانید روی دامنه‌تان اعمال کنید. یک ساعت وقت می‌گیرد، ولی چند سال در تجربه ایمیل شما اثر می‌گذارد. کسانی که این یک ساعت را جدی می‌گیرند، در بلندمدت پشیمان نمی‌شوند؛ برعکس، کسانی که آن را نادیده می‌گیرند، معمولا روزی می‌بینند که بخش بزرگی از ایمیل‌هایشان در پوشه اسپم مشتریان گم شده است.

اگر امروز فقط یک کار می‌خواهید انجام دهید، پیشنهاد من این است: وارد کنترل‌پنل هاست یا سرویس ایمیل خودتان شوید و ببینید آیا DKIM فعال است یا نه. اگر فعال است، تست کنید که درست کار می‌کند. اگر فعال نیست، فعالش کنید. اگر نمی‌دانید چطور، از پشتیبانی سرویس خودتان بپرسید. این یک ساعت، می‌تواند یکی از بازده‌دارترین ساعت‌های کاری سال شما در پروژه‌های بعدی باشد.

اگر تجربه‌ای در تنظیم DKIM یا رفع مشکلات آن داشته‌اید، خوشحال می‌شوم در دیدگاه‌ها بخوانم. به‌خصوص اگر پروژه‌ای داشته‌اید که بعد از DKIM، تفاوت محسوسی در نرخ رسیدن ایمیل‌ها دیده‌اید، همان جزئیات می‌تواند برای نفر بعدی که همین مسیر را شروع کرده، راهنمای واقعی باشد. 📧