<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $from)) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Ich habe versucht, ein einfaches E-Mail-Formular zu erstellen. Das Formular selbst befindet sich auf meiner index.html
Seite, wird jedoch auf einer separaten Seite "Vielen Dank für Ihre Übermittlung" thankyou.php
übermittelt, auf der der obige PHP-Code eingebettet ist. Der Code wird perfekt übermittelt, sendet jedoch niemals eine E-Mail. Wie kann ich das beheben?
$from
Antworten:
Obwohl es Teile dieser Antwort gibt, die nur für die Verwendung der
mail()
Funktion selbst gelten, können viele dieser Schritte zur Fehlerbehebung auf jedes PHP-Mailing-System angewendet werden.Es gibt verschiedene Gründe, warum Ihr Skript anscheinend keine E-Mails sendet. Es ist schwierig, diese Dinge zu diagnostizieren, es sei denn, es liegt ein offensichtlicher Syntaxfehler vor. Ohne eine müssen Sie die unten stehende Checkliste durchgehen, um mögliche Fallstricke zu finden, auf die Sie möglicherweise stoßen.
Stellen Sie sicher, dass die Fehlerberichterstattung aktiviert ist und alle Fehler gemeldet werden
Die Fehlerberichterstattung ist wichtig, um Fehler in Ihrem Code und allgemeine Fehler, auf die PHP stößt, auszurotten. Die Fehlerberichterstattung muss aktiviert sein, um diese Fehler zu erhalten. Wenn Sie den folgenden Code oben in Ihre PHP-Dateien (oder in eine Master-Konfigurationsdatei) einfügen, wird die Fehlerberichterstattung aktiviert.
Siehe Wie kann ich nützliche Fehlermeldungen in PHP erhalten? - diese Antwort für weitere Details dazu.
Stellen Sie sicher, dass die
mail()
Funktion aufgerufen wirdEs mag albern erscheinen, aber ein häufiger Fehler besteht darin, zu vergessen, die
mail()
Funktion tatsächlich in Ihren Code einzufügen. Stellen Sie sicher, dass es vorhanden und nicht auskommentiert ist.Stellen Sie sicher, dass die
mail()
Funktion korrekt aufgerufen wirdDie Mail-Funktion verwendet drei erforderliche Parameter und optional einen vierten und einen fünften. Wenn Ihr Aufruf von
mail()
nicht mindestens drei Parameter enthält , schlägt dies fehl.Wenn Ihr Aufruf von
mail()
nicht die richtigen Parameter in der richtigen Reihenfolge enthält , schlägt dies ebenfalls fehl.Überprüfen Sie die E-Mail-Protokolle des Servers
Ihr Webserver sollte alle Versuche protokollieren, E-Mails über ihn zu senden. Der Speicherort dieser Protokolle ist unterschiedlich (möglicherweise müssen Sie Ihren Serveradministrator fragen, wo sie sich befinden). Sie befinden sich jedoch normalerweise im Stammverzeichnis eines Benutzers unter
logs
. Darin befinden sich Fehlermeldungen, die der Server im Zusammenhang mit Ihren Versuchen, E-Mails zu senden, gemeldet hat.Überprüfen Sie, ob die Portverbindung fehlgeschlagen ist
Portblock ist ein sehr häufiges Problem, mit dem die meisten Entwickler bei der Integration ihres Codes zur Zustellung von E-Mails über SMTP konfrontiert sind. Dies kann leicht in den Server-Maillogs nachverfolgt werden (der Speicherort des Servers des E-Mail-Protokolls kann von Server zu Server variieren, wie oben erläutert). Wenn Sie sich auf einem gemeinsam genutzten Hosting-Server befinden, bleiben die Ports 25 und 587 standardmäßig blockiert. Dieser Block wurde absichtlich von Ihrem Hosting-Anbieter durchgeführt. Dies gilt auch für einige der dedizierten Server. Wenn diese Ports blockiert sind, versuchen Sie, eine Verbindung über Port 2525 herzustellen. Wenn Sie feststellen, dass dieser Port ebenfalls blockiert ist, wenden Sie sich an Ihren Hosting-Anbieter, um die Blockierung dieser Ports aufzuheben.
Die meisten Hosting-Anbieter blockieren diese E-Mail-Ports, um ihr Netzwerk vor dem Versenden von Spam-E-Mails zu schützen.
Verwenden Sie die Ports 25 oder 587 für Plain / TLS-Verbindungen und Port 465 für SSL-Verbindungen. Für die meisten Benutzer wird empfohlen, Port 587 zu verwenden, um von einigen Hosting-Anbietern festgelegte Ratenbeschränkungen zu vermeiden.
Verwenden Sie nicht den Operator zur Fehlerunterdrückung
Wenn der Fehlerunterdrückung Operator
@
auf einen Ausdruck in PHP vorangestellt wird, werden alle Fehlermeldungen , die von diesem Ausdruck erzeugt werden könnten , werden ignoriert. Unter bestimmten Umständen ist die Verwendung dieses Operators erforderlich, das Senden von E-Mails gehört jedoch nicht dazu.Wenn Ihr Code enthält
@mail(...)
, verbergen Sie möglicherweise wichtige Fehlermeldungen, die Ihnen beim Debuggen helfen. Entfernen Sie das@
und prüfen Sie, ob Fehler gemeldet werden.Es ist nur dann sinnvoll , wenn Sie mit überprüfen
error_get_last()
direkt danach für konkrete Ausfälle.Überprüfen Sie den
mail()
RückgabewertDie
mail()
Funktion:Dies ist wichtig zu beachten, weil:
FALSE
Rückgabewert erhalten, wissen Sie, dass der Fehler darin liegt, dass Ihr Server Ihre E-Mails akzeptiert. Dies ist wahrscheinlich kein Codierungsproblem, sondern ein Serverkonfigurationsproblem. Sie müssen mit Ihrem Systemadministrator sprechen, um herauszufinden, warum dies geschieht.TRUE
Rückgabewert erhalten, bedeutet dies nicht, dass Ihre E-Mail definitiv gesendet wird. Dies bedeutet lediglich, dass die E-Mail von PHP erfolgreich an den jeweiligen Handler auf dem Server gesendet wurde. Es gibt noch weitere Fehlerquellen außerhalb der Kontrolle von PHP, die dazu führen können, dass die E-Mail nicht gesendet wird.Dies
FALSE
hilft Ihnen dabei, die richtige Richtung einzuschlagen, wasTRUE
jedoch nicht unbedingt bedeutet, dass Ihre E-Mail erfolgreich gesendet wurde. Dies ist wichtig zu beachten!Stellen Sie sicher, dass Ihr Hosting-Anbieter das Senden von E-Mails zulässt und das Senden von E-Mails nicht einschränkt
Viele gemeinsam genutzte Webhosts, insbesondere kostenlose Webhosting-Anbieter, erlauben entweder nicht, dass E-Mails von ihren Servern gesendet werden, oder begrenzen die Menge, die während eines bestimmten Zeitraums gesendet werden kann. Dies ist auf ihre Bemühungen zurückzuführen, Spammer daran zu hindern, ihre billigeren Dienste in Anspruch zu nehmen.
Wenn Sie der Meinung sind, dass Ihr Host E-Mail-Beschränkungen hat oder das Senden von E-Mails blockiert, überprüfen Sie die häufig gestellten Fragen (FAQs), um festzustellen, ob solche Einschränkungen aufgeführt sind. Andernfalls müssen Sie sich möglicherweise an den Support wenden, um zu überprüfen, ob beim Versenden von E-Mails Einschränkungen bestehen.
Überprüfen Sie die Spam-Ordner. Verhindern Sie, dass E-Mails als Spam gekennzeichnet werden
Aus verschiedenen Gründen landen E-Mails, die über PHP (und andere serverseitige Programmiersprachen) gesendet werden, häufig im Spam-Ordner eines Empfängers. Überprüfen Sie dort immer, bevor Sie Fehler in Ihrem Code beheben.
Um zu vermeiden, dass über PHP gesendete E-Mails an den Spam-Ordner eines Empfängers gesendet werden, können Sie sowohl in Ihrem PHP-Code als auch auf andere Weise verschiedene Maßnahmen ergreifen, um die Wahrscheinlichkeit zu minimieren, dass Ihre E-Mails als Spam markiert werden. Gute Tipps von Michiel de Mare sind:
Siehe Wie stellen Sie sicher, dass E-Mails, die Sie programmgesteuert senden, nicht automatisch als Spam markiert werden? Weitere Informationen zu diesem Thema.
Stellen Sie sicher, dass alle Mail-Header angegeben sind
Einige Spam-Programme lehnen E-Mails ab, wenn allgemeine Header wie "Von" und "Antwort an" fehlen:
Stellen Sie sicher, dass Mail-Header keine Syntaxfehler aufweisen
Ungültige Header sind genauso schlecht wie keine Header. Ein falsches Zeichen könnte alles sein, was Sie brauchen, um Ihre E-Mail zu entgleisen. Double-Check , um sicherzustellen , Ihre Syntax korrekt ist als PHP wird nicht diese Fehler für Sie fangen.
Verwenden Sie keinen falschen
From:
AbsenderWährend die Mail einen Absender von: haben muss, dürfen Sie nicht einfach irgendeinen Wert verwenden. Insbesondere vom Benutzer verwendete Absenderadressen sind ein todsicherer Weg, um Mails zu blockieren:
Grund: Ihr Web- oder Sende-Mail-Server ist nicht SPF / DKIM-Whitelist, um vorzutäuschen, für @ hotmail- oder @ gmail-Adressen verantwortlich zu sein. Es kann sogar stillschweigend E-Mails mit
From:
Absenderdomänen löschen, für die es nicht konfiguriert ist.Stellen Sie sicher, dass der Empfängerwert korrekt ist
Manchmal ist das Problem so einfach wie ein falscher Wert für den Empfänger der E-Mail. Dies kann auf die Verwendung einer falschen Variablen zurückzuführen sein.
Eine andere Möglichkeit, dies zu testen, besteht darin, den Empfängerwert fest in den
mail()
Funktionsaufruf zu codieren :Dies kann für alle
mail()
Parameter gelten.An mehrere Konten senden
Senden Sie Ihre E-Mail an mehrere E-Mail-Konten bei verschiedenen E-Mail-Anbietern , um Probleme mit E-Mail-Konten auszuschließen . Wenn Ihre E-Mails nicht im Google Mail-Konto eines Benutzers ankommen, senden Sie dieselben E-Mails an ein Yahoo-Konto, ein Hotmail-Konto und ein reguläres POP3-Konto (wie Ihr vom ISP bereitgestelltes E-Mail-Konto).
Wenn die E-Mails bei allen oder einigen anderen E-Mail-Konten ankommen, wissen Sie, dass Ihr Code E-Mails sendet, aber es ist wahrscheinlich, dass der E-Mail-Kontoanbieter sie aus irgendeinem Grund blockiert. Wenn die E-Mail bei keinem E-Mail-Konto ankommt, hängt das Problem eher mit Ihrem Code zusammen.
Stellen Sie sicher, dass der Code mit der Formularmethode übereinstimmt
Wenn Sie Ihre Formularmethode auf festgelegt haben
POST
, stellen Sie sicher, dass Sie$_POST
nach Ihren Formularwerten suchen. Wenn Sie es eingestellt habenGET
oder gar nicht eingestellt haben, stellen Sie sicher, dass Sie$_GET
nach Ihren Formularwerten suchen.action
Stellen Sie sicher, dass Ihr Formularwert auf die richtige Position zeigtaction
Stellen Sie sicher, dass Ihr Formularattribut einen Wert enthält, der auf Ihren PHP-Mailingcode verweist.Stellen Sie sicher, dass der Webhost das Senden von E-Mails unterstützt
Einige Webhosting-Anbieter erlauben oder aktivieren das Senden von E-Mails über ihre Server nicht. Die Gründe hierfür können variieren. Wenn sie jedoch das Senden von E-Mails deaktiviert haben, müssen Sie eine alternative Methode verwenden, bei der diese E-Mails von einem Dritten für Sie gesendet werden.
Eine E-Mail an den technischen Support (nach einem Besuch des Online-Supports oder häufig gestellte Fragen) sollte klarstellen, ob auf Ihrem Server E-Mail-Funktionen verfügbar sind.
Stellen Sie sicher, dass der
localhost
Mailserver konfiguriert istWenn Sie auf Ihrer lokalen Workstation mit WAMP, MAMP oder XAMPP entwickeln, ist wahrscheinlich kein E-Mail-Server auf Ihrer Workstation installiert. Ohne eine kann PHP standardmäßig keine E-Mails senden.
Sie können dies überwinden, indem Sie einen einfachen Mailserver installieren. Für Windows können Sie die kostenlose Mercury Mail verwenden .
Sie können auch SMTP verwenden, um Ihre E-Mails zu senden. Sehen Sie sich diese großartige Antwort von Vikas Dwivedi an, um zu erfahren, wie das geht.
Aktivieren Sie die benutzerdefinierte PHP
mail.log
Zusätzlich zur Protokolldatei Ihres MTA und PHP können Sie die Protokollierung für die
mail()
Funktion speziell aktivieren . Es wird nicht die gesamte SMTP-Interaktion aufgezeichnet, sondern zumindest Funktionsaufrufparameter und Aufrufskript.Weitere Informationen finden Sie unter http://php.net/manual/en/mail.configuration.php . (Am besten aktivieren Sie diese Optionen im
php.ini
oder.user.ini
oder.htaccess
vielleicht.)Wenden Sie sich an einen Mail-Testdienst
Es gibt verschiedene Zustellungs- und Spam-Überprüfungsdienste, mit denen Sie Ihr MTA / Webserver-Setup testen können. In der Regel senden Sie eine Mail-Sonde an: ihre Adresse, erhalten dann später einen Zustellungsbericht und konkretere Fehler oder Analysen:
Verwenden Sie einen anderen Mailer
Die eingebaute
mail()
Funktion von PHP ist praktisch und erledigt oft die Arbeit, hat aber auch Mängel . Glücklicherweise gibt es Alternativen, die mehr Leistung und Flexibilität bieten, einschließlich der Behandlung vieler der oben beschriebenen Probleme:All dies kann mit einem professionellen SMTP-Server / Dienstanbieter kombiniert werden. (Weil typische gemeinsam genutzte Webhosting-Pläne für 08/15 in Bezug auf die Einrichtung / Konfigurierbarkeit von E-Mails ein Erfolg oder Misserfolg sind.)
quelle
mail()
, es macht so einen schlechten Job und ist schwieriger zu debuggen als jede andere Mail-BibliothekFügen Sie der Mail-Funktion einen Mail-Header hinzu:
quelle
quelle
Wenn Sie zum Senden Ihrer E-Mail eine SMTP-Konfiguration verwenden, verwenden Sie stattdessen PHPMailer . Sie können die Bibliothek von https://github.com/PHPMailer/PHPMailer herunterladen .
Ich habe meine E-Mail wie folgt erstellt:
quelle
Fügen Sie einfach einige Header hinzu, bevor Sie E-Mails senden:
Und noch etwas. Die
mail()
Funktion funktioniert in localhost nicht. Laden Sie Ihren Code auf einen Server hoch und versuchen Sie es.quelle
$from = 'From: yoursite.com';
Was nicht wie eine vollständig gültige E-Mail-Adresse aussieht, gibt es keinen lokalen Teil. Sie haben den From-Header ersetzt und zusätzliche hinzugefügt. Oder besser gesagt, das$from
Obige ist in Ihrem Beispiel überflüssig. Und Missbildungen waren wahrscheinlich das ursprüngliche Problem des OP.Bei 000webhost hat es für mich wie folgt funktioniert:
Geben Sie beim Senden der E-Mail direkt die E-Mail-Adresse ein:
Verwenden Sie
''
und nicht""
.Dieser Code funktioniert, aber die E-Mail wurde mit einer Verzögerung von einer halben Stunde empfangen.
quelle
Meistens ist die
mail()
Funktion beim Shared Hosting deaktiviert. Eine bessere Option ist die Verwendung von SMTP. Die beste Option wäre Google Mail oder SendGrid.SMTPconfig.php
SMTPmail.php
contact_email.php
quelle
Wenn Sie nur die
mail()
Funktion verwenden, müssen Sie die Konfigurationsdatei vervollständigen.Sie müssen die Mail-Erweiterung öffnen und den
SMTP smtp_port
usw. Benutzernamen und vor allem Ihr Kennwort festlegen . Ohne das kann keine Mail gesendet werden. Sie können auch die verwendenPHPMail
Klasse auch zum Senden verwenden.quelle
Probieren Sie diese beiden Dinge getrennt und zusammen aus:
if($_POST['submit']){}
$from
(nur mein Darm)quelle
Ich denke, das sollte den Trick machen. Ich habe gerade eine
if(isset
und eine Verkettung zu den Variablen im Body hinzugefügt, um PHP von HTML zu trennen.quelle
Für alle, die dies in Zukunft finden, würde ich die Verwendung nicht empfehlen
mail
. Es gibt einige Antworten, die dies berühren, aber nicht das Warum .Die
mail
Funktion von PHP ist nicht nur undurchsichtig, sondern hängt auch vollständig von dem MTA ab, den Sie für die Arbeit verwenden (z. B. Sendmail ).mail
wird Ihnen nur mitteilen, wenn der MTA dies nicht akzeptiert hat (dh Sendmail war nicht verfügbar, als Sie versuchten zu senden). Es kann Ihnen nicht sagen, ob die E-Mail erfolgreich war, weil sie übergeben wurde. Als solches (wie die Antwortdetails von John Conde ) können Sie jetzt mit den Protokollen des MTA herumspielen und hoffen, dass es Ihnen genug über den Fehler bei der Behebung sagt. Wenn Sie sich auf einem gemeinsam genutzten Host befinden oder keinen Zugriff auf die MTA-Protokolle haben, haben Sie kein Glück. Leider wird dies bei den meisten Vanilla-Installationen für Linux standardmäßig so gehandhabt.Eine E-Mail-Bibliothek ( PHPMailer , Zend Framework 2+ usw.) macht etwas ganz anderes als
mail
. Sie öffnen einen Socket direkt an den empfangenden Mailserver und senden dann die SMTP-Mail-Befehle direkt über diesen Socket. Mit anderen Worten, die Klasse fungiert als eigener MTA (beachten Sie, dass Sie die Bibliothekenmail
anweisen können, die E-Mails letztendlich zu senden, aber ich würde Ihnen dringend empfehlen, dies nicht zu tun).Dies bedeutet, dass Sie die Antworten vom empfangenden Server direkt sehen können (in PHPMailer können Sie beispielsweise die Debugging-Ausgabe aktivieren ). Keine Vermutung mehr, ob eine E-Mail nicht gesendet werden konnte oder warum.
Sie erhalten auch den Vorteil einer besseren Benutzeroberfläche. Mit müssen
mail
Sie alle Ihre Header, Anhänge usw. einrichten. Mit einer Bibliothek haben Sie eine spezielle Funktion, um dies zu tun. Dies bedeutet auch, dass die Funktion alle kniffligen Teile (wie Header) ausführt.quelle
quelle
Sie können Konfigurations-E-Mail von CodeIgniter verwenden . Zum Beispiel mit SMTP (einfacher Weg):
Für mich geht das!
quelle
Versuche dies
quelle
Möglicherweise liegt das Problem in der Konfiguration des Mailservers. Um diese Art von Problemen zu vermeiden oder sich keine Sorgen um das Mail-Server-Problem machen zu müssen, empfehle ich die Verwendung von PHPMailer .
Es ist ein Plugin, das über alles verfügt, was zum Senden von E-Mails erforderlich ist. Sie müssen lediglich berücksichtigen, dass der SMTP-Port (Port: 25 und 465) aktiviert ist.
quelle
Stellen Sie sicher, dass Sendmail auf Ihrem Server installiert ist.
Wenn Sie Ihren Code überprüft und überprüft haben, dass dort nichts falsch ist, gehen Sie zu / var / mail und überprüfen Sie, ob dieser Ordner leer ist.
Wenn es leer ist, müssen Sie Folgendes ausführen:
Wenn Sie sich auf einem Ubuntu-Server befinden.
quelle
Zunächst haben Sie möglicherweise zu viele Parameter für die Funktion mail () ... Sie können maximal fünf haben,
mail(to, subject, message, headers, parameters);
Was die
$from
Variable betrifft, sollte dies automatisch von Ihrem Webhost kommen, wenn Sie das Linux- cPanel verwenden . Es kommt automatisch von Ihrem cPanel-Benutzernamen und Ihrer IP-Adresse.Stellen Sie außerdem sicher, dass Ihre mail () - Funktion die richtige Reihenfolge der Variablen aufweist.
Das
mail($to, $subject, $message, etc.)
in dieser Reihenfolge, oder es besteht die Möglichkeit, dass es nicht funktioniert.quelle
Wenn Sie Probleme beim Versenden von E-Mails mit PHP haben, ziehen Sie eine Alternative wie PHPMailer oder SwiftMailer in Betracht .
Normalerweise benutze ich SwiftMailer, wenn ich Mails mit PHP senden muss.
Grundlegende Verwendung:
Weitere Informationen zur Verwendung von SwiftMailer finden Sie in der offiziellen Dokumentation .
quelle
Für diejenigen, die keine externen Mailer verwenden und mail () auf einem dedizierten Linux-Server senden möchten.
Die Art und Weise, wie PHP Mails verschickt, wird
php.ini
im Abschnitt beschrieben[mail function]
.Parameter
sendmail-path
beschreibt, wie sendmail aufgerufen wird. Der Standardwert istsendmail -t -i
. Wenn Sie alsosendmail -t -i < message.txt
in der Linux-Konsole arbeiten, sind Sie fertig. Sie können auchmail.log
zum Debuggen hinzufügen und sicherstellen, dass mail () wirklich aufgerufen wird.Verschiedene MTAs können implementiert werden
sendmail
. Sie stellen unter diesem Namen nur eine symbolische Verknüpfung zu ihren Binärdateien her. Zum Beispiel in Debian der Standardwert beispielsweise Postfix . Konfigurieren Sie Ihren MTA so, dass E-Mails gesendet und von der Konsole aus mit getestet werdensendmail -v -t -i < message.txt
. Die Dateimessage.txt
sollte alle Überschriften einer Nachricht und einen Text enthalten. Die Zieladresse für den Umschlag wird aus derTo:
Überschrift entnommen . Beispiel:Ich bevorzuge die Verwendung von ssmtp als MTA, da es einfach ist und kein Daemon mit geöffneten Ports ausgeführt werden muss. ssmtp eignet sich nur zum Senden von E-Mails von localhost . Es kann auch authentifizierte E-Mails über Ihr Konto in einem öffentlichen Postdienst senden. Installieren Sie ssmtp und bearbeiten Sie die Konfigurationsdatei
/etc/ssmtp/ssmtp.conf
. Um auch lokale Systemmail an Unix-Konten empfangen zu können (z. B. Warnungen an root von Cron-Jobs), konfigurieren Sie die/etc/ssmtp/revaliases
Datei.Hier ist meine Konfiguration für mein Konto bei Yandex Mail:
quelle
Dies betrifft nur eine kleine Handvoll Benutzer, aber ich möchte, dass es für diese kleine Handvoll dokumentiert wird. Dieses Mitglied dieser kleinen Handvoll verbrachte aufgrund dieses Problems 6 Stunden mit der Fehlerbehebung bei einem funktionierenden PHP-Mail-Skript.
Wenn Sie eine Universität besuchen, an der XAMPP von www.AceITLab.com ausgeführt wird, sollten Sie wissen, was unser Professor uns nicht gesagt hat: Die AceITLab-Firewall (nicht die Windows-Firewall) blockiert MercuryMail in XAMPP. Sie müssen einen alternativen Mail-Client verwenden, Pear arbeitet für uns. Sie müssen an ein Google Mail-Konto mit niedrigen Sicherheitseinstellungen senden.
Ja, ich weiß, das ist für E-Mails aus der realen Welt völlig nutzlos. Nach allem, was ich gesehen habe, haben akademische Umgebungen und die reale Welt oft wenig gemeinsam.
quelle
Wenn Sie diesen Code auf einem lokalen Server (dh Ihrem Computer für Entwicklungszwecke) ausführen, wird die E-Mail nicht an den Empfänger gesendet. Es wird eine
.txt
Datei in einem Ordner mit dem Namen erstelltmailoutput
.Wenn Sie einen kostenlosen Schlauchdienst wie
000webhost
oder verwendenhostinger
, deaktivieren diese Dienstanbieter diemail()
Funktion, um eine unbeabsichtigte Verwendung von E-Mail-Spoofing, Spam usw. zu verhindern. Ich möchte, dass Sie sich an sie wenden, um zu erfahren, ob sie diese Funktion unterstützen.Wenn Sie sicher sind, dass der Dienstanbieter die Funktion mail () unterstützt, können Sie dieses PHP-Handbuch auf weitere Informationen überprüfen.
PHP mail ()
Versuchen Sie, diesen Code auszuführen, um zu überprüfen, ob Ihr Hosting-Service die Funktion mail () unterstützt (denken Sie daran, die E-Mail-Adresse des Empfängers zu ändern) :
quelle
Die Sendmail- Installation für Debian 10.0.0 ('Buster') war in der Tat trivial!
php.ini
Standardinstallation des sendmail- Pakets (erlaubt 'send'):
Verschiedene nützliche Befehle:
Überprüfung (der Sendefähigkeit)
Das oben genannte dauerte ungefähr 5 Minuten. Dann habe ich 5 Stunden verschwendet ... Vergiss nicht, deinen Spam-Ordner zu überprüfen !
quelle
Es gibt mehrere Möglichkeiten:
Sie haben ein Serverproblem. Der Server hat keinen Mailserver. Ihre E-Mail funktioniert also nicht, da Ihr Code in Ordnung ist und die E-Mail mit dem Typ funktioniert.
Sie erhalten den angegebenen Wert nicht. Probieren Sie Ihren Code mit einem statischen Wert aus.
Verwenden Sie SMTP-Mails, um E-Mails zu senden ...
quelle
Sie können libmail verwenden: http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=de
quelle
mail()
Funktionsumbruch. Fügt nur die Nachrichtenkonstruktion und einige Gimmicks hinzu.Sie können Ihre Fehler sehen durch:
Und mein Beispielcode lautet:
quelle
SMTPDebug = 0
ist nicht hilfreich. Ein einfaches "Passwort" würde auch nicht mit GMail funktionieren. Diese Antwort trägt hier nicht viel dazu bei.Vorausgesetzt, Ihr sendmail-System funktioniert, muss Ihr Code wie folgt geändert werden:
Auf diese Weise können Sie HTML-basierte E-Mails senden.
Von bemerkenswertem Interesse:
Hinweis: Für die
<<<EOB
Syntax muss der letzte EOB-Marker als Zeilenanfang beginnen und darf nach dem Semikolon kein Leerzeichen oder ein beliebiges Zeichen enthalten.quelle