← Tilbage til login

Junkerne Mailer API Dokumentation

Guide til integration på hjemmesider og systemer. Nu med HTML-emails og templates!

Version v1.2.0 – HTML Templates

1. Base URL

https://mailer.junkerne.dk

Endpoint til mailafsendelse: POST /api/send

2. Autentificering

Alle kald til /api/send skal have en API nøgle i header:

X-API-Key: mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

API nøglen oprettes i adminpanel eller brugerpanel.

3. Request format

POST /api/send
Content-Type: application/json
X-API-Key: mk_...

{
  "to": "kunde@eksempel.dk",
  "subject": "Emne",
  "body": "Beskedtekst"
}

Felter

to (påkrævet): modtager email

subject (valgfri): emne, default bruges hvis tom

body (valgfri): beskedtekst

is_html (valgfri): sæt til true hvis body er HTML-formateret

template (valgfri): navn på template (transactional, newsletter, alert, custom)

templateOptions (valgfri): objekt med template-konfiguration

Afsendernavn styres centralt og sættes altid til Fra hjemmesiden.

from_name, from_email, sender_name og from fra request ignoreres.

Afsender-email styres centralt via serverens DEFAULT_FROM_EMAIL / UPSTREAM_FROM_EMAIL.

4. Responses

200 OK
{"ok":true,"message":"Mail sendt"}
401 Unauthorized
{"ok":false,"error":"Unauthorized"}
400 Bad Request
{"ok":false,"error":"Missing field: to"}
429 Too Many Requests
    {"ok":false,"error":"Rate limit exceeded"}

5. cURL eksempel

curl -X POST "https://mailer.junkerne.dk/api/send" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: mk_INDSAET_DIN_NOEGLE" \
  -d '{"to":"mail@domæne.dk","subject":"Test","body":"Hej fra API"}'

6. Plain text email (JavaScript/Node)

const res = await fetch("https://mailer.junkerne.dk/api/send", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": process.env.MAILER_API_KEY
  },
  body: JSON.stringify({
    to: "mail@domæne.dk",
    subject: "Velkommen",
    body: "Tak for din tilmelding"
  })
});

const data = await res.json();
console.log(data);

Vigtigt: Kør dette på server/backend, ikke direkte i browser med synlig API nøgle.

7. HTML-emails med farver og styling

Aktivér HTML-emails ved at sætte is_html: true eller brug indbyggede templates.

Simpel HTML email:

curl -X POST "https://mailer.junkerne.dk/api/send" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: mk_INDSAET_DIN_NOEGLE" \
  -d '{
    "to": "mail@domæne.dk",
    "subject": "Pæn besked",
    "is_html": true,
    "body": "<h1>Hej!</h1><p>Dette er en <strong>pæn</strong> HTML-email</p>"
  }'

8. HTML Email Templates (let formatering)

Brug indbyggede templates for pænt formaterede emails med farver, rammer og styling:

Transaktionel email (ordrebekræftelse, bekræftelse osv):

POST /api/send
Content-Type: application/json
X-API-Key: mk_...

{
  "to": "kunde@eksempel.dk",
  "subject": "Ordrebekræftelse",
  "template": "transactional",
  "templateOptions": {
    "title": "Ordrebekræftelse #12345",
    "heading": "Tak for din ordre!",
    "message": "Din ordre er modtaget og behandles snart.",
    "actionUrl": "https://eksempel.dk/orders/12345",
    "actionText": "Se din ordre",
    "details": {
      "Ordrenummer": "12345",
      "Total": "599 kr.",
      "Leveringstid": "2-3 arbejdsdage"
    }
  }
}

Newsletter/nyhedsbrev:

{
  "to": "subscriber@eksempel.dk",
  "subject": "Junkernes Nyhedsbrev - Maj 2026",
  "template": "newsletter",
  "templateOptions": {
    "heading": "Hvad er der nyt?",
    "items": [
      {
        "title": "Ny feature: API rate limiting",
        "content": "Vi har tilføjet intelligente rate limits for at beskytte systemet.",
        "link": "https://junkerne.dk/news/1",
        "linkText": "Læs mere"
      },
      {
        "title": "Sikkerhedsopdatering",
        "content": "Vigtig patch udgivet. Alle brugere opdateres automatisk.",
        "link": "https://junkerne.dk/news/2",
        "linkText": "Se detaljer"
      }
    ]
  }
}

Advarsel/alert-email:

{
  "to": "admin@junkerne.dk",
  "subject": "Alert: Usædvanlig aktivitet opdaget",
  "template": "alert",
  "templateOptions": {
    "level": "warning",
    "title": "Sikkerhedsadvarsel",
    "heading": "Usædvanlig aktivitet påvist",
    "message": "Der blev registreret 150 login-forsøg fra én IP-adresse i løbet af 1 minut.",
    "details": {
      "ip": "192.168.1.1",
      "attempts": 150,
      "time_window": "1 min",
      "action": "Account temporary locked"
    }
  }
}

9. Tilgængelige templates

Template Use case Key options
transactional Ordrer, bekræftelser, receipts title, heading, message, actionUrl, details
newsletter Nyhedsbreve, annoncementer heading, items (title, content, link)
alert Advarsler, fejl, notifikationer level (info/warning/error/success), title, heading, details
custom Tilpassede emails med HTML headerColor, headerText, content, footerText

10. JavaScript eksempel med template

const res = await fetch("https://mailer.junkerne.dk/api/send", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": process.env.MAILER_API_KEY
  },
  body: JSON.stringify({
    to: "kunde@eksempel.dk",
    subject: "Din ordre er bekræftet",
    template: "transactional",
    templateOptions: {
      title: "Ordrebekræftelse",
      heading: "Tak for din ordre!",
      message: "Din bestilling behandles nu. Du modtager tracking når den afsendes.",
      actionUrl: "https://eksempel.dk/track/order123",
      actionText: "Sporet ordre",
      details: {
        "Ordrenummer": "ORD-2026-12345",
        "Samlet pris": "1.299 kr.",
        "Skipped dato": "4. maj 2026"
      }
    }
  })
});

const data = await res.json();
console.log(data);

11. PHP eksempel med template

<?php
$payload = json_encode([
  'to' => 'kunde@eksempel.dk',
  'subject' => 'Velkommen!',
  'template' => 'transactional',
  'templateOptions' => [
    'title' => 'Velkommen til Junkerne',
    'heading' => 'Din konto er oprettet',
    'message' => 'Velkommen til vores platform. Start ved at oprette din første API-nøgle.',
    'actionUrl' => 'https://junkerne.dk/dashboard',
    'actionText' => 'Gå til dashboard',
    'details' => [
      'Email' => 'kunde@eksempel.dk',
      'Oprettet' => date('d. M Y'),
      'Status' => 'Aktiv'
    ]
  ]
]);

$ch = curl_init('https://mailer.junkerne.dk/api/send');
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    'Content-Type: application/json',
    'X-API-Key: ' . getenv('MAILER_API_KEY')
  ],
  CURLOPT_POSTFIELDS => $payload,
]);

$response = curl_exec($ch);
curl_close($ch);

echo $response;

12. PHP eksempel med custom HTML

<?php
$customHtml = '
  <h2>Kampagne resultat</h2>
  <p>Din kampagne blev afsendt til <strong>1.250 personer</strong></p>
  <div style="background: #e8f8ee; padding: 15px; border-radius: 5px; margin: 15px 0;">
    <strong style="color: #0f7a37;">✓ 94% open rate</strong><br/>
    <strong style="color: #0f7a37;">✓ 12% click rate</strong><br/>
    <strong style="color: #0f7a37;">✓ 2 konverteringer</strong>
  </div>
';

$payload = json_encode([
  'to' => 'marketer@eksempel.dk',
  'subject' => 'Kampagne rapport',
  'is_html' => true,
  'body' => $customHtml
]);

// ... rest af curl setup

13. Sikkerhedsanbefalinger for HTML-emails

1. Sanitering: Templates saniterer automatisk al brugerinput (XSS-beskyttelse).

2. Del aldrig API nøgler i frontend. Templates skal genereres på backend/server.

3. Valider alle detaljer. Brug templateOptions til struktureret data.

4. Tester emails. Brug mail preview før udsendelse til mange.

5. Overvåg bounce rates. Se mail-logs i adminpanel.

14. Support / Fejlsøgning

Hvis du får 400: Template error, tjek templateOptions syntax.

Hvis du får 400: Missing field: to, husk at `to` er altid påkrævet.

Hvis HTML ikke vises i email-klient, kontakt support - det kan være clientens HTML-support.

Se mail-logs i adminpanel under "Mailhistorik" for fejldetaljekontakt og forbedring.