Geliştiriciler → Kılavuzlar

E-postaları uygulamanızda alın

Destek talepleri, bildirimlere verilen yanıtlar, bir bota e-postayla gönderilen belgeler: alan adınızdaki bir adrese gelen e-posta, metni, HTML'i ve tüm ekleriyle birlikte HTTPS uç noktanıza tek bir imzalı JSON POST isteği olarak ulaşır. Sürekli kontrol etmeniz gereken bir posta kutusu yok, IMAP yok.

Gerekenler

  • NameOcean'da kayıtlı bir alan adı: bu alan adları için yönlendirme ve e-postayı webhook'a iletme ücretsizdir.
  • Herkese açık bir adreste bulunan ve 20 saniye içinde yanıt veren bir HTTPS uç noktası.
  • nameocean CLI veya email:write yetkisine sahip bir API anahtarı.

1. Alan adı için yönlendirmeyi açın

nameocean
$ nameocean email forwards on example.com

Bu işlem, alan adının MX kaydını NameOcean'ın e-posta yönlendiricilerine yönlendirir. Alan adının başka bir yerdeki posta kutuları için zaten MX kayıtları varsa komut durur ve bu kayıtları listeler, çünkü alan adına gelen tüm e-postalar buraya taşınır. --replace-mx seçeneğini yalnızca bunu gerçekten istiyorsanız ekleyin.

2. E-postayı webhook'a iletme talebinde bulunun

Spam aktarıcılarını engellemek için e-postaların bir URL'ye gönderilmesi, kısa bir incelemenin ardından hesap bazında etkinleştirilir. Alan adının Kontrol Paneli → E-posta Yönlendirme altındaki sayfasından, ne için kullanacağınızı belirten kısa bir açıklamayla talepte bulunun. Onaylanana kadar API 403 not_approved yanıtını döndürür.

3. Bir adresi uç noktanıza yönlendirin

nameocean
$ nameocean email inbound add example.com support https://app.example.com/hooks/mail
curl
$ curl -X POST https://nameocean.net/api/v1/email/forwarding/example.com/webhooks \
    -H "Authorization: Bearer $NAMEOCEAN_API_KEY" -H "Content-Type: application/json" \
    -d '{"localpart": "support", "url": "https://app.example.com/hooks/mail"}'

Yanıt, imzalama anahtarını (whsec_…) içerir; bunu uygulamanızın ayarlarında saklayın. localpart değeri * olduğunda, alan adının kendine ait takma adı olmayan tüm adresleri iletilir. Bir alan adında bu webhook'lardan en fazla üç tane olabilir.

4. E-postayı alın

İmzayı ham gövde üzerinden doğrulayın, ardından JSON'u okuyun. Küçük bir Flask alıcısı:

app.py
import base64, hashlib, hmac, json, os, time

from flask import Flask, abort, request

app = Flask(__name__)
SECRET = os.environ["NAMEOCEAN_WEBHOOK_SECRET"]  # whsec_...


def verified(header, body, tolerance=300):
    fields = dict(part.split("=", 1) for part in header.split(",") if "=" in part)
    ts = int(fields.get("t", "0"))
    if abs(time.time() - ts) > tolerance:
        return False
    expected = hmac.new(SECRET.encode(), f"{ts}.".encode() + body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, fields.get("v1", ""))


@app.post("/hooks/mail")
def mail():
    body = request.get_data()
    if not verified(request.headers.get("X-NameOcean-Signature", ""), body):
        abort(401)
    mail = json.loads(body)
    print(mail["envelope"]["from"], "→", mail["envelope"]["to"], mail["subject"])
    for a in mail["attachments"]:
        data = base64.b64decode(a["content_base64"])
        print("  attachment", a["filename"], a["content_type"], len(data), "bytes")
    return "", 204  # any 2xx: delivered

Gelen veriler

POST https://app.example.com/hooks/mail
X-NameOcean-Event: email.received
X-NameOcean-Delivery: 6f1c2a4e-8b3d-4f5a-9c7e-1d2b3a4c5e6f
X-NameOcean-Signature: t=1794300000,v1=5f2b…

{
  "id": "6f1c2a4e-8b3d-4f5a-9c7e-1d2b3a4c5e6f",
  "event": "email.received",
  "received_at": "2026-11-11T09:30:12+00:00",
  "envelope": {"from": "alice@example.org", "to": "support@example.com"},
  "from": "Alice <alice@example.org>",
  "to": "support@example.com",
  "cc": null,
  "reply_to": null,
  "subject": "Order 1042",
  "date": "Wed, 11 Nov 2026 09:30:05 +0000",
  "message_id": "<…@example.org>",
  "in_reply_to": null,
  "references": null,
  "text": "Hi…",
  "html": "<p>Hi…</p>",
  "headers": [["From", "Alice <alice@example.org>"], …],
  "attachments": [{"filename": "invoice.pdf", "content_type": "application/pdf", "content_id": null,
                   "size": 48211, "content_base64": "JVBERi0…"}],
  "spam_score": 0.4,
  "size": 66120
}

Bir e-posta yeniden gönderildiğinde id aynı kalır; yinelenenleri atlamak için bunu kullanın. in_reply_to ve references, kendi e-postalarınızdan hangisine yanıt verildiğini gösterir.

Uç noktanız erişilemez olduğunda

  • 2xx yanıtı, iletimin başarılı olduğu anlamına gelir. 408, 429, 5xx, zaman aşımı (20 saniye) veya bağlantı kurulamaması durumunda 6 saat boyunca yeniden denenir.
  • Diğer tüm 4xx yanıtları kesindir: e-posta kendiliğinden yeniden gönderilmez.
  • Gönderilemeyen e-postalar 30 gün boyunca saklanır. Bunları nameocean email forwards log example.com (veya GET /email/forwarding/example.com/messages) ile bulun ve serbest bırakın: e-posta aynı id ile bir kez daha gönderilir.
  • Alan adı başına günde en fazla 500 e-posta webhook'lara iletilir; bu sınırı aşan e-postalar da aynı şekilde bekletilir.