> For the complete documentation index, see [llms.txt](https://docs.emaillabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.emaillabs.io/poradniki/techniczne-aspekty-e-maili-i-integracji/wplyw-kodowania-tresci-na-uwierzytelnienie-dkim.md).

# Wpływ Kodowania Treści na Uwierzytelnienie DKIM

DKIM (*DomainKeys Identified Mail*) to mechanizm, który pozwala serwerom odbiorczym zweryfikować, czy treść wiadomości nie została zmodyfikowana w trakcie transmisji oraz czy faktycznie pochodzi od deklarowanego nadawcy.&#x20;

Poprawnie działający DKIM jest jednym z kluczowych elementów wpływających na dostarczalność wiadomości.

### **Błędy weryfikacji DKIM (Body Hash Error)**

Może zdarzyć się sytuacja, w której mimo poprawnego uwierzytelnienia domeny (prawidłowy rekord w DNS), serwery odbiorcze zwracają błędy wskazujące na naruszenie integralności treści:

`dkim=fail (body has been altered)` lub `dkim=fail (body hash did not verify)`

Jedną z najczęstszych przyczyn takiego stanu rzeczy jest nieodpowiedni dobór nagłówka **Content-Transfer-Encoding**.

### **Problem z kodowaniem 8bit i 7bit**

Konfiguracje często spotykane, ale niezalecane dla nowoczesnych wiadomości HTML:

* `Content-Transfer-Encoding: 8bit`
* `Content-Transfer-Encoding: 7bit`

Kodowanie `8bit` nie jest zalecane dla wiadomości w formacie HTML, ponieważ nie gwarantuje, że treść pozostanie identyczna podczas przesyłu między kolejnymi serwerami pocztowymi (MTA). Starsze serwery pośredniczące lub filtry antyspamowe mogą nie obsługiwać rozszerzenia 8BITMIME, co wymusza konwersję treści. W praktyce może to prowadzić do:

* zmiany lub uszkodzenia znaków diakrytycznych,
* modyfikacji białych znaków (spacje, tabulatory),
* zmiany znaków końca linii (CRLF).

Nawet minimalna zmiana w treści (choćby jednego bajtu) powoduje, że suma kontrolna (hash) obliczona na potrzeby DKIM przestaje się zgadzać z treścią otrzymaną, a podpis zostaje uznany za nieprawidłowy (`fail`).

### **Rekomendowane rozwiązanie: Quoted-Printable**

Zalecaną i najbezpieczniejszą konfiguracją, zwłaszcza dla wiadomości HTML zawierających polskie znaki, jest:

`Content-Transfer-Encoding: quoted-printable`

Kodowanie quoted-printable (lub alternatywnie base64) jest uznawane za tzw. "transport-safe":

* zapewnia stabilność treści wiadomości niezależnie od serwerów pośredniczących.
* eliminuje ryzyko modyfikacji znaków w trakcie transmisji.
* jest w pełni kompatybilne z mechanizmem DKIM.
* jest standardem rekomendowanym w nowoczesnych systemach mailingowych.

Dzięki zastosowaniu tego kodowania, treść podpisana kluczem DKIM dociera do odbiorcy w niezmienionej formie technicznej, co pozwala na pomyślną weryfikację (**`dkim=pass`**).

#### **Podsumowanie i dobre praktyki**

1. **Stosuj Quoted-Printable:** Zawsze ustawiaj **`Content-Transfer-Encoding: quoted-printable`** dla wiadomości tekstowych i HTML. Unikaj kodowania **`8bit`**, szczególnie przy wysyłkach masowych.
2. **Weryfikuj biblioteki:** W przypadku korzystania z własnych bibliotek mailingowych (np. PHPMailer, SwiftMailer), upewnij się, że są one zaktualizowane i mają poprawnie skonfigurowane kodowanie treści.
3. **Diagnostyka:** Jeśli obserwujesz błędy typu `body hash did not verify`, w pierwszej kolejności zweryfikuj nagłówki wiadomości i sposób kodowania treści – jest to najczęstsza przyczyna problemów z walidacją DKIM przy poprawnej konfiguracji DNS.
