E-posta mühürleme
E-posta mühürü, sisteminizden giden bir e-postanın belirli bir anda belirli içerikle gönderildiğini ve sonra değişmediğini alıcıya gösterir. Gönderen sistem e-postayı göndermeden önce Damga'ya bildirir; Damga e-postanın gönderen, alıcı, konu, tarih, gövde ve ek özetlerinden bir kanonik metin üretir, metnin SHA-256 özetini içeren mühür kaydını sunucunun anahtarıyla imzalar (CMS) ve saklar. Alıcı e-postadaki bağlantıdan, elindeki iletiyi (.eml) yükleyip değişmediğini görür.
Mühür bir nitelikli elektronik imza ya da Kayıtlı Elektronik Posta (KEP) değildir; HMK m.199 kapsamında elektronik delildir. Mühür başına 1 kredi (test anahtarıyla ücretsiz).
1. Alan adını doğrulayın
Mühür yalnız doğrulanmış alan adından gönderilen e-postalara atılır (From adresinin @'den sonrası).
- Panelde alan adını ekleyin (ör.
ornek.com.tr). - DNS yönetiminize gösterilen TXT kaydını ekleyin; kayıt adı alan adının kendisi ya da
_damga.ornek.com.trolabilir:
ornek.com.tr. TXT "damga-dogrulama=k2m4n6p8q9r2s3t4u5v6w7x8y9z2a3b4"
- Kontrol et'e basın. DNS değişikliğinin yayılması birkaç saat sürebilir; düğmeye yeniden basabilirsiniz. Kaydı silmeyin.
Kişisel hesapta 1, Ekip planında 1, Kurum planında 5 alan adı eklenebilir. Kurum hesabındayken eklenen alan adı kurumundur ve yalnız kurumun entegrasyonlarıyla kullanılır.
2. Göndermeden önce mühürletin
Entegrasyonlar bölümünden aldığınız API anahtarıyla POST /api/v1/email-seals. İki yol vardır:
İletinin tamamı (önerilen): gönderilmeye hazır iletiyi (RFC 5322, .eml) base64 olarak gönderin.
{ "eml": "UmVjZWl2ZWQ6IC4uLg==" }
Özet: büyük ekleri ya da gövdeyi göndermek istemiyorsanız alanları ve özetleri gönderin. Gövdenin kendisini text alanında da gönderebilirsiniz (özetlenir, saklanmaz).
{
"from": "bildirim@ornek.com.tr",
"to": ["musteri@ornek.net"],
"cc": [],
"subject": "Fatura bildirimi",
"date": "2026-10-01T09:15:00Z",
"message_id": "<123@ornek.com.tr>",
"body_sha256": "9f2c…",
"attachments": [{ "name": "fatura.pdf", "sha256": "4a1e…" }]
}
Yanıt (201):
{
"id": "es_k2m4n6p8q9r2s3t4u5v6w7x8",
"mode": "live",
"sealed_at": "2026-10-01T09:15:02Z",
"from": "bildirim@ornek.com.tr",
"from_domain": "ornek.com.tr",
"canonical_sha256": "d66c…",
"verify_url": "https://damga.ondiso.net/dogrula/eposta/es_k2m4n6p8q9r2s3t4u5v6w7x8",
"header": "X-Damga-Seal: es_k2m4n6p8q9r2s3t4u5v6w7x8",
"footer_html": "<!--damga-muhur--><p class=\"damga-muhur\">Bu e-posta Ondiso Damga ile mühürlendi. …</p><!--/damga-muhur-->",
"footer_text": "[damga-muhur]\nBu e-posta Ondiso Damga ile mühürlendi (es_…).\nDoğrulamak için: …\n[/damga-muhur]",
"credits_charged": 1
}
3. İletiye ekleyip gönderin
headerdeğerini iletiye başlık olarak ekleyin (X-Damga-Seal: es_…).footer_htmldeğerini HTML gövdenin,footer_textdeğerini düz metin gövdenin sonuna ekleyin. Alt bilgi işaretler (<!--damga-muhur-->…<!--/damga-muhur-->,[damga-muhur]…[/damga-muhur]) arasında durduğu için kanonik özete girmez.- Mühürlettiğiniz başka hiçbir şeyi değiştirmeyin: Date ve Message-ID başlıklarını mühürden önce sabitleyin ve aynen gönderin. Konuyu ya da gövdeyi değiştiren posta listeleri ve ağ geçitleri mühürü bozar.
Kanonik biçim (sürüm 1)
Mühür, aşağıdaki metnin SHA-256 özetine atılır. Her satır \n ile biter:
damga-eposta-muhru/1
from:bildirim@ornek.com.tr
to:a@ornek.net,b@ornek.net
cc:
date:2026-10-01T09:15:00Z
message-id:123@ornek.com.tr
subject:Fatura bildirimi
body-sha256:9f2c…
attachment:4a1e… fatura.pdf
- from, to, cc: yalnız adresler (görünen ad atılır), küçük harf, tekrarsız, bayt sırasına göre, virgülle; yoksa boş. Bcc girmez.
- date: UTC,
YYYY-MM-DDTHH:MM:SSZ; başlık yoksa ya da çözülemezse boş. - message-id: köşeli parantezler olmadan; yoksa boş.
- subject: MIME kodlaması çözülmüş UTF-8; satır sonu ve sekmeler boşluğa çevrilir, ardışık boşluklar teke iner, baştaki ve sondaki boşluk atılır.
- body-sha256: ilk metin gövdesinin (text/plain; yoksa text/html) aktarım kodlaması (base64, quoted-printable) çözülmüş, UTF-8'e çevrilmiş halinden Damga alt bilgisi çıkarılır, satır sonları
\nyapılır, satır sonlarındaki boşluk / sekme ve sondaki boş satırlar atılır; kalan baytların SHA-256 özeti (küçük harf onaltılık). - attachment: her ek bir satır,
<sha256> <ad>; çözülmüş içeriğin özeti, önce özete sonra ada göre sıralı. Ad boşluk kurallarıyla sadeleştirilir.
Aynı ileti .eml olarak da özet olarak da gönderilse aynı metin çıkar. Gövde özeti için örnek (Node.js):
const govde = metin.replace(/\r\n?/g, '\n').replace(/[ \t]+$/gm, '').replace(/\n+$/, '');
const body_sha256 = createHash('sha256').update(govde, 'utf8').digest('hex');
Doğrulama
Alıcı verify_url sayfasında gönderen alan adını (DNS ile doğrulandığını), kurum hesabından atıldıysa kurumun adını (Kurum planında logosunu), mühür zamanını ve kanonik özeti görür. E-posta programında iletiyi .eml olarak kaydedip yüklerse Damga kanonik metni yeniden üretir ve karşılaştırır: eşleşmezse hangi alanın (konu, gövde, ekler, alıcılar…) farklı olduğunu söyler. Yüklenen dosya saklanmaz. Açık sayfada alıcı adresleri ve konu gösterilmez.
Mühür kaydı (/dogrula/eposta/<id>/kayit.json) ve imzası (kayit.p7s, ayrık CMS, DER) indirilebilir; Damga'dan bağımsız doğrulamak için:
openssl cms -verify -binary -inform DER -in es_….p7s -content es_….json -noverify
İmzalayan sertifika evidence ayarındaki anahtardır (kurulumda e-mühür PKCS#12 önerilir; verilmezse Damga'nın kendi öz imzalı anahtarı).
Hatalar
| HTTP | code |
Anlamı |
|---|---|---|
| 403 | domain_not_verified |
From alan adı bu hesapta (kurum platformunda kurumda) doğrulanmamış |
| 403 | account_required |
Platform bir üyeye bağlı değil (yönetimin eklediği platformlar mühürleyemez) |
| 402 | insufficient_credits |
Kredi yetmiyor |
| 413 | too_large |
.eml sınırı (25 MB) aşıldı; özet gönderin |
| 422 | validation_failed |
Özet alanları eksik ya da eml base64 değil |
KEP
KEP (Kayıtlı Elektronik Posta) iletisi yalnız BTK yetkili bir KEP hizmet sağlayıcısının (PTT KEP, TÜRKKEP…) sistemi üzerinden gönderilir. Damga'nın KEP sürücüsü sağlayıcıyla yapılacak entegrasyon sözleşmesini bekler (kep.driver: none varsayılan); bağlı değilken panelde "KEP gönderimi: sağlayıcı bağlantısı yapılandırılmadı" yazar.