Kein Server als Anbau an deine SPA
Vite- und CRA-Builds sind statische Dateien. CORS erlaubt direkten Browserkontakt mit Mailcontact. Ohne Proxy, Serverless oder zusätzliche Bereitstellung.
Integrationen · framework
Eine React-SPA hat hinter dem Vite-Build keinen Server für Formulare. Du brauchst keinen zusätzlichen. Sende Felder direkt vom Browser an Mailcontact. Offenes CORS unterstützt jede Herkunft. Nachrichten landen im Projektpostfach mit Discord, Slack, E-Mail oder Webhook.
Das direkte API-Beispiel nutzt form, fetch und ein useState-Erfolgsflag. Ohne Express, Serverless-Funktion oder Mail-SDK. Dein Build bleibt statisch.
Prefer zero JavaScript? A plain <form action="…" method="POST"> posts to the same endpoint. See the FAQ for the trade-off.
empfohlene Einrichtung
Füge dieses HTML auf deiner Website ein oder verwende den Formulargenerator. Ersetze den Formularlink durch deinen. Das gehostete Skript fügt die verborgene Prüfung ein, übernimmt Versand und Verifizierung und bewahrt Entwürfe bei Fehlern. Du bestimmst HTML und CSS. Free-Formulare zeigen einen sichtbaren Link „Processed by mailcontact.app“, Pro und Plus nicht. Die Rückmeldung folgt der Browsersprache. Setze data-mailcontact-language="fr" am Formular, um Französisch festzulegen.
<form action="https://mailcontact.app/api/forms/your-form-id" method="POST" data-mailcontact-form lang="de" data-mailcontact-language="de">
<input type="hidden" name="_language" value="de" />
<fieldset>
<legend>Kontaktiere uns</legend>
<label>
Name (optional)
<input name="name" type="text" autocomplete="name" maxlength="200" />
</label>
<label>
E-Mail
<input name="email" type="email" autocomplete="email" maxlength="320" required />
</label>
<label>
Nachricht
<textarea name="message" rows="5" maxlength="5000" required></textarea>
</label>
<noscript>
<div aria-hidden="true" style="position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden;">
<label>Website
<input name="company_website" type="text" tabindex="-1" autocomplete="off" />
</label>
</div>
</noscript>
<button type="submit">Nachricht senden</button>
</fieldset>
<p data-contact-status role="status" aria-live="polite" aria-atomic="true"></p>
</form>
<script defer src="https://mailcontact.app/forms/v1.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script>Für Komponenten mit eigenem Submit-Handler lade dasselbe Skript und nutze MailContact.prepare(form) und MailContact.send() statt der automatischen Markierung. Siehe die Referenz für eigene Oberflächen für Laden, Rückmeldungen und Quellenhinweis bei Free.
das Snippet
Dieses Beispiel sendet direkt an die API. Behalte das erforderliche company_website Feld vorhanden und leer. Native Einsendungen öffnen bei Erfolg JSON oder bei Bedarf eine Prüfseite. Eigene Skripte ohne Verifizierung senden verdächtige Nachrichten zur Prüfung in Spam; deutlicher Spam wird ebenfalls ohne Benachrichtigung und Kontingentverbrauch zurückgehalten. Eine Erfolgsantwort bestätigt den Empfang einschließlich Prüfung oder das stille Verwerfen eines ausgefüllten Prüffelds. Siehe Spamschutz für das vollständige Verhalten.
import { useState } from "react";
export default function ContactForm() {
const [status, setStatus] = useState<"idle" | "sending" | "sent" | "error">("idle");
async function handleSubmit(event: React.FormEvent<HTMLFormElement>) {
event.preventDefault();
const data = new FormData(event.currentTarget);
setStatus("sending");
try {
const res = await fetch("https://mailcontact.app/api/forms/your-form-id", {
method: "POST",
body: data,
});
setStatus(res.ok ? "sent" : "error");
} catch {
setStatus("error");
}
}
if (status === "sent") {
return <p>Thanks! Your message is on its way.</p>;
}
return (
<form onSubmit={handleSubmit}>
<input type="text" name="name" placeholder="Your name" />
<input type="email" name="email" placeholder="[email protected]" required />
<textarea name="message" placeholder="What's on your mind?" required />
<button type="submit" disabled={status === "sending"}>
{status === "sending" ? "Sending…" : "Send"}
</button>
{status === "error" && <p>Something went wrong. Please try again.</p>}
<input name="company_website" type="text" tabIndex={-1} autoComplete="off"
style={{ position: "absolute", left: "-10000px" }} aria-hidden="true" />
</form>
);
}so funktioniert es
Ein Postfach pro Projekt. Benenne es nach deiner App und erhalte sofort Endpunkt und Projektadresse.
Füge ContactForm.tsx ein, ersetze die Formular-ID und nutze sie in Route, Footer oder Modal. Das Markup gestaltest du selbst.
Füge Discord, Slack, E-Mail oder Webhook hinzu. Zugestellte Nachrichten erreichen dich in deinen gewohnten Tools.
warum Mailcontact
Vite- und CRA-Builds sind statische Dateien. CORS erlaubt direkten Browserkontakt mit Mailcontact. Ohne Proxy, Serverless oder zusätzliche Bereitstellung.
fetch und useState halten Besucher in deiner App: Button beim Senden sperren, danach Danke anzeigen. Kein Verlassen des Clientrouters.
Eine normale Formularkomponente, kein Widget oder iframe. Nutze Tailwind, CSS Modules, styled-components oder dein übliches Styling.
FAQ
Ja. Der Endpunkt akzeptiert herkunftsübergreifende POST-Anfragen mit offenem CORS. Der Browser sendet direkt an Mailcontact. Deine React-App kann rein statisch und ganz ohne Funktionen bereitgestellt werden.
Sende wie im Beispiel mit fetch und ändere ein useState-Flag bei erfolgreicher Antwort. Native Einsendungen zeigen derzeit JSON statt Rückleitung zur Website. Eine konfigurierbare Weiterleitung fehlt derzeit; für SPAs passt fetch daher am besten.
Sende email und message als Pflichtfelder, optional name und subject sowie das erforderliche leere company_website-Prüffeld als FormData oder JSON. Es gelten 20 Anfragen pro Minute und IP bei höchstens 64 KB Inhalt, genug für Kontaktformulare.
Ja. Mailcontact sieht nur den POST. Baue mit react-hook-form, gesteuerten Feldern oder UI-Kit, solange email, message und das leere company_website-Prüffeld mitgesendet werden. name und subject sind optional. MailContact.send() übernimmt die automatische Prüfung für eigene Oberflächen.
verwandt
Formulare und echte E-Mail-Adresse vereint, mit Benachrichtigungen in deinen Tools. Starte mit einem kostenlosen Konto.
Kostenloses Formular erstellenKeine Kreditkarte nötig. Free umfasst ein Projekt und 50 Formularnachrichten pro Monat.