Stuur e-mail met PHP vanaf html-formulier bij verzenden met hetzelfde script

Ik wil een e-mail sturen met PHP wanneer een gebruiker klaar is met het invullen van een HTML-formulier en het e-mailen van informatie uit het formulier. Ik wil het doen vanuit hetzelfde script dat de webpagina met het formulier weergeeft.

Ik heb deze code gevonden, maar de e-mail wordt niet verzonden.

<?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";
    }
}
?>

Wat is de code om een e-mail in PHP te verzenden?


Antwoord 1, autoriteit 100%

BEWERKEN (#1)

Als ik het goed begrijp, wil je alles op één pagina hebben en het vanaf dezelfde pagina uitvoeren.

U kunt de volgende code gebruiken om e-mail te verzenden vanaf één pagina, bijvoorbeeld index.phpof contact.php

Het enige verschil tussen deze en mijn oorspronkelijke antwoord is de <form action="" method="post">waarbij de actie leeg is gelaten.

Het is beter om header('Location: thank_you.php');te gebruiken in plaats van echoin de PHP-handler om de gebruiker daarna om te leiden naar een andere pagina.

Kopieer de volledige code hieronder naar één bestand.

<?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> 

Oorspronkelijk antwoord


Ik wist niet precies wat de vraag was, maar ik heb de indruk dat een kopie van het bericht moet worden gestuurd naar de persoon die het formulier heeft ingevuld.

Hier is een geteste/werkende kopie van een HTML-formulier en een PHP-handler. Dit gebruikt de PHP mail()functie.

De PHP-handler stuurt ook een kopie van het bericht naar de persoon die het formulier heeft ingevuld.

Je kunt twee schuine strepen //vóór een regel code gebruiken als je deze niet gaat gebruiken.

Bijvoorbeeld:// $subject2 = "Copy of your form submission";wordt niet uitgevoerd.

HTML-FORMULIER:

<!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)

(Gebruikt informatie van HTML-formulier en verzendt de 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.
    }
?>

Verzenden als HTML:

Als u e-mail wilt verzenden als HTML en voor beide instanties, moet u twee afzonderlijke sets HTML-headers maken met verschillende variabele namen.

Lees de handleiding op mail()om te leren hoe u e-mails verzendt als HTML:


voetnoten:

  • Met betrekking tot HTML5

U moet de URL van de Service opgeven die de ingediende gegevens behandelt, met behulp van het ACTION-kenmerk.

Zoals beschreven op https://www.w3.org/tr/html5/forms .html onder 4.10.1.3 Een formulier configureren om te communiceren met een server . Raadpleeg de pagina voor volledige informatie.

Daarom, action=""werkt niet in HTML5.

De juiste syntaxis zou zijn:

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

Merk op dat xxxde uitbreiding van het type bestand is dat wordt gebruikt om het proces aan te pakken. Dit kan een .php, .cgi, .pl, .jspbestandsverlenging enz.


Raadpleeg de volgende Q & AMP; A op stapel als het verzenden van e-mail mislukt:


Antwoord 2, Autoriteit 2%

Als u nog niet hebt, bekijk dan uw php.inien zorg ervoor dat de parameters onder de [mail function]INSTELLING correct zijn ingesteld om de e-mailservice te activeren . Nadat u phpmailer bibliotheek en volg de instructies te volgen.


Antwoord 3, autoriteit 2%

PHP-script om verbinding te maken met een SMTP-server en e-mail te verzenden op Windows 7

Het verzenden van een e-mail vanuit PHP in Windows is een beetje een mijnenveld met valkuilen en hoofd krabben. Ik zal proberen u door één instantie te leiden waar ik het heb laten werken op Windows 7 en PHP 5.2.3 onder (IIS) Internet Information Services-webserver.

Ik neem aan dat je geen vooraf gebouwd framework zoals CodeIgniter of Symfony wilt gebruiken dat mogelijkheden biedt voor het verzenden van e-mail. We sturen een e-mail vanuit een op zichzelf staand PHP-bestand. Ik heb deze code verkregen van onder de codeigniter-kap (onder systeem/bibliotheken) en heb het aangepast zodat je dit Email.php-bestand gewoon kunt neerzetten en het zou gewoon moeten werken.

Dit zou moeten werken met nieuwere versies van PHP. Maar je weet maar nooit.

Stap 1, U heeft een gebruikersnaam/wachtwoord nodig met een SMTP-server:

Ik gebruik de smtp-server van smtp.ihostexchange.netdie al voor mij is gemaakt en ingesteld. Als je deze niet hebt, kun je niet verder. U zou een e-mailclient zoals Thunderbird, evolution, Microsoft Outlookmoeten kunnen gebruiken om uw smtp te specificeren server en kan daar vervolgens e-mails verzenden.

Stap 2, maak uw Hello World e-mailbestand:

Ik neem aan dat je IIS gebruikt. Maak dus een bestand aan met de naam index.php onder C:\inetpub\wwwrooten plaats deze code daarin:

<?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";
?>

Je zou deze index.php moeten kunnen bezoeken door in een browser naar localhost/index.php te gaan, het zal fouten spuwen omdat Email.php ontbreekt. Maar zorg ervoor dat u het in ieder geval vanuit de browser kunt uitvoeren.

Stap 3, maak een bestand met de naam Email.php:

Maak een nieuw bestand met de naam Email.php onder C:\inetpub\wwwroot.

Kopieer/plak deze PHP-code in Email.php:

https://github.com/sentientmachine/standalone_php_script_send_email/blob/master/ E-mail.php

Aangezien er veel soorten smtp-servers zijn, zul je handmatig moeten rommelen met de instellingen bovenaan Email.php. Ik heb het zo ingesteld dat het automatisch werkt met smtp.ihostexchange.net, maar je smtp-server kan anders zijn.

Bijvoorbeeld:

  1. Stel de smtp_port-instelling in op de poort van uw smtp-server.
  2. Stel de smtp_crypto-instelling in op wat uw smtp-server nodig heeft.
  3. Stel de $newline en $crlf zo in dat deze compatibel zijn met wat uw smtp-server gebruikt. Als u een verkeerde keuze maakt, kan de smtp-server uw verzoek zonder fouten negeren. Ik gebruik \r\n, voor jou is misschien \nvereist.

De gekoppelde code is te lang om te plakken als een stackoverflow-antwoord. Als je het wilt bewerken, laat dan hier of via github een reactie achter en ik zal het veranderen.

Stap 4, zorg ervoor dat uw php.ini de ssl-extensie heeft ingeschakeld:

Zoek uw PHP.ini-bestand en verwijder de commentaar bij de

;extension=php_openssl.dll

Het ziet er dus zo uit:

extension=php_openssl.dll

Stap 5, voer het index.php-bestand uit dat u zojuist in een browser hebt gemaakt:

U zou de volgende uitvoer moeten krijgen:

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

Stap 6, controleer uw e-mail en spammap:

Bezoek het e-mailaccount voor [email protected] en u zou een e-mail moeten hebben ontvangen. Het zou binnen 5 of 10 seconden moeten aankomen. Als u dat niet doet, controleert u de fouten die op de pagina worden geretourneerd. Als dat niet werkt, probeer dan je gezicht op het toetsenbord van Google te stampen terwijl je zingt: “werken in de supermarkt is niet zo erg.”


Antwoord 4, autoriteit 2%

Je kunt de mandrill-app ook gebruiken om de e-mail in php te verzenden. U krijgt de API van https://mandrillapp.com/api/docs/index.php .htmlwaar u de volledige details kunt vinden over verzonden e-mails en andere details.


Antwoord 5

Je hebt een SMPT-server nodig om

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

om te werken.

Je zou lichtgewicht SMTP-servers zoals xmailer kunnen proberen


Antwoord 6

Dit zijn de PHP-mailinstellingen die ik gebruik:

//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.";

Antwoord 7

Je moet een actionaan je formulier toevoegen, zoals:

<form name='form1' method='post' action='<?php echo($_SERVER['PHP_SELF']);'>
    <!-- All your input for the form here -->
</form>

Zet dan je fragment bovenaan het document en verstuur de mail. Wat echo($_SERVER['PHP_SELF']);doet, is dat het je informatie naar de bovenkant van je script stuurt, zodat je het kunt gebruiken.


Antwoord 8

Ik denk dat een fout in de originele code zou kunnen zijn dat deze het volgende had:

$message = echo getRequestURI();

in plaats van:

$message = getRequestURI();

(De code is sindsdien wel aangepast.)

Other episodes