#pApiAuth
पूर्ण API & CLI फ़ील्ड संदर्भ: सभी 12 ऑब्जेक्ट प्रकार, REST एंडपॉइंट & POST /api/v1/send
यह संदर्भ सभी 12 प्रबंधन ऑब्जेक्ट (/api/admin/cli/objects/{type} & nextxch-cli) के साथ-साथ ट्रांज़ैक्शनल ईमेल डिलीवरी (POST /api/v1/send) की हर JSON प्रॉपर्टी, डेटा प्रकार, enum मान, डिफ़ॉल्ट सेटिंग और न्यूनतम RBAC भूमिका का दस्तावेज़ीकरण करता है। dkimSigningMode, tlsMode, allowedCidrs या warmingEnabled जैसी किसी भी प्रॉपर्टी को खोजने के लिए तालिका के ऊपर दिए गए त्वरित फ़िल्टर बॉक्स का उपयोग करें।
आपके टर्मिनल में या HTTP के माध्यम से लाइव इंट्रोस्पेक्शन: हर nextxch यह पूर्ण स्कीमा मशीन-पठनीय JSON में GET /api/admin/cli/schema पर उपलब्ध कराता है (SHA-256 हेडर X-Nextxch-Schema-Version के साथ)। अपने टर्मिनल में किसी भी समय nextxch-cli describe <Type> चलाएँ (उदा. nextxch-cli describe Domain या nextxch-cli describe SmtpQueue)।
TransactionalSendRequest (POST /api/v1/send)
13
IntegrationKey (API v1)
9
CalendarEvent (API v1)
12
Rooms & Booking (API v1)
6
Contact, Directory & Sharing (API v1)
9
Webhook (API v1)
4
Tenant
11
Domain
19
Account (Account/User & Account/List)
18
Alias
7
ApiKey
11
Route
10
TransactionalSend (Singleton)
11
ReputationShield (Singleton)
20
SpamGuard (Singleton)
15
SmtpQueue (Singleton)
19
TransportRules & Server (Singletons)
11
TransactionalSendRequest (POST /api/v1/send)
कुंजी: Idempotency-Key
RBAC: User+
वेब ऐप्स, ERP, CRM और 2FA कोड के लिए उच्च-थ्रूपुट HTTP JSON डिलीवरी एंडपॉइंट, श्रेणी प्राथमिकता, IP वार्मिंग, सप्रेशन पूर्व-जाँच और 24 घंटे की आइडेम्पोटेंसी के साथ।
/api/v1/send
ट्रांज़ैक्शनल ईमेल को कतार में डालता है और हस्ताक्षरित करता है (UTF-8 Multipart/Alternative + अटैचमेंट)
/api/v1/unsubscribe/{token}
सार्वजनिक RFC 8058 One-Click-Unsubscribe एंडपॉइंट (DKIM-हस्ताक्षरित टोकन)
from
string
वैकल्पिक
Key senderAddress
to
string[]
आवश्यक
cc
string[]
वैकल्पिक
[]
bcc
string[]
वैकल्पिक
[]
replyTo
string
वैकल्पिक
subject
string
आवश्यक
textBody
string
वैकल्पिक
htmlBody
string
वैकल्पिक
category
string
वैकल्पिक
transactional
"critical""transactional""notification""marketing"overflowMode
string
वैकल्पिक
DeferQueue
"DeferQueue""Reject429"idempotencyKey
string
वैकल्पिक
Header Idempotency-Key
headers
Record<string, string>
वैकल्पिक
{}
attachments
SendAttachmentDto[]
वैकल्पिक
[]
{
"from": "Abrechnung <rechnung@firma.de>",
"to": ["einkauf@kunde.de"],
"cc": ["buchhaltung@firma.de"],
"subject": "Ihre elektronische Rechnung RE-2026-90412",
"category": "transactional",
"overflowMode": "DeferQueue",
"textBody": "Guten Tag,\nanbei erhalten Sie Ihre Rechnung RE-2026-90412.",
"htmlBody": "<p>Guten Tag,</p><p>anbei erhalten Sie Ihre Rechnung <strong>RE-2026-90412</strong>.</p>",
"headers": {
"X-ERP-Document-Id": "RE-2026-90412"
},
"attachments": [
{
"fileName": "RE-2026-90412.pdf",
"contentType": "application/pdf",
"base64Content": "JVBERi0xLjcKJcfs..."
}
]
}
# 1) Kleinstprivilegierten Sende-Key (Role=User) für rechnung@firma.de erstellen:
nextxch-cli create ApiKey \
--set label="ERP Rechnungsversand" \
--set role=User \
--set senderAddress=rechnung@firma.de \
--set defaultCategory=transactional \
--set allowedCidrs=10.20.0.0/16
# 2) Risikofreier Trockentest gegen die integrierte Sandbox-Sink-Domain:
# ok@sink.nextxch.local | bounce@sink.nextxch.local | defer@sink.nextxch.local
curl -fsS -X POST "https://mail.firma.de/api/v1/send" \
-H "Authorization: Bearer smk_01968f2a_..." \
-H "Idempotency-Key: inv-2026-90412" \
-H "Content-Type: application/json" \
-d '{
"from": "rechnung@firma.de",
"to": ["einkauf@kunde.de"],
"subject": "Ihre Rechnung RE-2026-90412",
"category": "transactional",
"textBody": "Guten Tag, anbei Ihre Rechnung RE-2026-90412.",
"htmlBody": "<p>Guten Tag, anbei Ihre Rechnung <b>RE-2026-90412</b>.</p>"
}'
using System.Net.Http.Headers;
using System.Net.Http.Json;
using var http = new HttpClient { BaseAddress = new Uri("https://mail.firma.de") };
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "smk_01968f2a_...");
http.DefaultRequestHeaders.Add("Idempotency-Key", "inv-2026-90412");
var response = await http.PostAsJsonAsync("/api/v1/send", new
{
from = "rechnung@firma.de",
to = new[] { "einkauf@kunde.de" },
subject = "Ihre Rechnung RE-2026-90412",
category = "transactional",
textBody = "Guten Tag, anbei Ihre Rechnung RE-2026-90412.",
htmlBody = "<p>Guten Tag, anbei Ihre Rechnung <strong>RE-2026-90412</strong>.</p>"
});
response.EnsureSuccessStatusCode();
IntegrationKey (API v1)
कुंजी: id
RBAC: TenantAdmin+
/api/v1 के लिए स्कोप वाली इंटीग्रेशन कुंजी। एक कुंजी किसी एक उपयोगकर्ता की ओर से कार्य करती है या, टेनेंट इंटीग्रेशन के रूप में, X-Nextxch-Act-As हेडर में नामित उपयोगकर्ता की ओर से। स्कोप के बिना API 403 लौटाता है; किसी अन्य टेनेंट का उपयोगकर्ता 404 देता है। वैकल्पिक OAuth 2.0 client credentials (टोकन 1 घंटे के लिए मान्य)।
/api/admin/integrations/keys
एक कुंजी बनाएँ (एडमिन, एक बार दिखाई जाती है)
/api/admin/integrations/keys/{id}
स्कोप बदलें
/api/admin/integrations/keys/{id}
एक कुंजी (और उसके OAuth टोकन) निरस्त करें
/api/v1/oauth/token
OAuth 2.0 client_credentials: एक्सेस टोकन के लिए key id + key
/api/v1/me
कुंजी, स्कोप और कार्य करने वाला उपयोगकर्ता
/api/v1/openapi.json
इंस्टॉलेशन का OpenAPI 3.1 दस्तावेज़
label
string
आवश्यक
mode
string
आवश्यक
user
"user""tenant"userEmail
string
वैकल्पिक
scopes
string[]
आवश्यक
"calendar.read""calendar.write""rooms.read""booking.read""booking.write""contacts.read""contacts.write""directory.read""sharing.manage""webhooks.manage""mail.send"domainId
guid
वैकल्पिक
allowedCidrs
string[]
वैकल्पिक
[]
expiresInDays
integer
वैकल्पिक
senderAddress
string
वैकल्पिक
apiKey
string
केवल-पठन
{
"label": "CRM",
"mode": "tenant",
"scopes": ["calendar.write", "rooms.read", "contacts.write", "webhooks.manage"],
"allowedCidrs": ["203.0.113.0/24"],
"expiresInDays": 365
}
# Integrations-Schlüssel: Admin > API & Integrationen > Neuer Schlüssel
# Danach z. B. ein Access-Token per OAuth 2.0 Client Credentials holen:
curl -fsS -X POST "https://mail.firma.de/api/v1/oauth/token" \
-d grant_type=client_credentials \
-d client_id=0196c3a2-5f1e-7c11-9a20-1c2d3e4f5a6b \
-d client_secret=smk_0196c3a25f1e7c119a201c2d3e4f5a6b_... \
-d scope="calendar.read rooms.read"
curl -fsS "https://mail.firma.de/api/v1/me" \
-H "Authorization: Bearer smk_0196c3a2..." \
-H "X-Nextxch-Act-As: anna@firma.de"
using var http = new HttpClient { BaseAddress = new Uri("https://mail.firma.de") };
http.DefaultRequestHeaders.Authorization = new("Bearer", "smk_0196c3a2...");
http.DefaultRequestHeaders.Add("X-Nextxch-Act-As", "anna@firma.de");
var me = await http.GetFromJsonAsync<JsonElement>("/api/v1/me");
CalendarEvent (API v1)
कुंजी: hrefName
RBAC: User+
शृंखला और अपवादों के साथ ईवेंट, उपस्थित लोग, कक्ष, आमंत्रण, उत्तर, उपलब्ध/व्यस्त, साझा और वैश्विक कैलेंडर तथा आमंत्रण लिंक। स्कोप calendar.read और calendar.write। समय UTC (ISO-8601) में, समय क्षेत्र IANA नामों के रूप में।
/api/v1/calendars
अपने, साझा, वैश्विक और संसाधन कैलेंडर
/api/v1/calendar/events?from&to&calendarId&limit&cursor
किसी अवधि में घटनाएँ (श्रृंखला विस्तारित)
/api/v1/calendar/events
एक ईवेंट बनाएँ (लोगों और कक्षों को आमंत्रित करें)
/api/v1/calendar/events/{hrefName}
शृंखला और अपवादों के साथ ईवेंट
/api/v1/calendar/events/{hrefName}
परिवर्तन; श्रृंखला के भागों के लिए scope=occurrence|following
/api/v1/calendar/events/{hrefName}
हटाएँ, वैकल्पिक रूप से रद्दीकरण सूचना के साथ (notify=true)
/api/v1/calendar/events/{hrefName}/respond
किसी आमंत्रण का उत्तर दें
/api/v1/calendar/events/{hrefName}/invite-link
हस्ताक्षरित आमंत्रण लिंक
/api/v1/calendar/events/{hrefName}/ics
Raw iCalendar
/api/v1/calendar/freebusy
लोगों और कक्षों की उपलब्ध/व्यस्त स्थिति
title
string
आवश्यक
startUtc
datetime
आवश्यक
endUtc
datetime
आवश्यक
timeZone
string
वैकल्पिक
Europe/Berlin
allDay
boolean
वैकल्पिक
false
attendees
Attendee[]
वैकल्पिक
[]
sendInvitations
boolean
वैकल्पिक
false
recurrence
पुनरावृत्ति
वैकल्पिक
showAs
string
वैकल्पिक
busy
"free""tentative""busy""oof""workingElsewhere"isPrivate
boolean
वैकल्पिक
false
calendarId
string
वैकल्पिक
teamsMeeting
boolean
वैकल्पिक
{
"title": "Projektstart",
"startUtc": "2026-12-03T09:00:00Z",
"endUtc": "2026-12-03T10:00:00Z",
"timeZone": "Europe/Berlin",
"attendees": [
{ "email": "bernd@firma.de" },
{ "email": "raum-1@firma.de" }
],
"sendInvitations": true
}
# Benötigte Scopes: calendar.read (lesen), calendar.write (schreiben)
# Einen Raum buchen: Raumadresse als Teilnehmer eintragen
curl -fsS -X POST "https://mail.firma.de/api/v1/calendar/events" \
-H "Authorization: Bearer smk_0196c3a2..." \
-H "X-Nextxch-Act-As: anna@firma.de" \
-H "Content-Type: application/json" \
-d '{"title":"Projektstart","startUtc":"2026-12-03T09:00:00Z","endUtc":"2026-12-03T10:00:00Z","timeZone":"Europe/Berlin","attendees":[{"email":"raum-1@firma.de"}]}'
var res = await http.PostAsJsonAsync("/api/v1/calendar/events", new
{
title = "Projektstart",
startUtc = DateTimeOffset.Parse("2026-12-03T09:00:00Z"),
endUtc = DateTimeOffset.Parse("2026-12-03T10:00:00Z"),
timeZone = "Europe/Berlin",
attendees = new[] { new { email = "raum-1@firma.de" } }
});
string href = (await res.Content.ReadFromJsonAsync<JsonElement>()).GetProperty("data").GetProperty("hrefName").GetString()!;
Rooms & Booking (API v1)
कुंजी: id
RBAC: User+
उपलब्धता के साथ कक्ष और संसाधन (rooms.read) और Calendly जैसे बुकिंग पेज (booking.read, booking.write): बुकिंग पेज, ईवेंट प्रकार, खाली स्लॉट, बुकिंग पढ़ना और रद्द करना। कक्ष को एक ईवेंट के माध्यम से बुक किया जाता है, जिसमें कक्ष प्रतिभागी होता है।
/api/v1/rooms?startUtc&endUtc&category
कक्ष और संसाधन, अवधि के लिए उपलब्धता सहित
/api/v1/rooms/{email}/availability
एक कक्ष का व्यस्त समय
/api/v1/booking/profile
समय और ईवेंट प्रकारों के साथ बुकिंग पेज
/api/v1/booking/event-types
इवेंट प्रकार
/api/v1/booking/event-types
ईवेंट प्रकार बनाएँ
/api/v1/booking/event-types/{id}/slots?from&to
उपलब्ध प्रारंभ समय (अधिकतम 42 दिन)
/api/v1/booking/bookings?status&from&to
बुकिंग
/api/v1/booking/bookings/{id}/cancel
एक बुकिंग रद्द करें (अतिथि को सूचित किया जाता है)
slots[].startUtc
datetime
केवल-पठन
slots[].endUtc
datetime
केवल-पठन
slots[].staff
object[]
केवल-पठन
status
string
केवल-पठन
"confirmed""cancelled"guest
object
केवल-पठन
free
boolean
केवल-पठन
{
"ok": true,
"data": {
"eventTypeId": "beratung-3f2a",
"durationMinutes": 30,
"timeZone": "Europe/Berlin",
"slots": [
{ "startUtc": "2026-12-04T08:00:00Z", "endUtc": "2026-12-04T08:30:00Z", "staff": [] }
]
}
}
# Benötigte Scopes: rooms.read, booking.read, booking.write
curl -fsS "https://mail.firma.de/api/v1/rooms?startUtc=2026-12-03T09:00:00Z&endUtc=2026-12-03T10:00:00Z" \
-H "Authorization: Bearer smk_0196c3a2..."
var slots = await http.GetFromJsonAsync<JsonElement>("/api/v1/booking/event-types/beratung/slots");
foreach (var s in slots.GetProperty("data").GetProperty("slots").EnumerateArray())
Console.WriteLine(s.GetProperty("startUtc").GetString());
Contact, Directory & Sharing (API v1)
कुंजी: hrefName
RBAC: User+
सभी फ़ील्ड और फ़ोटो के साथ व्यक्तिगत संपर्क (contacts.read, contacts.write, विरोध सुरक्षा के लिए If-Match), वैश्विक पता सूची (directory.read) और साझाकरण तथा प्रत्यायोजन (sharing.manage, प्रत्यायोजन = sendAs या sendOnBehalf के साथ मेलबॉक्स अनुदान)।
/api/v1/contacts?q
संपर्क खोजें
/api/v1/contacts
एक संपर्क बनाएँ
/api/v1/contacts/{hrefName}
एक संपर्क बदलें (null फ़ील्ड यथावत रहते हैं)
/api/v1/contacts/{hrefName}
संपर्क हटाएँ
/api/v1/directory?q&type
वैश्विक पता सूची
/api/v1/sharing/grants
अपने अनुदान
/api/v1/sharing/grants
अनुमति सेट करें या हटाएँ
/api/v1/sharing/shared-with-me
मेरे साथ साझा
givenName
string
वैकल्पिक
familyName
string
वैकल्पिक
organization
string
वैकल्पिक
emails
TypedValue[]
वैकल्पिक
[]
phones
TypedValue[]
वैकल्पिक
[]
addresses
Address[]
वैकल्पिक
[]
birthday
string
वैकल्पिक
photo
string
केवल-लेखन (सीक्रेट)
permissions
string[]
वैकल्पिक
"freeBusy""read""write""delete""sendOnBehalf""sendAs""manage"{
"givenName": "Clara",
"familyName": "Kunde",
"organization": "Kunde AG",
"emails": [{ "type": "work", "value": "clara@kunde.example" }],
"phones": [{ "type": "cell", "value": "+49 170 1234567" }]
}
# Benötigte Scopes: contacts.read, contacts.write, directory.read, sharing.manage
curl -fsS -X POST "https://mail.firma.de/api/v1/contacts" \
-H "Authorization: Bearer smk_0196c3a2..." \
-H "Content-Type: application/json" \
-d '{"givenName":"Clara","familyName":"Kunde","emails":[{"type":"work","value":"clara@kunde.example"}]}'
await http.PutAsJsonAsync("/api/v1/sharing/grants", new
{
kind = "calendar", granteeType = "user", grantee = "bernd@firma.de", permissions = new[] { "read" }
});
Webhook (API v1)
कुंजी: id
RBAC: User+
हस्ताक्षरित JSON POST के रूप में इवेंट: calendar.event.created, calendar.event.updated, calendar.event.deleted, calendar.invitation.replied, booking.created, booking.rescheduled, booking.cancelled। हस्ताक्षर X-Nextxch-Signature: v1=hex(HMAC-SHA256(secret, X-Nextxch-Timestamp + "." + body))। 30 s, 2 min, 10 min, 1 h और 6 h के बाद पुनः प्रयास।
/api/v1/webhooks
टेनेंट के वेबहुक
/api/v1/webhooks
वेबहुक पंजीकृत करें (सीक्रेट केवल प्रतिक्रिया में)
/api/v1/webhooks/{id}
वेबहुक हटाएँ
/api/v1/webhooks/{id}/deliveries
हाल की डिलीवरी
/api/v1/webhooks/{id}/test
एक टेस्ट ईवेंट भेजें
url
string
आवश्यक
events
string[]
आवश्यक
"calendar.event.created""calendar.event.updated""calendar.event.deleted""calendar.invitation.replied""booking.created""booking.rescheduled""booking.cancelled""*"secret
string
केवल-पठन
id (Ereignis)
string
केवल-पठन
{
"id": "evt_5c1f0e9a2b7d4c3e8f601a2b",
"type": "calendar.invitation.replied",
"createdAtUtc": "2026-12-01T10:15:02Z",
"tenantId": "0196c3a2-0000-7000-8000-000000000001",
"data": {
"calendarId": "0196c3a25f1e7c11:default",
"hrefName": "0196c3a2@nextxch.ics",
"title": "Projektstart",
"startUtc": "2026-12-03T09:00:00Z",
"attendee": { "email": "bernd@firma.de", "partStat": "ACCEPTED" }
}
}
# Signatur prüfen (Bash):
# expected="v1=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | cut -d' ' -f2)"
curl -fsS -X POST "https://mail.firma.de/api/v1/webhooks" \
-H "Authorization: Bearer smk_0196c3a2..." \
-H "Content-Type: application/json" \
-d '{"url":"https://crm.firma.de/hooks/nextxch","events":["calendar.event.created","booking.created"]}'
// ASP.NET Core receiver
app.MapPost("/hooks/nextxch", async (HttpRequest req) =>
{
using var ms = new MemoryStream();
await req.Body.CopyToAsync(ms);
string ts = req.Headers["X-Nextxch-Timestamp"]!;
byte[] mac = HMACSHA256.HashData(Encoding.UTF8.GetBytes(secret), [.. Encoding.ASCII.GetBytes(ts + "."), .. ms.ToArray()]);
return req.Headers["X-Nextxch-Signature"] == "v1=" + Convert.ToHexStringLower(mac) ? Results.Ok() : Results.Unauthorized();
});
Tenant
कुंजी: slug
RBAC: ServerAdmin+
मल्टी-टेनेंट संगठन सीमा, जो डोमेन, प्रिंसिपल, स्टोरेज कोटा (GiB) और डिफ़ॉल्ट GoBD WORM अनुपालन प्रतिधारण को अलग करती है।
/api/admin/cli/objects/Tenant
सभी टेनेंट सूचीबद्ध करता है
/api/admin/cli/objects/Tenant/{slugOrId}
slug या UUID द्वारा टेनेंट प्राप्त करता है
/api/admin/cli/objects/Tenant
एक नया टेनेंट बनाता है
/api/admin/cli/objects/Tenant/{slugOrId}
टेनेंट कोटा को उसी स्थान पर अपडेट करता है
id
guid
केवल-पठन
UUIDv7
slug
string
PRIMARY KEY
name
string
आवश्यक
isActive
boolean
वैकल्पिक
true
maxDomains
integer
वैकल्पिक
100
maxPrincipals
integer
वैकल्पिक
10000
quotaGb
integer
वैकल्पिक
100
outboundDailyLimit
integer
वैकल्पिक
25000
defaultLockMode
string
वैकल्पिक
Normal
"Normal""Governance""Compliance""LegalHold"defaultRetentionDays
integer
वैकल्पिक
0
createdAtUtc
datetime
केवल-पठन
{
"slug": "acme",
"name": "ACME Logistik GmbH",
"isActive": true,
"maxDomains": 50,
"maxPrincipals": 2500,
"quotaGb": 250,
"outboundDailyLimit": 25000,
"defaultLockMode": "Compliance",
"defaultRetentionDays": 3650
}
# Mandant anlegen:
nextxch-cli create Tenant \
--set slug=acme \
--set name="ACME Logistik GmbH" \
--set quotaGb=250 \
--set defaultLockMode=Compliance \
--set defaultRetentionDays=3650
# Mandant abfragen & Kontingent erhöhen:
nextxch-cli get Tenant acme
nextxch-cli update Tenant acme --set quotaGb=500
curl -fsS -X POST "https://mail.firma.de/api/admin/cli/objects/Tenant" \
-H "Authorization: Bearer smk_..." \
-H "Content-Type: application/json" \
-d '{"slug":"acme","name":"ACME Logistik GmbH","quotaGb":250,"defaultLockMode":"Compliance","defaultRetentionDays":3650}'
var payload = new
{
slug = "acme",
name = "ACME Logistik GmbH",
quotaGb = 250,
defaultLockMode = "Compliance",
defaultRetentionDays = 3650
};
using var res = await http.PostAsJsonAsync("/api/admin/cli/objects/Tenant", payload);
Domain
कुंजी: name
RBAC: TenantAdmin+
स्वचालित समानांतर Dual-DKIM कुंजी निर्माण (RSA-2048 + Ed25519), GoBD WORM प्रतिधारण नीति, प्लस-एड्रेसिंग और दर सीमाओं के साथ होस्ट किया गया मेल डोमेन।
/api/admin/cli/objects/Domain
सभी डोमेन सूचीबद्ध करता है
/api/admin/cli/objects/Domain/{name}
डोमेन कॉन्फ़िगरेशन & DKIM सेलेक्टर प्राप्त करता है
/api/admin/cli/objects/Domain
डोमेन बनाता है & RSA-2048 + Ed25519 DKIM कुंजियाँ उत्पन्न करता है
/api/admin/cli/objects/Domain/{name}
DKIM मोड, कोटा या प्रतिधारण को 0 ms में अपडेट करता है
/api/admin/cli/dns/{name}?live=true
लाइव DNS रिकॉर्ड सत्यापित करता है या RFC 1035 BIND ज़ोन निर्यात करता है
id
guid
केवल-पठन
UUIDv7
name
string
PRIMARY KEY
tenant
string
वैकल्पिक
default
isActive
boolean
वैकल्पिक
true
postmasterAddress
string
वैकल्पिक
postmaster@<name>
dkimSigningMode
string
वैकल्पिक
Dual
"Rsa2048""Ed25519""Dual"dkimRsaSelector
string
वैकल्पिक
s2026
dkimRsaDnsName
string
केवल-पठन
s2026._domainkey.<name>
dkimEd25519Selector
string
वैकल्पिक
ed2026
dkimEd25519DnsName
string
केवल-पठन
ed2026._domainkey.<name>
retentionLockMode
string
वैकल्पिक
Normal
"Normal""Governance""Compliance""LegalHold"retentionDays
integer
वैकल्पिक
0
quotaGb
integer
वैकल्पिक
50
maxMessageSizeMb
integer
वैकल्पिक
50
maxAccounts
integer
वैकल्पिक
1000
outboundDailyLimit
integer
वैकल्पिक
5000
outboundHourlyLimit
integer
वैकल्पिक
1000
usePlusAddressing
boolean
वैकल्पिक
true
createdAtUtc
datetime
केवल-पठन
{
"name": "muster-logistik.de",
"tenant": "default",
"isActive": true,
"postmasterAddress": "postmaster@muster-logistik.de",
"dkimSigningMode": "Dual",
"dkimRsaSelector": "s2026",
"dkimEd25519Selector": "ed2026",
"retentionLockMode": "Compliance",
"retentionDays": 3650,
"quotaGb": 100,
"maxMessageSizeMb": 50,
"maxAccounts": 500,
"outboundDailyLimit": 10000,
"outboundHourlyLimit": 2000,
"usePlusAddressing": true
}
# Domain mit Dual-DKIM und 10 Jahren GoBD-Compliance anlegen:
nextxch-cli create Domain \
--set name=muster-logistik.de \
--set dkimSigningMode=Dual \
--set retentionLockMode=Compliance \
--set retentionDays=3650
# Fertige RFC-1035 BIND-Zonendatei exportieren & DNS live prüfen:
nextxch-cli dns muster-logistik.de --bind > muster-logistik.de.zone
nextxch-cli dns muster-logistik.de --live
curl -fsS -X PATCH "https://mail.firma.de/api/admin/cli/objects/Domain/muster-logistik.de" \
-H "Authorization: Bearer smk_..." \
-H "Content-Type: application/json" \
-d '{"dkimSigningMode":"Dual","retentionLockMode":"Compliance","retentionDays":3650}'
using var res = await http.PatchAsJsonAsync(
"/api/admin/cli/objects/Domain/muster-logistik.de",
new { dkimSigningMode = "Dual", quotaGb = 200 });
res.EnsureSuccessStatusCode();
Account (Account/User & Account/List)
कुंजी: email
RBAC: TenantAdmin+
एक उपयोगकर्ता मेलबॉक्स (@type="User", IMAP/JMAP/CalDAV/CardDAV/ActiveSync के साथ) या एक वितरण सूची (@type="List", members[] के साथ) को दर्शाता है।
/api/admin/cli/objects/Account?filter=role=TenantAdmin
खातों और वितरण सूचियों को सूचीबद्ध/फ़िल्टर करता है
/api/admin/cli/objects/Account/User
RFC 6154 फ़ोल्डरों के साथ एक नया उपयोगकर्ता मेलबॉक्स बनाता है
/api/admin/cli/objects/Account/List
एक नई वितरण सूची बनाता है
/api/admin/cli/objects/Account/{email}
कोटा, अग्रेषण, अवकाश संदेश या पासवर्ड अपडेट करता है
/api/admin/cli/objects/Account/{email}
किसी खाते को सॉफ़्ट-डिलीट करता है
id
guid
केवल-पठन
UUIDv7
@type
string
वैकल्पिक
User
"User""List"email
string
PRIMARY KEY
displayName
string
वैकल्पिक
Lokalteil
password
string
केवल-लेखन (सीक्रेट)
role
string
वैकल्पिक
User
"User""ComplianceAuditor""TenantAdmin""ServerAdmin"isActive
boolean
वैकल्पिक
true
quotaMb
integer
वैकल्पिक
5120
usedBytes
long
केवल-पठन
0
outboundDailyLimit
integer
वैकल्पिक
500
forwardAddress
string
वैकल्पिक
forwardKeepOriginal
boolean
वैकल्पिक
true
vacationEnabled
boolean
वैकल्पिक
false
vacationSubject
string
वैकल्पिक
vacationBody
string
केवल-लेखन (सीक्रेट)
twoFactorEnabled
boolean
केवल-पठन
false
members
string[]
वैकल्पिक
[]
createdAtUtc
datetime
केवल-पठन
{
"@type": "User",
"email": "anna.weber@muster-logistik.de",
"displayName": "Anna Weber (IT-Leitung)",
"password": "SicheresStartPasswort!2026",
"role": "TenantAdmin",
"isActive": true,
"quotaMb": 15360,
"outboundDailyLimit": 1000,
"forwardAddress": null,
"forwardKeepOriginal": true,
"vacationEnabled": false,
"vacationSubject": "Abwesenheitsnotiz: Anna Weber",
"vacationBody": "Ich bin ab Montag wieder erreichbar."
}
# Benutzerpostfach (15 GiB Quota) anlegen:
nextxch-cli create Account/User \
--set email=anna.weber@muster-logistik.de \
--set displayName="Anna Weber" \
--set password="SicheresStartPasswort!2026" \
--set quotaMb=15360
# Verteilerliste anlegen:
nextxch-cli create Account/List \
--set email=team@muster-logistik.de \
--set displayName="Disposition & Einkauf" \
--set members=anna.weber@muster-logistik.de,dispo@muster-logistik.de
curl -fsS -X POST "https://mail.firma.de/api/admin/cli/objects/Account/User" \
-H "Authorization: Bearer smk_..." \
-H "Content-Type: application/json" \
-d '{"email":"anna.weber@muster-logistik.de","displayName":"Anna Weber","password":"SicheresStartPasswort!2026","quotaMb":15360}'
await http.PostAsJsonAsync("/api/admin/cli/objects/Account/User", new
{
email = "anna.weber@muster-logistik.de",
displayName = "Anna Weber",
password = "SicheresStartPasswort!2026",
quotaMb = 15360
});
Alias
कुंजी: address
RBAC: TenantAdmin+
द्वितीयक ईमेल उपनाम या डिस्पोज़ेबल मास्क्ड गोपनीयता उपनाम, जो किसी प्राथमिक Account मेलबॉक्स या वितरण सूची पर रूट किया जाता है।
/api/admin/cli/objects/Alias
सभी उपनाम और मास्क्ड ईमेल सूचीबद्ध करता है
/api/admin/cli/objects/Alias
लक्ष्य मेलबॉक्स पर रूट किया गया नया उपनाम बनाता है
/api/admin/cli/objects/Alias/{address}
किसी उपनाम को सक्षम/रोकता है या उसका लक्ष्य अपडेट करता है
/api/admin/cli/objects/Alias/{address}
उपनाम हटाता है
address
string
PRIMARY KEY
target
string
आवश्यक
principalId
guid
केवल-पठन
description
string
वैकल्पिक
""
isMasked
boolean
वैकल्पिक
false
isEnabled
boolean
वैकल्पिक
true
createdAtUtc
datetime
केवल-पठन
{
"address": "shop-8f2k@muster-logistik.de",
"target": "anna.weber@muster-logistik.de",
"description": "Fachbuchhandlung / Online-Bestellung",
"isMasked": true,
"isEnabled": true
}
# Masked-Email-Alias anlegen:
nextxch-cli create Alias \
--set address=shop-8f2k@muster-logistik.de \
--set target=anna.weber@muster-logistik.de \
--set description="Fachbuchhandlung" \
--set isMasked=true
# Alias bei Spam-Aufkommen mit 1 Befehl stummschalten:
nextxch-cli update Alias shop-8f2k@muster-logistik.de --set isEnabled=false
curl -fsS -X POST "https://mail.firma.de/api/admin/cli/objects/Alias" \
-H "Authorization: Bearer smk_..." \
-H "Content-Type: application/json" \
-d '{"address":"vertrieb@muster-logistik.de","target":"anna.weber@muster-logistik.de","description":"Vertrieb & Angebote"}'
await http.PostAsJsonAsync("/api/admin/cli/objects/Alias", new
{
address = "vertrieb@muster-logistik.de",
target = "anna.weber@muster-logistik.de",
description = "Vertrieb & Angebote",
isEnabled = true
});
ApiKey
कुंजी: id
RBAC: TenantAdmin+
/api/v1/send, SCIM 2.0 या nextxch-cli के लिए अपरिवर्तनीय, RBAC- और CIDR-प्रतिबंधित Scoped API Key (smk_<id>_<secret>)।
/api/admin/cli/objects/ApiKey
सक्रिय API कुंजियों की सूची (secret छोड़ा गया)
/api/admin/cli/objects/ApiKey
एक नई API कुंजी बनाता है और apiKey (smk_...) एक बार लौटाता है
/api/admin/cli/objects/ApiKey/{id}
API कुंजी को तुरंत रद्द करता है
id
guid
केवल-पठन
UUIDv7
apiKey
string
केवल-निर्माण
smk_<id>_<secret>
label
string
आवश्यक
role
string
वैकल्पिक
TenantAdmin
"User""ComplianceAuditor""TenantAdmin""ServerAdmin"senderAddress
string
वैकल्पिक
defaultCategory
string
वैकल्पिक
transactional
"critical""transactional""notification""marketing"allowedCidrs
string[]
वैकल्पिक
[] (Alle IPs)
expiresInDays
integer
केवल-लेखन (सीक्रेट)
null (Kein Ablauf)
expiresAtUtc
datetime
केवल-पठन
outboundDailyLimit
integer
वैकल्पिक
10000
isActive
boolean
केवल-पठन
true
{
"label": "Shopware 6 ERP Rechnungsversand",
"role": "User",
"senderAddress": "rechnung@muster-logistik.de",
"defaultCategory": "transactional",
"allowedCidrs": ["10.20.10.15/32", "2a01:4f8:120:44aa::/64"],
"expiresInDays": 180,
"outboundDailyLimit": 10000
}
# CIDR-geschützten Key für Ansible / nextxch-cli erstellen:
nextxch-cli create ApiKey \
--set label="GitLab CI / Ansible" \
--set role=TenantAdmin \
--set allowedCidrs=10.20.0.0/16 \
--set expiresInDays=90
# Schlüssel widerrufen:
nextxch-cli delete ApiKey 0195f2a0-8b14-7000-9a10-001122334455
curl -fsS -X POST "https://mail.firma.de/api/admin/cli/objects/ApiKey" \
-H "Authorization: Bearer smk_..." \
-H "Content-Type: application/json" \
-d '{"label":"Shopware 6","role":"User","senderAddress":"rechnung@muster-logistik.de","allowedCidrs":["10.20.10.15/32"],"expiresInDays":180}'
var res = await http.PostAsJsonAsync("/api/admin/cli/objects/ApiKey", new
{
label = "Shopware 6",
role = "User",
senderAddress = "rechnung@muster-logistik.de",
allowedCidrs = new[] { "10.20.10.15/32" },
expiresInDays = 180
});
var created = await res.Content.ReadFromJsonAsync<JsonElement>();
string oneTimeSecretKey = created.GetProperty("apiKey").GetString()!;
Route
कुंजी: domain
RBAC: ServerAdmin+
प्रति-डोमेन आउटबाउंड SMTP रूटिंग या TLS प्रमाणपत्र अपवाद (उदा. बेमेल प्रमाणपत्र वाले भागीदार MX होस्ट के लिए StartTlsIgnoreCert, या स्मार्ट-होस्ट कनेक्टर)।
/api/admin/cli/objects/Route
सभी कस्टम आउटबाउंड रूट सूचीबद्ध करता है
/api/admin/cli/objects/Route
कस्टम डोमेन रूट या TLS ओवरराइड बनाता है
/api/admin/cli/objects/Route/{domain}
लक्ष्य होस्ट, पोर्ट या TLS मोड अपडेट करता है
/api/admin/cli/objects/Route/{domain}
कस्टम रूट हटाता है
domain
string
PRIMARY KEY
targetHost
string
वैकल्पिक
"" (Auto DNS-MX)
targetPort
integer
वैकल्पिक
25
tlsMode
string
वैकल्पिक
StartTlsOptional
"StartTlsOptional""StartTlsRequired""StartTlsIgnoreCert""ImplicitTls""ImplicitTlsIgnoreCert""None"username
string
वैकल्पिक
password
string
केवल-लेखन (सीक्रेट)
hasPassword
boolean
केवल-पठन
false
clearPassword
boolean
केवल-लेखन (सीक्रेट)
false
description
string
वैकल्पिक
enabled
boolean
वैकल्पिक
true
{
"domain": "neff.me",
"targetHost": "",
"targetPort": 25,
"tlsMode": "StartTlsIgnoreCert",
"username": null,
"description": "Shared-Hosting-MX mit abweichendem Zertifikatsnamen (Auto DNS-MX)",
"enabled": true
}
# Partner-Domain mit fehlerhaftem MX-Zertifikat per Auto-DNS-MX freigeben:
nextxch-cli create Route \
--set domain=neff.me \
--set tlsMode=StartTlsIgnoreCert \
--set description="TLS NameMismatch auf Partner-MX erlauben"
# Internes ERP-Subnetz an lokalen Connector routen:
nextxch-cli create Route \
--set domain=erp.firma.intern \
--set targetHost=10.40.2.15 \
--set targetPort=25
curl -fsS -X POST "https://mail.firma.de/api/admin/cli/objects/Route" \
-H "Authorization: Bearer smk_..." \
-H "Content-Type: application/json" \
-d '{"domain":"neff.me","targetHost":"","targetPort":25,"tlsMode":"StartTlsIgnoreCert","enabled":true}'
await http.PostAsJsonAsync("/api/admin/cli/objects/Route", new
{
domain = "neff.me",
targetHost = "",
targetPort = 25,
tlsMode = "StartTlsIgnoreCert",
enabled = true
});
TransactionalSend (Singleton)
कुंजी: singleton
RBAC: TenantAdmin+
प्रगतिशील 28-दिवसीय IP वार्मिंग, संदेश श्रेणियाँ और प्रति-प्राप्तकर्ता-प्रदाता प्रति घंटा/दैनिक कोटा (Google, Microsoft, Yahoo/AOL, जर्मन ISP, iCloud, *) नियंत्रित करता है।
/api/admin/cli/objects/TransactionalSend/singleton
सक्रिय IP वार्मिंग & प्रदाता कोटा नीति प्राप्त करता है
/api/admin/cli/objects/TransactionalSend/singleton
वार्मिंग दिवस, प्रीसेट या प्रदाता कोटा अपडेट करता है
enabled
boolean
वैकल्पिक
true
warmingEnabled
boolean
वैकल्पिक
false
startAtWarmingDay
integer
केवल-लेखन (सीक्रेट)
1
currentWarmingDay
integer
केवल-पठन
currentWarmingPercent
integer
केवल-पठन
warmingDailyRampPercents
integer[]
वैकल्पिक
[5,7,10,...,100]
maxDeferHours
integer
वैकल्पिक
48
defaultCategory
string
वैकल्पिक
transactional
"critical""transactional""notification""marketing"preset
string
केवल-लेखन (सीक्रेट)
"warming_28d""warming_14d""production_100"categories
CategoryPolicy[]
वैकल्पिक
4 Kategorien
providers
ProviderQuota[]
वैकल्पिक
6 Provider-Gruppen
{
"enabled": true,
"warmingEnabled": true,
"startAtWarmingDay": 1,
"maxDeferHours": 48,
"defaultCategory": "transactional",
"preset": "warming_28d"
}
# 28-Tage IP-Warming aktivieren:
nextxch-cli update TransactionalSend --set preset=warming_28d
# Direkt auf Warming-Tag 14 vorspringen:
nextxch-cli update TransactionalSend --set startAtWarmingDay=14
curl -fsS -X PATCH "https://mail.firma.de/api/admin/cli/objects/TransactionalSend/singleton" \
-H "Authorization: Bearer smk_..." \
-H "Content-Type: application/json" \
-d '{"preset":"warming_28d","enabled":true}'
await http.PatchAsJsonAsync(
"/api/admin/cli/objects/TransactionalSend/singleton",
new { preset = "warming_28d", enabled = true });
ReputationShield (Singleton)
कुंजी: singleton
RBAC: TenantAdmin+
वैकल्पिक आउटबाउंड प्रतिष्ठा सुरक्षा: स्वचालित बाउंस/शिकायत सप्रेशन सूची, RFC 8058 One-Click Unsubscribe, बाउंस सर्किट ब्रेकर, अनुकूली 421 ISP बैकऑफ़ और HMAC-SHA256 वेबहुक।
/api/admin/cli/objects/ReputationShield/singleton
वर्तमान Reputation Shield कॉन्फ़िगरेशन प्राप्त करता है
/api/admin/cli/objects/ReputationShield/singleton
सुरक्षा फ़्लैग अपडेट करता है या कोई प्रीसेट लागू करता है
preset
string
केवल-लेखन (सीक्रेट)
"off""recommended""strict_bulk"enableSuppressionPreCheck
boolean
वैकल्पिक
false
enforceSuppressionOnSmtpRelay
boolean
वैकल्पिक
false
allSuppressedBehavior
string
वैकल्पिक
reject_422
"reject_422""accept_noop"autoSuppressHardBounces
boolean
वैकल्पिक
false
hardBounceSuppressionDays
integer
वैकल्पिक
180
autoSuppressConsecutiveSoftBounces
boolean
वैकल्पिक
false
softBounceEscalationThreshold
integer
वैकल्पिक
5
autoSuppressFblComplaints
boolean
वैकल्पिक
false
enableOneClickUnsubscribe
boolean
वैकल्पिक
false
oneClickUnsubscribeCategories
string[]
वैकल्पिक
["marketing","notification"]
enableBounceCircuitBreaker
boolean
वैकल्पिक
false
maxHardBouncePercent
number
वैकल्पिक
5.0
maxComplaintPercent
number
वैकल्पिक
0.1
allowCriticalWhenTripped
boolean
वैकल्पिक
true
enableAdaptiveIspBackoff
boolean
वैकल्पिक
false
ispCooldownMinutes
integer
वैकल्पिक
15
webhookEnabled
boolean
वैकल्पिक
false
webhookUrl
string
वैकल्पिक
webhookSecret
string
केवल-लेखन (सीक्रेट)
{
"preset": "recommended",
"enableSuppressionPreCheck": true,
"autoSuppressHardBounces": true,
"hardBounceSuppressionDays": 180,
"enableOneClickUnsubscribe": true,
"oneClickUnsubscribeCategories": ["marketing", "notification"],
"enableBounceCircuitBreaker": true,
"maxHardBouncePercent": 5.0,
"maxComplaintPercent": 0.1,
"allowCriticalWhenTripped": true,
"enableAdaptiveIspBackoff": true,
"webhookEnabled": true,
"webhookUrl": "https://erp.firma.de/webhooks/nextxch"
}
# Empfohlenen Reputationsschutz aktivieren:
nextxch-cli update ReputationShield --set preset=recommended
# Webhook-Ziel konfigurieren:
nextxch-cli update ReputationShield \
--set webhookEnabled=true \
--set webhookUrl=https://erp.firma.de/webhooks/nextxch \
--set webhookSecret=whsec_9f8e7d6c5b4a
curl -fsS -X PATCH "https://mail.firma.de/api/admin/cli/objects/ReputationShield/singleton" \
-H "Authorization: Bearer smk_..." \
-H "Content-Type: application/json" \
-d '{"preset":"recommended"}'
await http.PatchAsJsonAsync(
"/api/admin/cli/objects/ReputationShield/singleton",
new { preset = "recommended" });
SpamGuard (Singleton)
कुंजी: singleton
RBAC: ServerAdmin+
बहु-चरणीय इनबाउंड सुरक्षा: SPF/DKIM/DMARC/ARC सत्यापन, Smart Greylisting (/24 IPv4 & /64 IPv6), ऑनलाइन ML क्लासिफ़ायर (FTRL-Proximal), DNSBL ज़ोन, अनुमति/ब्लॉकलिस्ट और ClamAV TCP स्कैन।
/api/admin/cli/objects/SpamGuard/singleton
SpamGuard थ्रेशोल्ड & प्रशिक्षण काउंटर प्राप्त करता है
/api/admin/cli/objects/SpamGuard/singleton
स्कोर, DNSBL, अनुमति सूचियाँ या ClamAV को वहीं अपडेट करता है
enableEmailAuthChecks
boolean
वैकल्पिक
true
enableGreylisting
boolean
वैकल्पिक
true
greylistRetryDelaySeconds
integer
वैकल्पिक
240
junkScoreThreshold
number
वैकल्पिक
4.5
rejectScoreThreshold
number
वैकल्पिक
9.0
tagSubjectOnJunk
boolean
वैकल्पिक
false
subjectTagPrefix
string
वैकल्पिक
"[SPAM] "
enableStructuralHeuristics
boolean
वैकल्पिक
true
dnsblZones
string[]
वैकल्पिक
["bl.spamcop.net","ix.dnsbl.manitu.net"]
dnsblHitScore
number
वैकल्पिक
3.5
allowedSendersOrDomains
string[]
वैकल्पिक
[]
blockedSendersOrDomains
string[]
वैकल्पिक
[]
clamAvEnabled
boolean
वैकल्पिक
false
clamAvHost
string
वैकल्पिक
"127.0.0.1"
clamAvPort
integer
वैकल्पिक
3310
{
"enableEmailAuthChecks": true,
"enableGreylisting": true,
"greylistRetryDelaySeconds": 240,
"junkScoreThreshold": 4.5,
"rejectScoreThreshold": 9.0,
"enableStructuralHeuristics": true,
"dnsblZones": ["bl.spamcop.net", "ix.dnsbl.manitu.net"],
"dnsblHitScore": 3.5,
"allowedSendersOrDomains": ["datev.de", "partner-spedition.de"],
"blockedSendersOrDomains": [],
"clamAvEnabled": false,
"clamAvHost": "127.0.0.1",
"clamAvPort": 3310
}
# Partner-Domains auf die Allowlist setzen:
nextxch-cli update SpamGuard \
--set allowedSendersOrDomains=datev.de,partner-spedition.de
# Schwellenwerte anpassen:
nextxch-cli update SpamGuard --set junkScoreThreshold=4.5 --set rejectScoreThreshold=9.0
curl -fsS -X PATCH "https://mail.firma.de/api/admin/cli/objects/SpamGuard/singleton" \
-H "Authorization: Bearer smk_..." \
-H "Content-Type: application/json" \
-d '{"junkScoreThreshold":4.5,"rejectScoreThreshold":9.0,"allowedSendersOrDomains":["datev.de"]}'
await http.PatchAsJsonAsync(
"/api/admin/cli/objects/SpamGuard/singleton",
new { junkScoreThreshold = 4.5, rejectScoreThreshold = 9.0 });
SmtpQueue (Singleton)
कुंजी: singleton
RBAC: ServerAdmin+
आउटबाउंड MX डिलीवरी कतार, वर्कर समवर्तिता, पुनः प्रयास अंतराल, ISP थ्रॉटलिंग, आउटबाउंड TLS सत्यापन, वैश्विक स्मार्ट-होस्ट और इनबाउंड ESMTP सीमाओं को नियंत्रित करता है।
/api/admin/cli/objects/SmtpQueue/singleton
सभी कतार, TLS और ESMTP सेटिंग्स प्राप्त करता है
/api/admin/cli/objects/SmtpQueue/singleton
कतार वर्कर, पुनः प्रयास शेड्यूल या ESMTP सीमाएँ 0 ms में अपडेट करता है
outboundQueuePaused
boolean
वैकल्पिक
false
outboundWorkerConcurrency
integer
वैकल्पिक
8
maxDeliveryAttempts
integer
वैकल्पिक
10
retryScheduleMinutes
integer[]
वैकल्पिक
[5,15,60,240,720]
maxConcurrentConnectionsPerMxDomain
integer
वैकल्पिक
4
strictThrottleDomains
string[]
वैकल्पिक
["t-online.de","gmx.de","web.de","yahoo.com"]
strictThrottleMaxConcurrency
integer
वैकल्पिक
2
outboundConnectTimeoutSeconds
integer
वैकल्पिक
30
outboundBindAddress
string
वैकल्पिक
"" (Auto)
outboundUseStartTls
boolean
वैकल्पिक
true
requireOutboundTls
boolean
वैकल्पिक
false
outboundTlsCertValidation
string
वैकल्पिक
Opportunistic
"Opportunistic""IgnoreErrors""Strict"outboundSmartHost
string
वैकल्पिक
""
outboundSmartPort
integer
वैकल्पिक
587
maxMessageSizeMb
long
वैकल्पिक
50
maxRecipientsPerTransaction
integer
वैकल्पिक
100
maxConnectionsPerIp
integer
वैकल्पिक
20
tarpitDelayMs
integer
वैकल्पिक
1500
requireTlsForAuth
boolean
वैकल्पिक
true
{
"outboundQueuePaused": false,
"outboundWorkerConcurrency": 8,
"maxDeliveryAttempts": 10,
"retryScheduleMinutes": [5, 15, 60, 240, 720],
"maxConcurrentConnectionsPerMxDomain": 4,
"strictThrottleDomains": ["t-online.de", "gmx.de", "web.de", "yahoo.com"],
"strictThrottleMaxConcurrency": 2,
"outboundUseStartTls": true,
"requireOutboundTls": false,
"outboundTlsCertValidation": "Opportunistic",
"maxMessageSizeMb": 50,
"maxRecipientsPerTransaction": 100,
"tarpitDelayMs": 1500,
"requireTlsForAuth": true
}
# Outbound-TLS auf Opportunistic (RFC 7435) setzen & MaxMessageSize auf 75 MiB erhöhen:
nextxch-cli update SmtpQueue \
--set outboundTlsCertValidation=Opportunistic \
--set maxMessageSizeMb=75
curl -fsS -X PATCH "https://mail.firma.de/api/admin/cli/objects/SmtpQueue/singleton" \
-H "Authorization: Bearer smk_..." \
-H "Content-Type: application/json" \
-d '{"outboundTlsCertValidation":"Opportunistic","maxMessageSizeMb":75}'
await http.PatchAsJsonAsync(
"/api/admin/cli/objects/SmtpQueue/singleton",
new { outboundTlsCertValidation = "Opportunistic", maxMessageSizeMb = 75 });
TransportRules & Server (Singletons)
कुंजी: singleton
RBAC: ServerAdmin+
संगठन-व्यापी कानूनी अस्वीकरण (DKIM हस्ताक्षर से पहले डाला जाता है), वैश्विक इनबाउंड Sieve स्क्रिप्ट, Fail2Ban ऑटो-बैन सीमाएँ और मानक ServerHostName।
/api/admin/cli/objects/TransportRules/singleton
अस्वीकरण, वैश्विक Sieve और ऑटो-बैन सेटिंग्स प्राप्त करता है
/api/admin/cli/objects/TransportRules/singleton
ट्रांसपोर्ट नियमों को उसी स्थान पर अपडेट करता है
/api/admin/cli/objects/Server/singleton
ServerHostName, स्टोरेज इंजन, कतार की गहराई और लाइसेंस स्थिति प्राप्त करता है
/api/admin/cli/objects/Server/singleton
मानक ServerHostName को 0 ms में अपडेट करता है
outboundDisclaimerEnabled
boolean
वैकल्पिक
false
outboundDisclaimerExternalOnly
boolean
वैकल्पिक
true
outboundDisclaimerText
string
वैकल्पिक
""
outboundDisclaimerHtml
string
वैकल्पिक
""
inboundSystemSieve
string
वैकल्पिक
""
autoBanThreshold
integer
वैकल्पिक
8
autoBanDurationMinutes
integer
वैकल्पिक
30
serverHostName
string
वैकल्पिक
mail.<domain>
storageProvider
string
केवल-पठन
Sqlite | SqlServer | Postgres
activeQueueCount
integer
केवल-पठन
0
licenseState
string
केवल-पठन
EnterpriseActive
{
"outboundDisclaimerEnabled": true,
"outboundDisclaimerExternalOnly": true,
"outboundDisclaimerText": "-- \nMuster Logistik GmbH · Industriestraße 18 · 70565 Stuttgart · HRB 774819",
"outboundDisclaimerHtml": "<p style='font-size:11px;color:#64748b'><strong>Muster Logistik GmbH</strong> · 70565 Stuttgart · HRB 774819</p>",
"inboundSystemSieve": "require [\"fileinto\"];\nif header :contains \"X-Spam-Flag\" \"YES\" { fileinto \"Junk\"; }",
"autoBanThreshold": 8,
"autoBanDurationMinutes": 30
}
# Pflicht-Impressum & Auto-Ban aktualisieren:
nextxch-cli update TransportRules \
--set outboundDisclaimerEnabled=true \
--set autoBanThreshold=8
# Kanonischen Server-Hostnamen abfragen oder setzen:
nextxch-cli get Server
nextxch-cli update Server --set serverHostName=mail.muster-logistik.de
curl -fsS -X GET "https://mail.firma.de/api/admin/cli/objects/Server/singleton" \
-H "Authorization: Bearer smk_..."
var status = await http.GetFromJsonAsync<JsonElement>("/api/admin/cli/objects/Server/singleton");
Console.WriteLine($"Host: {status.GetProperty("serverHostName")}, Queue: {status.GetProperty("activeQueueCount")}");