PHP Tips: E-mails verzenden met PHP.
E-mails verzenden met PHP
Algemene kenmerken
Vroeg of laat wordt elke website-eigenaar geconfronteerd met de noodzaak om e-mails rechtstreeks vanaf de website te verzenden via een script, en niet via e-mailprogramma's. Dit kunnen brieven zijn die worden verzonden door het gastenboekscript, waarin de site-eigenaar wordt geïnformeerd dat hij een nieuw bericht in zijn gastenboek heeft, of door een forum, om op de hoogte te stellen van een nieuwe vraag.
In al deze gevallen is het automatisch versturen van brieven nodig, waarbij verschillende e-mailprogramma's en hulpprogramma's worden omzeild. Dit kan gedaan worden met behulp van de mail() functie, die we nu zullen bestuderen.
Syntaxis van de functie Mail():
Boolmail(string $to, string $subject, string $msg [, string $header]);
Om duidelijker te maken wat kopteksten zijn en waar ze zich in een brief bevinden, opent u uw e-mailclient en bekijkt u elke brief zoals deze is binnengekomen ( Voor Outlook kunt u dit doen door met de rechtermuisknop op het bericht te klikken->Eigenschappen->Details->Origineel bericht).
Zoals we kunnen zien, is de brief een eenvoudig tekstbestand dat uit twee algemene secties bestaat: bovenaan staan de kopteksten van de brief, en na twee regels de brief zelf.
Er zijn veel briefkoppen, maar ze worden niet allemaal gebruikt bij het schrijven van een script voor het verzenden van e-mail.
Hier zijn enkele van de meest gebruikte:
- Van: "Gebruikersnaam afzender"<Обратный адрес отправителя>
- Naar:<Адрес, по которому отправляют письмо>
- Onderwerp: Onderwerp van de brief
Het coderingsprobleem oplossen
Niet voor niets gaf ik hierboven een voorbeeld van het versturen van een brief met woorden in het Latijnse alfabet. Elke e-mailclient kan ze zonder problemen lezen. Maar het is moeilijker met het Russische alfabet. Er is een grote verscheidenheid aan Russische coderingen. En hoe vakkundig u de brief hercodeert, zal bepalen of de ontvanger deze zal lezen, of niet de moeite zal nemen om de vereiste codering in te stellen en deze eenvoudigweg in de prullenbak zal verwijderen.
De codering van de letter wordt bepaald door de header Inhoudstype:
$header="Van: \"Evgen\" "; $header.="Inhoudstype: tekst/plain; charset=\"windows-1251\""; $subject="E-mailonderwerp"; $msg="Storaka 1\nLijn 2\nLijn 3"; mail("
In de kop hebben we aangegeven dat het lettertype platte tekst zal zijn en dat de codering Windows zal zijn.
Nu komt onze brief aan in een codering die begrijpelijk is voor de e-mailclient.
Maar het is de moeite waard om op te merken dat in sommige gevallen alleen de letter zelf in de juiste codering wordt weergegeven. De titel blijft onleesbaar. Dit heeft te maken met waar de header zich bevindt. Inhoudstype ten opzichte van de titel Onderwerp, waarin het onderwerp van de brief staat. Feit is dat er e-mailprogramma's zijn die de header begrijpen Inhoudstype, maar begrijp de Russische tekst in het veld niet Onderwerp, als dit veld eerder is Inhoudstype. Tegelijkertijd verplichten andere e-mailprogramma's ons om dit te vragen Inhoudstype de laatste titel in de lijst. Om deze obstakels te omzeilen, kun je een veld plaatsen Inhoudstype onmiddellijk aan het begin en aan het einde van de headerlijst:
$subject="E-mailonderwerp"; $header="Inhoudstype: tekst/plain; charset=\"windows-1251\""; $header.="Van: Evgen"; $header.="Onderwerp: $onderwerp"; $header.="Inhoudstype: tekst/plain; charset=\"windows-1251\""; $msg="Storaka 1\nLijn 2\nLijn 3"; mail(" ", $onderwerp, $msg, $header);
Nu zal elk e-mailprogramma deze brief lezen!
We merken echter op dat dit een perversie is, en als verschillende corrupte e-mailprogramma's die de compilers hebben gevonden dit lezen, betekent dit niet dat iedereen het zou moeten lezen.
Een van de meest populaire functies op de site is het aanvraag- of bestelformulier, waarvan de gegevens per e-mail naar de site-eigenaar worden verzonden. Dergelijke formulieren zijn in de regel eenvoudig en bestaan uit twee of drie velden voor gegevensinvoer. Hoe maak je zo’n bestelformulier aan? Hiervoor is het gebruik van HTML-opmaaktaal en PHP-programmeertaal vereist.
De HTML-opmaaktaal zelf is eenvoudig; u hoeft alleen maar uit te zoeken hoe en waar u bepaalde tags moet plaatsen. Met de programmeertaal PHP zijn de zaken iets ingewikkelder.
Voor een programmeur is het maken van zo'n formulier niet moeilijk, maar voor een HTML-lay-outontwerper lijken sommige acties misschien moeilijk.
Maak een formulier voor het indienen van gegevens in html
De eerste regel zal als volgt zijn
Laten we nu alles samenvoegen.
Laten we nu de velden in het formulier verplicht maken. We hebben de volgende code:
Maak een bestand dat gegevens uit het HTML-formulier accepteert
Dit zal een bestand zijn met de naam send.php
In het bestand moet u in de eerste fase gegevens uit de post-array accepteren. Om dit te doen, maken we twee variabelen:
$fio = $_POST["fio"];
$e-mail = $_POST["e-mail"];
Namen van variabelen in PHP worden voorafgegaan door een $-teken en aan het einde van elke regel wordt een puntkomma geplaatst. $_POST is een array waarnaar gegevens uit het formulier worden verzonden. In het HTML-formulier wordt de verzendmethode gespecificeerd als method="post". Er worden dus twee variabelen uit het HTML-formulier geaccepteerd. Om uw site te beschermen, moet u deze variabelen door verschillende filters sturen: php-functies.
De eerste functie converteert alle tekens die de gebruiker aan het formulier probeert toe te voegen:
In dit geval worden er geen nieuwe variabelen aangemaakt in php, maar worden bestaande variabelen gebruikt. Wat het filter zal doen is het personage transformeren "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
De tweede functie decodeert de URL als de gebruiker deze aan het formulier probeert toe te voegen.
$fio = urldecode($fio);
$email = urldecode($email);
Met de derde functie verwijderen we eventuele spaties aan het begin en einde van de regel:
$fio = trim($fio);
$email = trim($email);
Er zijn andere functies waarmee u php-variabelen kunt filteren. Het gebruik ervan hangt af van hoe bezorgd u bent dat een aanvaller programmacode zal proberen toe te voegen aan dit HTML-e-mailinzendingsformulier.
Validatie van gegevens overgedragen van HTML-formulier naar PHP-bestand
Om te controleren of deze code werkt en of er gegevens worden overgedragen, kunt u deze eenvoudig op het scherm weergeven met behulp van de echofunctie:
echo $fio;
echo "
";
echo $fio;
De tweede regel hier is nodig om de uitvoer van PHP-variabelen in verschillende regels te verdelen.
Ontvangen gegevens van een HTML-formulier naar e-mail verzenden met behulp van PHP
Om gegevens per e-mail te verzenden, moet u de mailfunctie in PHP gebruiken.
mail("naar welk adres moet worden verzonden", "onderwerp van de brief", "Bericht (hoofdtekst van de brief)", "Vanaf: vanuit welke e-mail de brief wordt verzonden \r\n");
U moet bijvoorbeeld gegevens naar het e-mailadres van de site-eigenaar of -beheerder sturen [e-mailadres beveiligd].
Het onderwerp van de brief moet duidelijk zijn en de boodschap van de brief moet bevatten wat de gebruiker heeft opgegeven in het HTML-formulier.
mail(" [e-mailadres beveiligd]", "Toepassing van de site", "Volledige naam:".$fio.". E-mail: ".$email ,"Van: [e-mailadres beveiligd]\r\n");
Het is noodzakelijk om een voorwaarde toe te voegen die controleert of het formulier via PHP naar het opgegeven e-mailadres is verzonden.
als (mail(" [e-mailadres beveiligd]", "Bestel via de site", "Volledige naam:".$fio.". E-mail: ".$email ,"Van: [e-mailadres beveiligd]\r\n"))
{
echo "bericht succesvol verzonden";
) anders (
}
De programmacode van het send.php-bestand, dat de HTML-formuliergegevens naar e-mail verzendt, zal er dus als volgt uitzien:
$fio = $_POST["fio"];
$e-mail = $_POST["e-mail"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
//echo $fio;
// echo "
";
// echo $ e-mail;
als (mail(" [e-mailadres beveiligd]", "Toepassing van de site", "Volledige naam:".$fio.". E-mail: ".$email ,"Van: [e-mailadres beveiligd]\r\n"))
( echo "bericht succesvol verzonden";
) anders (
echo "Er zijn fouten opgetreden tijdens het verzenden van het bericht";
}?>
Drie regels om te controleren of de gegevens naar het bestand worden overgebracht, zijn voorzien van commentaar. Indien nodig kunnen ze worden verwijderd, omdat ze alleen nodig waren voor foutopsporing.
De HTML- en PHP-code voor het versturen van het formulier plaatsen wij in één bestand
In de commentaren op dit artikel stellen veel mensen de vraag hoe ze ervoor kunnen zorgen dat zowel het HTML-formulier als de PHP-code voor het verzenden van gegevens naar e-mail in één bestand staan, en niet in twee.
Om dit werk te implementeren, moet u de HTML-code van het formulier in het bestand send.php plaatsen en een voorwaarde toevoegen die controleert op de aanwezigheid van variabelen in de POST-array (deze array wordt verzonden vanuit het formulier). Dat wil zeggen, als de variabelen in de array niet bestaan, moet u de gebruiker het formulier laten zien. Anders moet u gegevens uit de array ontvangen en naar de ontvanger sturen.
Laten we eens kijken hoe we de PHP-code in het send.php-bestand kunnen wijzigen:
//controleer of er variabelen bestaan in de POST-array
if(!isset($_POST["fio"]) en !isset($_POST["e-mail"]))(
?> ) anders (
// toon het formulier
$fio = $_POST["fio"];
$e-mail = $_POST["e-mail"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
als (mail(" [e-mailadres beveiligd]", "Toepassing van de site", "Volledige naam:".$fio.". E-mail: ".$email ,"Van: [e-mailadres beveiligd]\r\n"))(
echo "Bericht succesvol verzonden";
) anders (
echo "Er zijn fouten opgetreden tijdens het verzenden van het bericht";
}
}
?>
We controleren het bestaan van een variabele in de POST-array met de isset() PHP-functie. Een uitroepteken vóór deze functie in een voorwaarde betekent ontkenning. Dat wil zeggen, als de variabele niet bestaat, moeten we onze vorm tonen. Als ik geen uitroepteken had geplaatst, zou de voorwaarde letterlijk betekenen: ‘als het bestaat, toon dan de vorm’. En dat is in ons geval verkeerd. Uiteraard kunt u de naam ervan wijzigen in index.php. Als u de naam van het bestand wijzigt, vergeet dan niet de bestandsnaam in de regel te hernoemen