{"id":20836,"date":"2026-09-15T05:30:44","date_gmt":"2026-09-15T05:30:44","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/double-opt-in-mit-php-mailgun\/"},"modified":"2026-09-15T05:30:44","modified_gmt":"2026-09-15T05:30:44","slug":"double-opt-in-mit-php-mailgun","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/","title":{"rendered":"Double-Opt-in via PHP mit Mailgun"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Ein eigenes Anmeldeformular mit Mailgun zu erstellen, ist ganz einfach. Ich erhalte unz\u00e4hlige Nachrichten von Leuten, die mich bitten, ein Tutorial dar\u00fcber zu schreiben, wie man das in PHP macht. Hier ist es also. Bevor wir \u00fcber den Code sprechen, werfen wir einen kurzen Blick auf die Best Practices. Wenn Sie bereits alles \u00fcber Double-Opt-in wissen, \u00fcberspringen Sie den n\u00e4chsten Absatz. Gehen Sie \u00fcber unser Inhaltsverzeichnis unten direkt zum technischen Teil \u00fcber.<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-1817\"><p class=\"h5 m-0\" id=\"toc-title-1817\">Inhaltsverzeichnis<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#was-ist-double-opt-in-und-warum-ist-es-fuer-die-entwicklung-wichtig\">Was ist Double-Opt-in und warum ist es f\u00fcr die Entwicklung wichtig?<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#html-und-javascript-formular\">HTML- und Javascript-Formular<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#php-funktionen\">PHP-Funktionen<\/a><a class=\"scrollme link-body-color\" href=\"#php-logik\">PHP-Logik<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Was ist Double-Opt-in und warum ist es f\u00fcr die Entwicklung wichtig?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Double-Opt-in-Verfahren stellt sicher, dass eine Person, die ihre Daten in das Newsletter-Anmeldeformular auf Ihrer Website eingibt, sich auch wirklich daf\u00fcr angemeldet hat. Dazu werden Sie gebeten, zu best\u00e4tigen, dass Ihre E-Mail-Adresse zu einer bestimmten Mailingliste hinzugef\u00fcgt wurde. Wie funktioniert das? Ganz einfach: Sie erhalten eine E-Mail, in der Sie gebeten werden, zu best\u00e4tigen, dass Sie wirklich E-Mails von diesem Absender erhalten m\u00f6chten. Wenn Sie Ihr Abonnement nicht best\u00e4tigen (meist durch Klick auf einen Best\u00e4tigungslink in einer Best\u00e4tigungs-E-Mail), sollten Sie niemals eine Marketing-E-Mail (oder \u00c4hnliches) von diesem Absender erhalten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Marketingfachleute m\u00f6gen dieses Verfahren oft nicht, da es einen zus\u00e4tzlichen Schritt bedeutet, um ihre Zielgruppe zu erreichen. Es ist jedoch wichtig zu verstehen, dass ohne diesen Prozess alle Menschen Ziel von unerw\u00fcnschtem E-Mail-Spam werden k\u00f6nnten<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ohne Double-Opt-in k\u00f6nnte jede Person, die Ihre E-Mail-Adresse kennt, Sie ohne Ihre Einwilligung f\u00fcr Tausende von Newslettern und Marketinglisten in Ihrem Namen anmelden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In den meisten L\u00e4ndern ist dies\u00a0<b>gesetzlich vorgeschrieben<\/b>. So oder so bin ich der Meinung, dass es eine Best Practice ist und Ihr Unternehmen vor Problemen mit der Zustellbarkeit und Beschwerden \u00fcber E-Mail-Missbrauch sch\u00fctzt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">HTML- und Javascript-Formular<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Als Erstes erstellen Sie ein Formular, das Sie irgendwo auf Ihrer Website platzieren. In diesem Formular werden Personen nach ihren Daten gefragt, die Sie in einer Datenbank oder \u2013 falls unterst\u00fctzt \u2013 direkt in der E-Mail-Plattform speichern k\u00f6nnen. Mailgun unterst\u00fctzt Letzteres (<a href=\"http:\/\/documentation.mailgun.com\/api-mailinglists.html\" target=\"_tabs\" rel=\"noopener noreferrer\">und mit benutzerdefinierten variablen Parametern sogar noch mehr<\/a>), sodass Sie sich nicht um die Einrichtung einer Datenbank zur Speicherung dieser Daten k\u00fcmmern m\u00fcssen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Formular sendet die Daten an eine Datei namens\u00a0<code>contact.php<\/code>\u00a0und enth\u00e4lt zwei Pflichtfelder. Nat\u00fcrlich k\u00f6nnen Sie das Namensfeld optional machen oder weitere Felder hinzuf\u00fcgen. F\u00fcr diesen Artikel halten wir es jedoch einfach.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    \r\n    \r\n    \r\n    &lt;p&gt;\r\n        &lt;a href=&quot;#&quot;&gt;I&#039;ve read and agree to the Terms of Service &lt;\/a&gt;\r\n        \r\n    &lt;\/p&gt;\r\n    &lt;button type=&quot;submit&quot;&gt;Newsletter Signup&lt;\/button&gt;\r\n    &lt;p&gt;\r\n        &lt;span style=&quot;display: none&quot; id=&quot;pls&quot;&gt; Please review and tick the Terms of Service box&lt;\/span&gt;\r\n    &lt;\/p&gt;\r\n\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Der folgende Javascript-Code stellt sicher, dass das Kontrollk\u00e4stchen vor der Validierung (beim Absenden) aktiviert wurde. Andernfalls wird die E-Mail nicht weitergeleitet.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                      \r\n    var box = document.getElementById(&quot;chx&quot;);\r\n    var alrt = document.getElementById(&quot;pls&quot;);\r\n\r\nfunction check_the_box(){  \r\n    if(!box.checked) {\r\n        alrt.setAttribute(&quot;style&quot;,&quot;display: inline&quot;);\r\n            return false\r\n}\r\nelse {  \r\n    return true\r\n}\r\n}\r\n \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Sie k\u00f6nnen das Formular gerne optisch anpassen. Momentan ist es sehr einfach gehalten, aber funktional.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PHP-Funktionen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hier beginnt der interessante Teil \u2013 eine Datei, die alle f\u00fcr das Formular erforderlichen Funktionen enth\u00e4lt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier ist eine kurze Auflistung aller erstellten Funktionen und eine Erkl\u00e4rung ihrer Aufgaben:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>SanitizeInputs()<\/b>: Diese Funktion bereinigt die Eingaben von \u201esch\u00e4dlichen&#8220; Zeichen<\/li>\n\n\n\n<li><b>SanitizeEmail()<\/b>: Wie oben, f\u00fchrt aber stattdessen eine Regex-Pr\u00fcfung der E-Mail-Adresse durch. Wir m\u00f6chten ja keine E-Mails an falsch geschriebene Adressen senden, oder?<\/li>\n\n\n\n<li><b>SendConfirmationEmail()<\/b>: Sendet eine E-Mail an eine angegebene E-Mail-Adresse. In unserem Fall ist dies die vom Nutzer angegebene Adresse<\/li>\n\n\n\n<li><b>MakeConfirmationHash()<\/b>: Erstellt einen eindeutigen Hash basierend auf der Verkettung der E-Mail-Adresse des Nutzers und einer geheimen Zeichenfolge. Diese Zeichenfolge wird als Teil der URL gesendet, die der Nutzer anklicken muss, um zu best\u00e4tigen, dass er E-Mails von unserer Website erhalten m\u00f6chte. Sicheres und herausragendes Double-Opt-in.<\/li>\n\n\n\n<li><b>CheckConfirmationHash()<\/b>: Eine Funktion, die \u00fcberpr\u00fcft, ob der in der URL enthaltene Hash g\u00fcltig ist, wenn der Nutzer auf den Best\u00e4tigungslink klickt. Dies ist f\u00fcr das Double-Opt-in-Verfahren sehr wichtig, da sonst alle Personen die E-Mail-Adressen der anderen verifizieren k\u00f6nnten.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c4ndern Sie den Text der E-Mail nach Belieben. Denken Sie daran, dass Sie den geheimen Hash, die E-Mail-Adresse und den Namen des Nutzers als GET-Parameter an das Skript zur\u00fcckgeben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Abh\u00e4ngigkeitswarnung: Ich habe die offizielle Mailgun-PHP-Bibliothek verwendet, die auf GitHub verf\u00fcgbar ist<\/b><\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    sendMessage($domain, array(\r\n  &#039;from&#039;    =&gt; &#039;confirmation@&#039;.$domain,\r\n  &#039;to&#039;      =&gt; $recipientAddress,\r\n  &#039;subject&#039; =&gt; $subjectText,\r\n  &#039;html&#039;    =&gt; &#039;&lt;p&gt;Hello, please confirm you want to receive marketing emails from &#039;.$domain.&#039; by clicking on the below link &lt;p&gt;&lt;a href=&quot;$siteURL\/contact.php?c=&amp;apos;.$hashedUnique.&amp;apos;&amp;e=&amp;apos;.$recipientAddress.&amp;apos;&amp;n=&amp;apos;.$recipientName.&amp;apos;&quot;&gt;CONFIRMATION&lt;\/a&gt;&lt;\/p&gt;&lt;\/p&gt;&lt;p&gt; This email was sent to&#039;.$recipientName.&#039;, at the speed of a bullet, by Mailgun!&lt;\/a&gt;&#039;\r\n  ));\r\n}\r\n\r\n function MakeConfirmationHash($confEmail, $confCode) {\r\n    return md5($confEmail.$confCode);\r\n }\r\n\r\n function CheckConfirmationHash($confEmail, $confCode) {\r\n    global $uniqueKey;\r\n    if (md5($confEmail.$uniqueKey) === $confCode) { return TRUE; }\r\n        else { return FALSE; }\r\n }\r\n\r\nfunction AddMemberToList($recipientAddress,$recipientName) {\r\n    global $mailingList,$mgClient;\r\n    $result = $mgClient-&gt;post(&quot;lists\/$mailingList\/members&quot;, array(\r\n    &#039;address&#039;     =&gt; $recipientAddress,\r\n    &#039;name&#039;        =&gt; $recipientName,\r\n    &#039;description&#039; =&gt; &#039;Form Opt In&#039;,\r\n    &#039;subscribed&#039;  =&gt; true    \r\n));\r\n}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h3 class=\"wp-block-heading\">PHP-Logik<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr den Logikteil erkl\u00e4re ich die \u00dcberlegungen hinter dem Code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn der Nutzer seine E-Mail-Adresse und seinen Namen in das Feld eingibt und das Formular absendet, passiert Folgendes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Das Skript generiert einen eindeutigen Code und sendet ihn per E-Mail an den Nutzer<\/li>\n\n\n\n<li>Der Nutzer erh\u00e4lt eine E-Mail mit einem Best\u00e4tigungslink, der Informationen \u00fcber ihn und den eindeutigen Code enth\u00e4lt: Das Klicken auf die E-Mail best\u00e4tigt das Einverst\u00e4ndnis, dass die Adresse in unsere Mailingliste aufgenommen wird.<\/li>\n\n\n\n<li>Durch Klicken auf die URL werden die Daten des Nutzers zur\u00fcckgesendet. Diese werden mit dem eindeutigen Code abgeglichen und l\u00f6sen die Aufnahme in die Mailingliste bei Mailgun aus.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Und das war&#8217;s auch schon. Das Double-Opt-in wurde eingehalten und die Aufgabe erfolgreich erledigt.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Lassen Sie mich wissen, ob Ihnen dieser Artikel gefallen hat, indem Sie Ihre Gedanken im Kommentarfeld unten oder auf Twitter teilen. Wenn Sie dieses Tutorial in einer anderen Programmiersprache sehen m\u00f6chten, sagen Sie mir ebenfalls gern Bescheid.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viel Spa\u00df beim Versenden.<\/p>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_dfc21e40f7568dc3263b9f4b64e12a0c\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Registrieren            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_dfc21e40f7568dc3263b9f4b64e12a0c\">\r\n                Loslegen ist ganz einfach. Und es ist kostenlos.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Erfahren Sie, was Sie mit der weltbesten Plattform f\u00fcr E-Mail-Zustellung alles erreichen k\u00f6nnen.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Ein eigenes Anmeldeformular mit Mailgun zu erstellen, ist ganz einfach. Ich erhalte unz\u00e4hlige Nachrichten von Leuten, die mich bitten, ein Tutorial dar\u00fcber zu schreiben, wie man das in PHP macht. Hier ist es also.<\/p>\n","protected":false},"author":34,"featured_media":4074,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[20],"class_list":["post-20836","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-email"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mailgun f\u00fcr Double-Opt-in via PHP nutzen - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Das Erstellen von E-Mail-Anmeldungen mag einfach erscheinen, bis Sie sich mit der DSGVO und den Best Practices f\u00fcr die Reputation befassen m\u00fcssen. Erfahren Sie, wie Sie Mailgun und PHP nutzen k\u00f6nnen, um den Prozess zu vereinfachen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mailgun f\u00fcr Double-Opt-in via PHP nutzen - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Das Erstellen von E-Mail-Anmeldungen mag einfach erscheinen, bis Sie sich mit der DSGVO und den Best Practices f\u00fcr die Reputation befassen m\u00fcssen. Erfahren Sie, wie Sie Mailgun und PHP nutzen k\u00f6nnen, um den Prozess zu vereinfachen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/double-opt-in-mit-php-mailgun\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/double-opt-in-mit-php-mailgun\\\/\",\"name\":\"Mailgun f\u00fcr Double-Opt-in via PHP nutzen - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/double-opt-in-mit-php-mailgun\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/double-opt-in-mit-php-mailgun\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"datePublished\":\"2026-09-15T05:30:44+00:00\",\"description\":\"Das Erstellen von E-Mail-Anmeldungen mag einfach erscheinen, bis Sie sich mit der DSGVO und den Best Practices f\u00fcr die Reputation befassen m\u00fcssen. Erfahren Sie, wie Sie Mailgun und PHP nutzen k\u00f6nnen, um den Prozess zu vereinfachen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/double-opt-in-mit-php-mailgun\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/double-opt-in-mit-php-mailgun\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/double-opt-in-mit-php-mailgun\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Email.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/email\\\/double-opt-in-mit-php-mailgun\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Double-Opt-in via PHP mit Mailgun\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Leistungsstarke Transaktions-E-Mail-APIs, mit denen Sie E-Mails senden, empfangen und nachverfolgen k\u00f6nnen, speziell f\u00fcr Entwickler konzipiert. Erfahren Sie noch heute mehr!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mailgun f\u00fcr Double-Opt-in via PHP nutzen - Transactional Email API Service For Developers | Mailgun","description":"Das Erstellen von E-Mail-Anmeldungen mag einfach erscheinen, bis Sie sich mit der DSGVO und den Best Practices f\u00fcr die Reputation befassen m\u00fcssen. Erfahren Sie, wie Sie Mailgun und PHP nutzen k\u00f6nnen, um den Prozess zu vereinfachen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/","og_locale":"de_DE","og_type":"article","og_title":"Mailgun f\u00fcr Double-Opt-in via PHP nutzen - Transactional Email API Service For Developers | Mailgun","og_description":"Das Erstellen von E-Mail-Anmeldungen mag einfach erscheinen, bis Sie sich mit der DSGVO und den Best Practices f\u00fcr die Reputation befassen m\u00fcssen. Erfahren Sie, wie Sie Mailgun und PHP nutzen k\u00f6nnen, um den Prozess zu vereinfachen.","og_url":"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/","url":"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/","name":"Mailgun f\u00fcr Double-Opt-in via PHP nutzen - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","datePublished":"2026-09-15T05:30:44+00:00","description":"Das Erstellen von E-Mail-Anmeldungen mag einfach erscheinen, bis Sie sich mit der DSGVO und den Best Practices f\u00fcr die Reputation befassen m\u00fcssen. Erfahren Sie, wie Sie Mailgun und PHP nutzen k\u00f6nnen, um den Prozess zu vereinfachen.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Email.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/de\/blog\/email\/double-opt-in-mit-php-mailgun\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/de\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/de\/blog\/"},{"@type":"ListItem","position":3,"name":"Double-Opt-in via PHP mit Mailgun"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/de\/#website","url":"https:\/\/www.mailgun.com\/de\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Leistungsstarke Transaktions-E-Mail-APIs, mit denen Sie E-Mails senden, empfangen und nachverfolgen k\u00f6nnen, speziell f\u00fcr Entwickler konzipiert. Erfahren Sie noch heute mehr!","publisher":{"@id":"https:\/\/www.mailgun.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/de\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/20836","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/users\/34"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/20836\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media\/4074"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media?parent=20836"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog_category?post=20836"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}