it-swarm.com.de

Senden Sie eine E-Mail mit PHP aus dem HTML-Formular bei der Übermittlung mit dem gleichen Skript

Ich möchte eine E-Mail mit PHP) senden, wenn ein Benutzer das Ausfüllen eines HTML-Formulars abgeschlossen und dann Informationen aus dem Formular per E-Mail gesendet hat. Ich möchte dies über dasselbe Skript tun, das die Webseite anzeigt, auf der sich das befindet hat die Form.

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, um eine E-Mail in PHP zu senden?

64
fusi0n

BEARBEITEN (Nr. 1)

Wenn ich es richtig verstehe, möchten Sie alles auf einer Seite haben und es auf derselben Seite ausführen.

Sie können den folgenden Code verwenden, um E-Mails von einer einzelnen Seite aus zu senden, z. B. index.php Oder contact.php.

Der einzige Unterschied zwischen diesem und meiner ursprünglichen Antwort ist der <form action="" method="post">, Bei dem die Aktion leer gelassen wurde.

Es ist besser, header('Location: thank_you.php'); anstelle von echo im Handler PHP umzuleiten, um den Benutzer anschließend auf eine andere Seite umzuleiten.

Kopieren Sie den gesamten 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, aber ich habe den Eindruck, dass eine Kopie der Nachricht an die Person gesendet werden soll, die das Formular ausgefüllt hat.

Hier ist eine getestete/Arbeitskopie eines HTML-Formulars und eines PHP= Handlers. Hierbei wird die PHP mail() -Funktion verwendet.

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 diese 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.
    }
?>

Als HTML senden:

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 zu mail(), um zu erfahren, wie Sie E-Mails als HTML senden:


Fußnoten:

  • In Bezug auf HTML5

Sie müssen die URL des Dienstes angeben, der die übermittelten Daten verarbeitet, indem Sie das Aktionsattribut verwenden.

Wie beschrieben unter https://www.w3.org/TR/html5/forms.html unter 4.10.1.3 Ein Formular für die Kommunikation mit einem Server konfigurieren. Umfassende Informationen finden Sie auf der Seite.

Daher funktioniert action="" In HTML5 nicht.

Die richtige Syntax wäre:

  • action="handler.xxx" Oder
  • action="http://www.example.com/handler.xxx".

Beachten Sie, dass xxx die Erweiterung des Dateityps ist, der zur Verarbeitung des Prozesses verwendet wird. Dies kann eine .php, .cgi, .pl, .jsp Dateierweiterung usw. sein.


Lesen Sie die folgenden Fragen und Antworten zu Stacks, wenn das Senden von E-Mails fehlschlägt:

129

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 kleines Minenfeld mit Fallstricken und Kopfkratzern. Ich werde versuchen, Sie durch eine Instanz zu führen, in der es unter Windows 7 und PHP 5.2.3 unter dem Webserver (IIS) für Internetinformationsdienste funktioniert.

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 aus einer eigenständigen PHP Datei. Ich habe diesen Code unter dem Codeigniter (unter system/libraries) erworben und ihn so geändert, dass Sie ihn einfach in diese Email.php-Datei einfügen können und er funktionieren sollte.

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 von smtp.ihostexchange.net, Der bereits erstellt und für mich 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, Microsoft Outlook zu verwenden, um Ihren SMTP-Server anzugeben und dann E-Mails durch diesen zu senden.

Schritt 2, Erstellen Sie Ihre Hello World-E-Mail-Datei:

Ich gehe davon aus, dass Sie IIS verwenden. Also erstelle eine Datei namens index.php unter C:\inetpub\wwwroot Und füge 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. Dies führt zu Fehlern, 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 namens Email.php unter C:\inetpub\wwwroot.

Kopiere/füge diesen PHP Code in Email.php ein:

https://github.com/sentientmachine/standalone_php_script_send_email/blob/master/Email.php

Da es viele Arten von SMTP-Servern gibt, müssen Sie die Einstellungen oben in Email.php Manuell ändern. Ich habe es so eingerichtet, dass es automatisch mit smtp.ihostexchange.net Funktioniert, aber Ihr SMTP-Server ist möglicherweise anders.

Zum Beispiel:

  1. Setzen Sie die Einstellung smtp_port auf den Port Ihres SMTP-Servers.
  2. Stellen Sie die Einstellung smtp_crypto auf die Anforderungen Ihres SMTP-Servers ein.
  3. Stellen Sie $ newline und $ crlf so ein, dass sie mit dem kompatibel sind, was Ihr SMTP-Server verwendet. Wenn Sie falsch auswählen, ignoriert der SMTP-Server Ihre Anfrage möglicherweise ohne Fehler. Ich benutze\r\n, für dich ist vielleicht \n Erforderlich.

Der verknüpfte Code ist zu lang, um ihn als Stackoverflow-Antwort einzufügen. Wenn Sie ihn bearbeiten möchten, hinterlassen Sie hier oder über github einen Kommentar. Ich werde ihn ändern.

Schritt 4, stellen Sie sicher, dass in Ihrer php.ini die SSL-Erweiterung aktiviert ist:

Suchen Sie Ihre PHP.ini-Datei und kommentieren Sie die

;extension=php_openssl.dll

So sieht es aus:

extension=php_openssl.dll

Schritt 5: Führen Sie die soeben erstellte index.php-Datei 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 
<[email protected]> Queued mail for delivery 
lang:email_sent

done

Schritt 6, überprüfen Sie Ihre E-Mails und den 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. Ist dies nicht der Fall, überprüfen Sie die auf der Seite zurückgegebenen Fehler. Wenn das nicht funktioniert, versuchen Sie, Ihr Gesicht bei Google auf der Tastatur zu zerdrücken, während Sie singen: "Im Supermarkt zu arbeiten ist nicht so schlimm."

4
Eric Leschinski

Sie können auch die mandrill-App verwenden, um die E-Mails 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.

3
Hareesh

Wenn Sie es noch nicht getan haben, schauen Sie sich Ihr php.ini und stellen Sie sicher, dass die Parameter unter dem [mail function] sind richtig eingestellt, um den E-Mail-Dienst zu aktivieren. Nachdem Sie die Bibliothek PHPMailer verwendet haben, folgen Sie den Anweisungen.

3
KB9

Hier sind die PHP E-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.";
1
user2663434

Sie müssen ein 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>

Legen Sie dann Ihren Ausschnitt oben in das Dokument und senden Sie die E-Mail. Was echo($_SERVER['PHP_SELF']); tut, ist, dass es Ihre Informationen oben in Ihrem Skript sendet, damit Sie sie verwenden können.

1
Moduo

Sie benötigen einen SMTP-Server für

... mail($to,$subject,$message,$headers);

arbeiten.

Sie könnten leichte SMTP-Server wie x Mailer ausprobieren

0
Andrei CACIO