HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //tmp/ezdns_live__dkim-checker.html
<!doctype html>
<html lang="de">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>DKIM Checker: Selector, DNS-Record und Mail-Signatur prüfen | ezdns.support</title>
    <meta name="description" content="Kostenloser DKIM Checker für Domains: fehlende DKIM-Selector, Microsoft 365 oder Google Workspace DKIM prüfen und direkt fixen." />
    <link rel="canonical" href="https://ezdns.support/dkim-checker" />
    <meta name="robots" content="index, follow" />
    <meta name="theme-color" content="#020617" />
    <meta property="og:type" content="website" />
    <meta property="og:site_name" content="ezdns.support" />
    <meta property="og:title" content="DKIM Checker: Selector, DNS-Record und Mail-Signatur prüfen | ezdns.support" />
    <meta property="og:description" content="Kostenloser DKIM Checker für Domains: fehlende DKIM-Selector, Microsoft 365 oder Google Workspace DKIM prüfen und direkt fixen." />
    <meta property="og:url" content="https://ezdns.support/dkim-checker" />
    <link rel="icon" href="/app/logo.svg" type="image/svg+xml" />
    <link rel="preconnect" href="https://rsms.me/" />
    <link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
    <style>
      :root{font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#e2e8f0;background:#020617}
      *{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 80% 0%,rgba(14,165,233,.18),transparent 34%),radial-gradient(circle at 16% 18%,rgba(16,185,129,.12),transparent 30%),#020617;color:#e2e8f0}a{color:inherit}.wrap{max-width:1140px;margin:0 auto;padding:24px}.top{display:flex;justify-content:space-between;gap:18px;align-items:center}.brand{display:flex;align-items:center;gap:10px;text-decoration:none;font-weight:850}.brand img{width:34px;height:34px}.nav{display:flex;gap:10px;flex-wrap:wrap}.nav a{font-size:14px;color:#bfdbfe;text-decoration:none;border:1px solid rgba(148,163,184,.22);border-radius:10px;padding:9px 12px;background:rgba(15,23,42,.58)}
      .hero{margin-top:26px;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(320px,.95fr);gap:20px}.panel{border:1px solid rgba(56,189,248,.22);border-radius:18px;background:linear-gradient(135deg,rgba(15,23,42,.96),rgba(2,6,23,.92));box-shadow:0 28px 80px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.05)}.copy{padding:28px}.kicker{color:#67e8f9;font-size:13px;font-weight:850;text-transform:uppercase;letter-spacing:.08em}.copy h1{margin:10px 0 0;font-size:clamp(2.25rem,5.7vw,4.75rem);line-height:1.04;letter-spacing:0;color:#fff;max-width:13ch}.copy p{color:#cbd5e1;line-height:1.7;font-size:1.04rem;max-width:58rem}.proof{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:18px}.proof div{border:1px solid rgba(148,163,184,.2);border-radius:12px;background:rgba(2,6,23,.56);padding:12px}.proof strong{display:block;color:#fff}.proof span{display:block;margin-top:4px;color:#94a3b8;font-size:13px}
      .scanBox{padding:22px;display:grid;gap:14px}.scanBox h2{margin:0;color:#fff}.scanForm{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px}.scanForm input{width:100%;border:1px solid rgba(191,219,254,.8);border-radius:11px;background:#fff;color:#0f172a;padding:13px 14px;font-size:16px}.btn,.scanForm button,.quoteForm button{display:inline-flex;justify-content:center;align-items:center;min-height:44px;padding:12px 16px;border-radius:11px;text-decoration:none;font-weight:850;border:1px solid rgba(148,163,184,.24);cursor:pointer}.scanForm button,.btn.primary,.quoteForm button{background:#16a34a;color:#fff;border-color:#16a34a}.btn.blue{background:#2563eb;color:#fff;border-color:#2563eb}.btn.dark{background:rgba(15,23,42,.78);color:#dbeafe}.btn:disabled,.scanForm button:disabled{opacity:.62;cursor:wait}.result{border:1px solid rgba(148,163,184,.2);border-radius:14px;background:rgba(2,6,23,.58);padding:14px;min-height:150px}.result h3{margin:0;color:#fff}.status{color:#93c5fd}.findings{display:grid;gap:8px;margin-top:12px}.finding{border:1px solid rgba(148,163,184,.18);border-radius:11px;padding:10px;background:#020617}.finding strong{display:block;color:#fff}.finding span{display:block;color:#94a3b8;font-size:13px;margin-top:3px}.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
      .grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:20px}.card{padding:20px;border:1px solid rgba(148,163,184,.24);border-radius:16px;background:rgba(15,23,42,.84)}.card h2{margin:0;color:#fff}.card p{color:#cbd5e1;line-height:1.62}.list{display:grid;gap:9px;margin:14px 0 0;padding:0;list-style:none}.list li{display:flex;gap:9px;color:#dbeafe}.list li:before{content:"";width:8px;height:8px;margin-top:8px;border-radius:999px;background:#34d399;box-shadow:0 0 0 4px rgba(52,211,153,.12);flex:0 0 auto}
      .quote{margin-top:20px;padding:22px;display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:16px}.quote h2{margin:0;color:#fff;font-size:30px}.quote p{color:#cbd5e1;line-height:1.65}.quoteForm{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.quoteForm label{display:grid;gap:6px;color:#cbd5e1;font-weight:760;font-size:14px}.quoteForm input,.quoteForm textarea,.quoteForm select{width:100%;border:1px solid rgba(148,163,184,.3);border-radius:11px;background:rgba(2,6,23,.78);color:#f8fafc;padding:12px;line-height:1.35}.wide{grid-column:1/-1}.quoteStatus{grid-column:1/-1;color:#93c5fd;min-height:22px;margin:0}.footer{margin:38px 0 10px;text-align:center;color:#94a3b8;font-size:14px}.footer a{color:#60a5fa;text-decoration:none;margin:0 8px}
      @media(max-width:900px){.hero,.grid,.quote{grid-template-columns:1fr}.proof{grid-template-columns:1fr}.wrap{padding:16px}}@media(max-width:560px){.top{align-items:flex-start;flex-direction:column}.nav{width:100%}.nav a{flex:1;text-align:center}.copy,.scanBox,.card,.quote{padding:16px}.copy h1{font-size:2.35rem}.scanForm{grid-template-columns:1fr}.actions .btn{width:100%}.quoteForm{grid-template-columns:1fr}}
</style>
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Kostenloser DKIM Checker",
        "url": "https://ezdns.support/dkim-checker",
        "applicationCategory": "SecurityApplication",
        "operatingSystem": "Web",
        "offers": {"@type": "Offer", "price": "0", "priceCurrency": "EUR"},
        "provider": {"@type": "Organization", "name": "Panomity GmbH", "url": "https://panomity.de/"}
      }
    </script>
  </head>
  <body>
    <main class="wrap">
      <header class="top">
        <a class="brand" href="/"><img src="/app/logo.svg" alt="" /><span>ezdns.support</span></a>
        <nav class="nav" aria-label="Hauptnavigation">
          <a href="/">Scan</a>
          <a href="/pricing">Preise</a>
          <a href="/dkim-checker">Tool</a>
          <a href="/app/imprint.html">Impressum</a>
        </nav>
      </header>

      <section class="hero">
        <div class="panel copy">
          <div class="kicker">Kostenloser DKIM Checker</div>
          <h1>DKIM Selector prüfen und Mail-Signaturen reparieren.</h1>
          <p>Finde fehlende oder falsch veröffentlichte DKIM-Selector und führe Microsoft 365 oder Google Workspace DKIM direkt in einen messbaren Fix-Pfad.</p>
          <div class="proof">
            <div><strong>Kostenloser Scan</strong><span>Direkt im Browser starten.</span></div>
            <div><strong>Konkrete Findings</strong><span>Priorisiert nach Risiko.</span></div>
            <div><strong>Audit ab 49 Euro</strong><span>Niedriger bezahlter Einstieg.</span></div>
          </div>
        </div>
        <aside class="panel scanBox">
          <h2>DKIM Selector testen</h2>
          <form id="toolScanForm" class="scanForm">
            <input id="domain" name="domain" placeholder="example.com" autocomplete="url" />
            <button type="submit">Jetzt prüfen</button>
          </form>
          <div id="result" class="result">
            <h3>Bereit für den Scan</h3>
            <p class="status">Gib eine Domain ein. Kritische Findings führen direkt zu Audit, Quick Fix oder Cleanup.</p>
          </div>
        </aside>
      </section>

      <section class="grid">
        <article class="card">
          <h2>Was der Check sucht</h2>
          <ul class="list"><li>Selector fehlt im DNS</li>
<li>Provider signiert nicht</li>
<li>DMARC Alignment offen</li></ul>
        </article>
        <article class="card">
          <h2>Direkt fixen lassen</h2>
          <p>Wenn der Check ein klares Risiko zeigt, ist der nächste Schritt ein Priority Audit, ein abgegrenzter Fix oder ein vollständiger Cleanup.</p>
          <div class="actions">
            <a class="btn primary" data-service-lead="priority_audit" href="https://support.panomity.com/cart/priority-support/DNS-Priority-Audit/&step=0">Priority Audit buchen</a>
            <a class="btn blue" data-service-lead="quick_fix" href="https://support.panomity.com/cart/priority-support/DNS-Quick-Fix/&step=0">DKIM Quick Fix buchen</a>
            <a class="btn dark" data-service-lead="cleanup" href="https://support.panomity.com/cart/priority-support/DNS-Mail-Security-Cleanup/&step=0">Mail Cleanup buchen</a>
          </div>
        </article>
        <article class="card">
          <h2>Passende Detailseiten</h2>
          <p>Für kaufnahe Problemfälle gibt es vertiefte Landingpages mit direktem Checkout.</p>
          <div class="actions"><a class="btn dark" href="/dkim-selector-fehlt">dkim-selector-fehlt</a>
<a class="btn dark" href="/google-workspace-dkim-einrichten">google-workspace-dkim-einrichten</a>
<a class="btn dark" href="/microsoft-365-dkim-dmarc">microsoft-365-dkim-dmarc</a></div>
        </article>
      </section>

      <section class="panel quote" id="tool-request">
        <div>
          <h2>Fix erst einordnen?</h2>
          <p>Schick Domain, Kontakt und Problem. Die Anfrage wird als qualifizierter Lead gespeichert und kann direkt in Priority Audit, Quick Fix, Cleanup oder Monitoring überführt werden.</p>
        </div>
        <form class="quoteForm" data-qualified-form>
          <label><span>Domain</span><input name="domain" placeholder="example.com" autocomplete="url" /></label>
          <label><span>E-Mail</span><input name="email" type="email" placeholder="admin@example.com" autocomplete="email" required /></label>
          <label class="wide"><span>Problem</span><textarea name="message" rows="4" placeholder="DKIM Selector fehlt oder Signatur passt nicht" required></textarea></label>
          <label><span>Paket</span><select name="plan"><option value="priority_audit">DNS Priority Audit 49 Euro</option><option value="cleanup">DNS/Mail Cleanup 499 Euro</option><option value="quick_fix">Quick Fix 149 Euro</option><option value="managed_monitoring">Managed Monitoring 199 Euro/Monat</option></select></label>
          <button type="submit">Anfrage speichern</button>
          <p class="quoteStatus" aria-live="polite"></p>
        </form>
      </section>

      <footer class="footer">
        <a href="/">Scan</a>
        <a href="/pricing">Preise</a>
        <a href="/app/privacy.html">Privacy</a>
        <a href="/app/imprint.html">Imprint</a>
        <span>© 2026 Panomity GmbH</span>
      </footer>
    </main>
    <script>
      const ORDER_POSTS = {
        priority_audit: { action: 'https://support.panomity.com/cart/priority-support/DNS-Priority-Audit/&step=0', id: '879', cycle: 'Once' },
        quick_fix: { action: 'https://support.panomity.com/cart/priority-support/DNS-Quick-Fix/&step=0', id: '867', cycle: 'Once' },
        cleanup: { action: 'https://support.panomity.com/cart/priority-support/DNS-Mail-Security-Cleanup/&step=0', id: '868', cycle: 'Once' }
      };
      const API_KEY = 'dev-key';
      const scanForm = document.getElementById('toolScanForm');
      const domainInput = document.getElementById('domain');
      const resultBox = document.getElementById('result');
      let lastDomain = '';
      function escapeHTML(value) {
        return String(value ?? '').replace(/[&<>"']/g, (ch) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[ch]));
      }
      async function fetchJSON(url, opts) {
        opts = opts || {};
        opts.headers = Object.assign({ 'x-api-key': API_KEY }, opts.headers || {});
        const res = await fetch(url, opts);
        if (!res.ok) throw new Error(`HTTP ${res.status}`);
        return res.json();
      }
      function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
      async function pollScan(id) {
        const start = Date.now();
        while (Date.now() - start < 120000) {
          await sleep(1800);
          const scan = await fetchJSON(`/v1/scan/${encodeURIComponent(id)}`);
          if (scan.status === 'done') return scan;
        }
        throw new Error('timeout');
      }
      async function recordToolLead(plan, extra = {}) {
        try {
          await fetch('/v1/leads', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(Object.assign({ source: 'tool_page', intent: 'tool_interaction', plan, domain: lastDomain, page: window.location.pathname }, extra || {}))
          });
        } catch (e) {}
      }
      function submitHostBillOrder(plan) {
        const cfg = ORDER_POSTS[plan];
        if (!cfg) return false;
        const form = document.createElement('form');
        form.method = 'post';
        form.action = cfg.action;
        for (const [name, value] of Object.entries({ action: 'add', id: cfg.id, cycle: cfg.cycle })) {
          const input = document.createElement('input');
          input.type = 'hidden';
          input.name = name;
          input.value = value;
          form.appendChild(input);
        }
        document.body.appendChild(form);
        form.submit();
        return true;
      }
      function renderScan(scan) {
        const findings = (scan.result && Array.isArray(scan.result.findings)) ? scan.result.findings : [];
        const critical = findings.filter(f => f.severity === 'error').length;
        const warnings = findings.filter(f => f.severity === 'warning').length;
        const recommended = critical || findings.length > 1 ? 'cleanup' : 'quick_fix';
        const top = findings.slice(0, 5);
        const rows = top.length ? top.map((f) => `<div class="finding"><strong>${escapeHTML(f.category || 'DNS Finding')} · ${escapeHTML(f.severity || 'info')}</strong><span>${escapeHTML(f.message || 'Empfohlene Prüfung')}</span></div>`).join('') : '<div class="finding"><strong>Keine kritischen Findings sichtbar</strong><span>Für produktive Domains bleibt Monitoring sinnvoll, damit spätere DNS- und Mail-Änderungen auffallen.</span></div>';
        resultBox.innerHTML = `
          <h3>${escapeHTML(lastDomain || 'Domain')} geprüft</h3>
          <p class="status">${critical} kritisch · ${warnings} Warnungen · ${findings.length} Findings</p>
          <div class="findings">${rows}</div>
          <div class="actions">
            <a class="btn dark" href="/app/detail.html?id=${encodeURIComponent(scan.id)}">Report öffnen</a>
            <a class="btn primary" data-service-lead="priority_audit" href="https://support.panomity.com/cart/priority-support/DNS-Priority-Audit/&step=0">Audit für 49 Euro buchen</a>
            <a class="btn ${recommended === 'cleanup' ? 'primary' : 'blue'}" data-service-lead="${recommended}" href="${recommended === 'cleanup' ? 'https://support.panomity.com/cart/priority-support/DNS-Mail-Security-Cleanup/&step=0' : 'https://support.panomity.com/cart/priority-support/DNS-Quick-Fix/&step=0'}">${recommended === 'cleanup' ? 'Cleanup für 499 Euro buchen' : 'Quick Fix für 149 Euro buchen'}</a>
          </div>
        `;
      }
      if (scanForm) {
        scanForm.addEventListener('submit', async (event) => {
          event.preventDefault();
          const domain = domainInput.value.trim().toLowerCase();
          if (!domain) return;
          lastDomain = domain;
          const button = scanForm.querySelector('button');
          button.disabled = true;
          button.textContent = 'Scan läuft...';
          resultBox.innerHTML = '<h3>Scan läuft</h3><p class="status">DNS-, Mail- und Sicherheitschecks werden ausgeführt.</p>';
          await recordToolLead('free_scan', { intent: 'tool_scan_start', domain });
          try {
            const created = await fetchJSON('/v1/scan', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ domain, listed: true }) });
            const scan = await pollScan(created.id);
            renderScan(scan);
            await recordToolLead('free_scan', { intent: 'tool_scan_done', domain });
          } catch (e) {
            resultBox.innerHTML = '<h3>Scan konnte nicht abgeschlossen werden</h3><p class="status">Bitte später erneut versuchen oder direkt eine Fix-Anfrage senden.</p>';
          } finally {
            button.disabled = false;
            button.textContent = 'Jetzt prüfen';
          }
        });
      }
      document.querySelectorAll('[data-qualified-form]').forEach((form) => {
        form.addEventListener('submit', async (event) => {
          event.preventDefault();
          const data = new FormData(form);
          const plan = String(data.get('plan') || 'cleanup');
          const status = form.querySelector('.quoteStatus');
          if (status) status.textContent = 'Anfrage wird gespeichert...';
          await recordToolLead(plan, {
            intent: 'qualified_fix_request',
            domain: String(data.get('domain') || lastDomain || '').trim().toLowerCase(),
            contact_email: String(data.get('email') || '').trim(),
            message: String(data.get('message') || '').trim(),
            page: window.location.pathname + '#tool-request'
          });
          if (status) status.textContent = 'Gespeichert. Die Anfrage erscheint im Revenue-Report.';
        });
      });
      document.addEventListener('click', async (event) => {
        const cta = event.target.closest('[data-service-lead]');
        if (!cta) return;
        const plan = cta.dataset.serviceLead;
        const fallbackUrl = cta.href;
        event.preventDefault();
        await recordToolLead(plan, { intent: 'tool_checkout' });
        if (submitHostBillOrder(plan)) return;
        window.location.href = fallbackUrl;
      });
</script>
  </body>
</html>