Ich möchte eine E-Mail mit PHP senden, wenn ein Benutzer ein HTML-Formular ausgefüllt und anschließend Informationen aus dem Formular per E-Mail gesendet hat. Ich möchte dies mit demselben Skript tun, das die Webseite mit dem Formular anzeigt.
Ich habe diesen Code gefunden, aber die Mail wird nicht gesendet.
<?php
if (isset($_POST['submit'])) {
$to = $_POST['email'];
$subject = $_POST['name'];
$message = getRequestURI();
$from = "[email protected]";
$headers = "From:" . $from;
if (mail($to, $subject, $message, $headers)) {
echo "Mail Sent.";
}
else {
echo "failed";
}
}
?>
Wie lautet der Code zum Senden einer E-Mail in PHP?
Antworten:
BEARBEITEN (# 1)
Wenn ich das richtig verstehe, möchten Sie alles auf einer Seite haben und es von derselben Seite ausführen.
Mit dem folgenden Code können Sie beispielsweise E-Mails von einer einzelnen Seite senden
index.php
odercontact.php
Der einzige Unterschied zwischen dieser und meiner ursprünglichen Antwort besteht darin,
<form action="" method="post">
wo die Aktion leer gelassen wurde.Es ist besser,
header('Location: thank_you.php');
anstelle desecho
PHP-Handlers den Benutzer anschließend auf eine andere Seite umzuleiten.Kopieren Sie den gesamten folgenden Code in eine Datei.
<?php if(isset($_POST['submit'])){ $to = "[email protected]"; // this is your Email address $from = $_POST['email']; // this is the sender's Email address $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $subject = "Form submission"; $subject2 = "Copy of your form submission"; $message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message']; $message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message']; $headers = "From:" . $from; $headers2 = "From:" . $to; mail($to,$subject,$message,$headers); mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly."; // You can also use header('Location: thank_you.php'); to redirect to another page. } ?> <!DOCTYPE html> <head> <title>Form submission</title> </head> <body> <form action="" method="post"> First Name: <input type="text" name="first_name"><br> Last Name: <input type="text" name="last_name"><br> Email: <input type="text" name="email"><br> Message:<br><textarea rows="5" name="message" cols="30"></textarea><br> <input type="submit" name="submit" value="Submit"> </form> </body> </html>
Ursprüngliche Antwort
Ich war mir nicht ganz sicher, was die Frage war, habe aber den Eindruck, dass eine Kopie der Nachricht an die Person gesendet werden soll, die das Formular ausgefüllt hat.
Hier ist eine getestete / funktionierende Kopie eines HTML-Formulars und eines PHP-Handlers. Dies nutzt die PHP-
mail()
Funktion.Der PHP-Handler sendet auch eine Kopie der Nachricht an die Person, die das Formular ausgefüllt hat.
Sie können zwei Schrägstriche
//
vor einer Codezeile verwenden, wenn Sie sie nicht verwenden möchten.Zum Beispiel:
// $subject2 = "Copy of your form submission";
wird nicht ausgeführt.HTML-FORMULAR:
<!DOCTYPE html> <head> <title>Form submission</title> </head> <body> <form action="mail_handler.php" method="post"> First Name: <input type="text" name="first_name"><br> Last Name: <input type="text" name="last_name"><br> Email: <input type="text" name="email"><br> Message:<br><textarea rows="5" name="message" cols="30"></textarea><br> <input type="submit" name="submit" value="Submit"> </form> </body> </html>
PHP-Handler (mail_handler.php)
(Verwendet Informationen aus dem HTML-Formular und sendet die E-Mail)
<?php if(isset($_POST['submit'])){ $to = "[email protected]"; // this is your Email address $from = $_POST['email']; // this is the sender's Email address $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $subject = "Form submission"; $subject2 = "Copy of your form submission"; $message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message']; $message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message']; $headers = "From:" . $from; $headers2 = "From:" . $to; mail($to,$subject,$message,$headers); mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly."; // You can also use header('Location: thank_you.php'); to redirect to another page. // You cannot use header and echo together. It's one or the other. } ?>
So senden Sie als HTML:
Wenn Sie E-Mails als HTML und für beide Instanzen senden möchten, müssen Sie zwei separate Sätze von HTML-Headern mit unterschiedlichen Variablennamen erstellen.
Lesen Sie das Handbuch weiter
mail()
, um zu erfahren, wie Sie E-Mails als HTML senden:Fußnoten:
Sie müssen die URL des Dienstes, der die übermittelten Daten verarbeitet, mithilfe des Aktionsattributs angeben.
Wie unter https://www.w3.org/TR/html5/forms.html unter 4.10.1.3 beschrieben. Konfigurieren eines Formulars für die Kommunikation mit einem Server . Vollständige Informationen finden Sie auf der Seite.
Funktioniert daher
action=""
nicht in HTML5.Die richtige Syntax wäre:
action="handler.xxx"
oderaction="http://www.example.com/handler.xxx"
.Beachten Sie, dass
xxx
dies die Erweiterung des Dateityps ist, mit dem der Prozess ausgeführt wird. Dies könnte eine sein.php
,.cgi
,.pl
,.jsp
Dateierweiterung usw.Lesen Sie die folgenden Fragen und Antworten zu Stack, wenn das Senden von E-Mails fehlschlägt:
quelle
Wenn Sie dies noch nicht getan haben, überprüfen Sie Ihre
php.ini
und stellen Sie sicher, dass die Parameter unter der[mail function]
Einstellung richtig eingestellt sind, um den E-Mail-Dienst zu aktivieren. Nachdem Sie die PHPMailer- Bibliothek verwenden können, befolgen Sie die Anweisungen.quelle
PHP-Skript zum Herstellen einer Verbindung zu einem SMTP-Server und zum Senden von E-Mails unter Windows 7
Das Senden einer E-Mail von PHP in Windows ist ein Minenfeld mit Fallstricken und Kopfkratzen. Ich werde versuchen, Sie durch eine Instanz zu führen, in der ich sie unter Windows 7 und PHP 5.2.3 unter (IIS) Internet Information Services-Webserver zum Laufen gebracht habe.
Ich gehe davon aus, dass Sie kein vorgefertigtes Framework wie CodeIgniter oder Symfony verwenden möchten, das E-Mail-Sendefunktionen enthält. Wir senden eine E-Mail von einer eigenständigen PHP-Datei. Ich habe diesen Code unter der Codeigniter-Haube (unter System / Bibliotheken) erworben und ihn so geändert, dass Sie ihn einfach in diese Email.php-Datei einfügen können und er sollte einfach funktionieren.
Dies sollte mit neueren Versionen von PHP funktionieren. Aber du weißt nie.
Schritt 1: Sie benötigen einen Benutzernamen / ein Passwort für einen SMTP-Server:
Ich verwende den SMTP-Server,
smtp.ihostexchange.net
der bereits für mich erstellt und eingerichtet wurde. Wenn Sie dies nicht haben, können Sie nicht fortfahren. Sie sollten in der Lage sein, einen E-Mail-Client wie Thunderbird, Evolution und Microsoft Outlook zu verwenden , um Ihren SMTP-Server anzugeben, und dann E-Mails über diesen Server senden zu können.Schritt 2: Erstellen Sie Ihre Hello World-E-Mail-Datei:
Ich gehe davon aus, dass Sie IIS verwenden. Erstellen Sie also eine Datei mit dem Namen index.php unter
C:\inetpub\wwwroot
und fügen Sie diesen Code dort ein:<?php include("Email.php"); $c = new CI_Email(); $c->from("[email protected]"); $c->to("[email protected]"); $c->subject("Celestial Temple"); $c->message("Dominion reinforcements on the way."); $c->send(); echo "done"; ?>
Sie sollten in der Lage sein, diese index.php zu besuchen, indem Sie in einem Browser zu localhost / index.php navigieren. Es werden Fehler ausgegeben, da Email.php fehlt. Stellen Sie jedoch sicher, dass Sie es zumindest über den Browser ausführen können.
Schritt 3: Erstellen Sie eine Datei mit dem Namen
Email.php
:Erstellen Sie eine neue Datei mit dem Namen Email.php unter
C:\inetpub\wwwroot
.Kopieren Sie diesen PHP-Code in Email.php:
https://github.com/sentientmachine/standalone_php_script_send_email/blob/master/Email.php
Da es viele Arten von SMTP-Servern gibt, müssen Sie manuell an den Einstellungen oben auf herumspielen
Email.php
. Ich habe es so eingerichtet, dass es automatisch funktioniertsmtp.ihostexchange.net
, aber Ihr SMTP-Server ist möglicherweise anders.Zum Beispiel:
\n
erforderlich.Der verknüpfte Code ist zu lang, um als Stackoverflow-Antwort eingefügt zu werden. Wenn Sie ihn bearbeiten möchten, hinterlassen Sie hier oder über github einen Kommentar, und ich werde ihn ändern.
Schritt 4, stellen Sie sicher, dass auf Ihrer php.ini die SSL-Erweiterung aktiviert ist:
Suchen Sie Ihre PHP.ini-Datei und kommentieren Sie die aus
So sieht es aus:
Schritt 5: Führen Sie die gerade erstellte Datei index.php in einem Browser aus:
Sie sollten die folgende Ausgabe erhalten:
220 smtp.ihostexchange.net Microsoft ESMTP MAIL Service ready at Wed, 16 Apr 2014 15:43:58 -0400 250 2.6.0 <534[email protected]> Queued mail for delivery lang:email_sent done
Schritt 6: Überprüfen Sie Ihre E-Mails und Ihren Spam-Ordner:
Besuchen Sie das E-Mail-Konto für [email protected] und Sie sollten eine E-Mail erhalten haben. Es sollte innerhalb von 5 oder 10 Sekunden eintreffen. Wenn Sie dies nicht tun, überprüfen Sie die auf der Seite zurückgegebenen Fehler. Wenn das nicht funktioniert, versuchen Sie, Ihr Gesicht auf der Tastatur von Google zu zerdrücken, während Sie singen: "Die Arbeit im Lebensmittelgeschäft ist nicht so schlecht."
quelle
Sie können auch Mandrill App verwenden, um die Mail in PHP zu senden. Sie erhalten die API von https://mandrillapp.com/api/docs/index.php.html, wo Sie die vollständigen Details zu gesendeten E-Mails und andere Details finden.
quelle
Sie benötigen einen SMPT-Server, um
arbeiten.
Sie könnten leichte SMTP-Server wie xmailer ausprobieren
quelle
Sie müssen ein wie folgt
action
in Ihr Formular einfügen:<form name='form1' method='post' action='<?php echo($_SERVER['PHP_SELF']);'> <!-- All your input for the form here --> </form>
Fügen Sie dann Ihr Snippet oben in das Dokument ein und senden Sie die E-Mail. Das
echo($_SERVER['PHP_SELF']);
bedeutet, dass Ihre Informationen oben in Ihrem Skript gesendet werden, damit Sie sie verwenden können.quelle
action
ein Formular kein Attribut enthält, wird dieselbe Seite angenommen.Hier sind die PHP-Mail-Einstellungen, die ich verwende:
//Mail sending function $subject = $_POST['name']; $to = $_POST['email']; $from = "[email protected]"; //data $msg = "Your MSG <br>\n"; //Headers $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=UTF-8\r\n"; $headers .= "From: <".$from. ">" ; mail($to,$subject,$msg,$headers); echo "Mail Sent.";
quelle
Ich denke, ein Fehler im ursprünglichen Code könnte gewesen sein, dass es hatte:
$message = echo getRequestURI();
anstatt:
(Der Code wurde inzwischen jedoch bearbeitet.)
quelle