DamgaOndiso

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ı).

  1. Panelde alan adını ekleyin (ör. ornek.com.tr).
  2. DNS yönetiminize gösterilen TXT kaydını ekleyin; kayıt adı alan adının kendisi ya da _damga.ornek.com.tr olabilir:
ornek.com.tr.  TXT  "damga-dogrulama=k2m4n6p8q9r2s3t4u5v6w7x8y9z2a3b4"
  1. 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

  • header değerini iletiye başlık olarak ekleyin (X-Damga-Seal: es_…).
  • footer_html değerini HTML gövdenin, footer_text değ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ı \n yapı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.