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

Dit is een heel belangrijk element van het formulier. Daarin geven wij aan hoe de gegevens worden overgedragen en naar welk bestand. In dit geval wordt alles via de POST-methode overgebracht naar het bestand send.php. Het programma in dit bestand moet de gegevens dienovereenkomstig ontvangen, deze worden in de post-array opgenomen en naar het opgegeven e-mailadres verzonden.

Laten we teruggaan naar de vorm. De tweede regel bevat een veld waarin u uw volledige naam kunt invoeren. Heeft de volgende code:

Het formuliertype is tekst, dat wil zeggen dat de gebruiker hier via het toetsenbord tekst kan invoeren of kopiëren. De parameter name bevat de naam van het formulier. In dit geval is het fio; het is onder deze naam dat alles wat de gebruiker in dit veld heeft ingevoerd, wordt verzonden. De placeholder-parameter specificeert wat er als uitleg in dit veld wordt geschreven.

Volgende regel:

Hier is bijna alles hetzelfde, maar de naam voor het veld is e-mail, en de verklaring is dat de gebruiker zijn e-mailadres in dit formulier invoert.

De volgende regel is de knop "verzenden":

En de laatste regel in het formulier is de tag

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:



Aanvraagformulier van de site


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

. Het formulier moet naar dezelfde pagina linken, bijvoorbeeld index.php. Ik heb de paginatitel aan de code toegevoegd.

Veelvoorkomende fouten die optreden bij het indienen van een PHP-formulier vanaf een website

De eerste, waarschijnlijk de meest voorkomende fout, is wanneer u een lege witte pagina zonder berichten ziet. Dit betekent dat u een fout heeft gemaakt in de paginacode. Je moet de weergave van alle fouten in PHP inschakelen en dan zie je waar de fout is gemaakt. Voeg toe aan de code:

ini_set("display_errors","Aan");
error_reporting("E_ALL");

Het send.php-bestand mag alleen op de server worden uitgevoerd, anders werkt de code eenvoudigweg niet. Het is raadzaam dat dit geen lokale server is, aangezien deze niet altijd is geconfigureerd om gegevens naar een externe mailserver te verzenden. Als u de code niet op de server uitvoert, wordt de PHP-code direct op de pagina weergegeven.

Voor een correcte werking raad ik dus aan om het send.php-bestand op de sitehosting te plaatsen. In de regel is alles daar al geconfigureerd.

Een andere veel voorkomende fout is wanneer de melding ‘Bericht succesvol verzonden’ verschijnt, maar de brief niet per post aankomt. In dit geval moet u de regel zorgvuldig controleren:

als (mail(" [e-mailadres beveiligd]", "Bestel via de site", "Volledige naam:".$fio.". E-mail: ".$email ,"Van: [e-mailadres beveiligd]\r\n"))

In plaats van [e-mailadres beveiligd] er moet een e-mailadres zijn waarnaar de brief moet worden verzonden, maar in plaats daarvan[e-mailadres beveiligd] moet een bestaand e-mailadres voor deze site zijn. Voor een website zal dit bijvoorbeeld zijn . Alleen in dit geval wordt een brief met de gegevens uit het formulier verzonden.

Introductie van de mail() php-functie en een eenvoudig voorbeeld van het gebruik ervan om e-mails te verzenden. Wat is beter, of Sendmail versus mail.

Met de PHP mail()-functie kunt u e-mails naar een opgegeven e-mailadres verzenden.

Syntaxis:

Boel mail(snaar $aan,snaar $onderwerp,snaar $ bericht[, snaar $extra_headers[, snaar $aanvullende_parameters]]);

Opties:

  • naar— e-mailadres van de ontvanger van de brief in overeenstemming met het RFC 2822-formaat. Bijvoorbeeld:
  • onderwerp— onderwerp van de verzonden brief in overeenstemming met RFC 2047-formaat
  • bericht— inhoud van de verzonden brief. Elke regel mag niet langer zijn dan 70 tekens en eindigen met een teken voor een nieuwe regel (\n).

    Alleen Windows: Wanneer PHP rechtstreeks toegang krijgt tot de SMTP-server, wordt de punt aan het begin van de regel verwijderd. Om deze nuance tegen te gaan, moet u een dubbele punt aan het begin van de regel gebruiken.

    $bericht = str_replace("\n.", "\n..", $bericht);

  • extra_headers(optioneel) – een regel die wordt toegevoegd na de briefkoppen. Meestal gebruikt om extra headers toe te voegen (From, Cc en Bcc). Lijnen moeten worden gescheiden door CRLF (\r\n).
  • aanvullende_parameters(optioneel) – aanvullende parameters die worden gebruikt door het programma dat is bedoeld voor het verzenden van brieven.

Retouren: WAAR of de brief succesvol is verzonden of ONWAAR zo niet. Opgemerkt moet worden dat als een brief met succes in de wachtrij staat voor verzending, dit niet betekent dat deze de ontvanger zal bereiken.

Nu we de theorie hebben begrepen, kunnen we beginnen met oefenen. Maar eerst wil ik u een paar nuttige functies geven die onze taak aanzienlijk zullen vergemakkelijken.

Voorbeeld: php-functie MIME base64-codering, rekening houdend met de codering

Functie mime_base64($string, $charset="windows-1251") ( return "=?" . $charset . "?B?" . base64_encode(trim($string)) . "?="; )

Een van de problemen die zich voordoen bij het verzenden van e-mail is de vorming van de briefkop. Met name de namen van de koptekst, de afzender en de ontvangers die in het Cyrillisch zijn geschreven, kunnen door de e-mailclient van de ontvanger in vervormde vorm worden herkend. Om dit probleem te voorkomen, kunt u MIME base64-codering gebruiken, die een reeks bytes omzet in een reeks afdrukbare ASCII-tekens.

Functie is_email($string) ( return preg_match("/^()+([\.a-zA-Z0-9_-])*@()+(\.+)*\.((2,6)) $/", $string); )

Deze zijn ook geregeld. En nu, ter wille waarvan dit briefje is geschreven.

Voorbeeld: e-mails verzenden met de php-functie mail()

$charset = "windows-1251"; $from = mime_base64("Naam afzender", $charset) . " "; $to = mime_base64("Naam van ontvanger", $charset) . " "; $subject = mime_base64("Onderwerp van het bericht dat wordt verzonden", $charset); $message = "Inhoud van het bericht dat wordt verzonden."; $message = wordwrap($message, 70); $headers = "Van: " . $from . " \r\n" . "Antwoord aan: " . $from . "\r\n" . "X-Mailer: PHP/" . phpversion(). "\r\n" . " MIME-versie: 1.0" . "\r\n" . "Inhoudstype: tekst/plain; tekenset="" . $ tekenset. """; if (mail($to, $subject, $message, $headers)) ( echo "

De brief is verzonden.

";) anders (echo "

Er is een fout opgetreden.

"; }

Ik denk dat opmerkingen niet nodig zijn, aangezien ik al veel aandacht heb besteed aan verschillende details. Opties voor de set RFC-headers kunnen variëren, maar op de lokale server kreeg ik het volgende:

X-Sendmail-Cmdline: sendmail.pl -t -i Naar: =?windows-1251?B?yOz/IO/u6/P36PLl6/w=?= Onderwerp: =?windows-1251?B?0uXs4CDu8u/w4OLr/+Xs7uPuIO/o8fzs4A==?= Van: =?windows-1251?B?yOz/IO7y7/Dg4ujy5ev8?= Antwoord aan: =?windows-1251?B?yOz/IO7y7/Dg4ujy5ev8?= X-Mailer: PHP/5.3.3 MIME-versie: 1.0 Inhoudstype: tekst/plain; tekenset = "windows-1251"

Sendmail versus php mail()

Tenslotte een klein educatief programma. Sendmail is een van de mailservers (MTA), terwijl de php-functie mail() eenvoudigweg het proces implementeert van het verzenden van e-mails via een SMTP-verbinding. Het is duidelijk dat het gebruik van de PHP-functie handig is, maar verre van de optimale oplossing. Normaal gesproken wordt mail() gebruikt in gevallen waarin er geen sprake is van grootschalige mailings.


Heel vaak is het op websites nodig om een ​​brief naar de beheerder of klant te sturen. Dit kan op twee manieren: aan de clientzijde en aan de serverzijde.


Om e-mail vanaf de clientzijde te verzenden, voegt u eenvoudigweg een “mailto:”-link toe aan de HTML-code van de pagina die het vereiste adres aangeeft:


Schrijf naar de webmaster

Wanneer de gebruiker op de link klikt, start de browser de standaard e-mailclient en plaatst het opgegeven adres in het veld "Aan", zodat de gebruiker alleen maar de tekst hoeft te schrijven en de brief te verzenden. Deze methode heeft niets met PHP te maken, maar is soms de moeite waard om te gebruiken. Bovendien is dit de enige manier om een ​​e-mailclient te bellen vanaf een site die de uitvoering van scripts niet ondersteunt.

Wij zijn geïnteresseerd in de tweede methode: het verzenden van e-mailberichten met behulp van PHP. Over het algemeen biedt PHP hiervoor slechts één functie: mail(), maar er zijn verschillende manieren om deze te gebruiken. Het prototype van de functie mail() ziet er als volgt uit:

Bool mail(string naar, string onderwerp, string bericht [, string extra_headers [, string extra_parameters]])

Wanneer u e-mail verzendt, moet u ten minste drie parameters opgeven: ontvanger, onderwerp en berichttekst.

Als het 'aan'-adres van de ontvanger kunt u een enkel adres opgeven of een hele lijst, gescheiden door komma's. Een individueel adres kan in de volgende formaten worden opgegeven: "adres" of "naam<адрес>" :

[e-mailadres beveiligd] of Site-webmaster

Het onderwerp van het bericht "onderwerp" is een gewone string. De enige beperking is dat de regel geen regeleinde- of regelteruglooptekens ("\n" en "\r") mag bevatten.

De hoofdtekst van het bericht is de tekst die u naar de ontvanger wilt verzenden. Berichtregels moeten worden gescheiden door regelfeeds (LF) in Unix-stijl, en elke regel mag niet langer zijn dan zeventig tekens. Als niet aan deze vereisten wordt voldaan, kan de server het verzenden van de brief verbieden.

Naast de vereiste elementen kunt u nog twee extra elementen opgeven: uitgebreide headers en uitgebreide parameters. Uitgebreide headers worden gebruikt om extra attributen en blokken aan een bericht toe te voegen, zoals het adres van de afzender, het verzenden van een kopie-adres ("cc"), het verzenden van een blind copy-adres ("bcc"), enz. Met uitgebreide headers kunt u ook berichten in HTML-indeling verzenden.

Uitgebreide gegevens zijn een gegevensblok bedoeld voor een programma dat e-mail verzendt. In sommige gevallen kunt u met deze gegevens het programma afstemmen op specifieke behoeften. Maar in de normale praktijk wordt dit element niet gebruikt.

Het minimale script voor het verzenden van een bericht ziet er dus als volgt uit:

Dit script stuurt een brief naar het opgegeven adres, maar het veld 'van' geeft hoogstwaarschijnlijk het serviceadres van de mailserver van de provider aan. Daarom, als u deze brief wilt beantwoorden, zal het antwoord nergens heen gaan. Om de afzender correct aan te geven, gebruiken we uitgebreide headers:

// formulier uitgebreide headers $headers = "Van: [e-mailadres beveiligd]" . "\r\n" . "Antwoord aan: [e-mailadres beveiligd]" . "\r\n" . "X-Mailer: PHP/" . phpversion();
mail($naar, $onderwerp, $bericht, $headers); ?>

Dit script stuurt namens de mailrobot van uw site een brief naar de klant (kop "Van:"). Bovendien hebben we door het gebruik van de header "Reply-To:" aan het mailprogramma van de klant aangegeven dat de antwoorden niet naar de mailrobot moesten worden doorgestuurd, maar naar de webmaster op het opgegeven adres. Het derde fragment ("X-Mailer") is optioneel en beschrijft het programma waarmee het bericht is verzonden. Volgens het mailprotocol kan de ontwikkelaar indien nodig zijn eigen uitgebreide headers toevoegen. De enige beperking is dat de namen van dergelijke headers moeten beginnen met "X-".

Standaard verzendt de functie mail() berichten in tekstvorm. Dit betekent dat als u HTML-tags aan de tekst toevoegt, deze worden gezien als gewone tekst zonder hypertekstmarkeringen. Om een ​​HTML-bericht te versturen, zullen we wederom gebruik maken van uitgebreide headers:

// lijst met ontvangers $to = " [e-mailadres beveiligd], [e-mailadres beveiligd]";

// Berichtonderwerp
$subject = "Sitenieuws";

// Bericht in HTML-formaat
$bericht = "


Site-nieuws


Nieuws voor vandaag:











NummerInhoud AuteurGepubliceerd
1eerste nieuws Beheerdergisteren
2tweede nieuws BeheerderVandaag





";

// Specificeer het juiste MIME-type van het bericht:
$headers = "MIME-versie: 1.0" . "\r\n";
$headers .= "Inhoudstype: tekst/html; charset=iso-8859-1" . "\r\n";

// Voeg de benodigde headers toe
$headers .= "Aan: Klant #1 ". "Klant #2 " . "\r\n";
$headers .= "Van: Nieuwsrobot " . "\r\n";
$headers .= "Cc: Nieuwsarchief $headers .= "Bcc: [e-mailadres beveiligd]" . "\r\n";

// Stuur een bericht
mail($naar, $onderwerp, $bericht, $headers);
?>

Dit script stuurt een brief in HTML-formaat naar twee ontvangers en stuurt ook kopieën naar het archief en naar de controlebox.

U kunt op twee manieren beginnen met het verzenden van e-mails: als resultaat van gebruikersacties (bijvoorbeeld na het verwerken van formuliergegevens) of via een geplande taak. Het eerste geval ligt voor de hand: de gebruiker stuurt het formulier naar de server, de gegevens worden daar verwerkt en de resultaten van de formulierverwerking (registratiebevestiging, te betalen facturen, bestelinhoud of iets anders) worden naar de opgegeven mailbox gestuurd.

De tweede methode wordt het vaakst gebruikt wanneer het script periodiek moet worden uitgevoerd (bijvoorbeeld een dagelijkse nieuwsbrief). Het organiseren van taakuitvoeringsplanning met behulp van PHP is een niet-triviale taak. Een eenvoudigere manier is om kant-en-klare tools te gebruiken, zoals crontab. Deze tool is beschikbaar op de meeste betaalde Unix-hostingservices. We zullen crontab in meer detail bekijken in een aparte tutorial.

Bovendien kunt u er rekening mee houden dat u niet kunt proberen e-mail vanaf uw lokale server te verzenden. In de meeste gevallen zijn de e-mailfuncties om veiligheidsredenen niet geconfigureerd en moeten ze handmatig worden geconfigureerd. U kunt parameters opgeven in het php.ini-bestand of rechtstreeks in de code voordat u de functie mail() aanroept:

// in php.ini SMTP = localhost sptp_port = 25 // in code ini_set("SMTP", "localhost"); ini_set("smtp_poort", "25");

Daarnaast raad ik ten zeerste aan een lokale SMTP-server te installeren, bijvoorbeeld PersonalSMTP. Dit hulpprogramma wordt gratis verspreid, is eenvoudig te installeren en te configureren, maar biedt u tegelijkertijd de mogelijkheid fouten bij het verzenden van brieven op te lossen, zelfs als er geen internetverbinding is. Wanneer u PersonalSMTP gebruikt, gebruikt de standaardconfiguratie de server "localhost" en poort 15025. Voordat u de functie mail() aanroept, moet u daarom de volgende regels toevoegen:

// vergeet niet om commentaar te geven // voordat u het script op de site publiceert. ini_set("SMTP", "localhost"); ini_set("smtp_poort", "15025");

Er zijn al veel klassen gemaakt voor het werken met e-mail, dus je hoeft niet echt alle code zelf te schrijven. Bezoek gewoon de juiste website en download een van de gratis bibliotheken, bijvoorbeeld libmail2008.

Leuk je te zien op mijn blogsite. Vandaag zullen we bekijken waarom de PHP Mail-functie nodig is. Welk internetproject u ook maakt, het moet een feedbackformulier hebben zodat mensen met u kunnen communiceren. Dit geldt vooral voor commerciële projecten. Dit is een complex onderwerp, waar ik het al over had in het artikel “”. Laten we eens kijken hoe we deze functie kunnen gebruiken om berichten te verzenden.

Een beetje theorie

Voor het verzenden van e-mails is een SMTP-server vereist. Het is beschikbaar op alle betaalde hostingdiensten van hoge kwaliteit. Om te ontvangen heeft u een POP-server nodig. Je moet begrijpen dat php het bericht niet verzendt, maar opdrachten doorgeeft aan de sendmail-toepassing, die het bericht verzendt. Daarom moet je het hebben. Als u Denver gebruikt, is deze app al ingebouwd. Alle berichten worden in de map “tmp/!sendmail” geplaatst. Overigens raad ik je aan, . Dit geldt vooral als u betrokken bent bij de ontwikkeling van websites.

Wat is het

Mail wordt gebruikt om berichten te versturen, mits er bepaalde regels worden gevolgd. Het belangrijkste is dat deze functie niet geschikt is voor het versturen van een groot aantal brieven. Want na elke verzending wordt de verbinding met de mailserver gesloten en vervolgens weer geopend. Dit zal leiden tot overbesteding van hostingcapaciteit.

De functie wordt geconfigureerd in het configuratiebestand php.ini. Het specificeert het pad naar de logbestanden, stelt de poortwaarde in, enzovoort.

Mail accepteert vijf argumenten, waarvan er drie vereist zijn:

  • Adres afzender;
  • Titel van de brief;
  • Berichttekst.

Laten we bijvoorbeeld de volgende regels code schrijven

Enkele kenmerken

Er zijn veel nuances tijdens het werken. Ze zijn afhankelijk van het gebruikte besturingssysteemplatform en andere instellingen en opties. Laten we eens kijken naar de meest fundamentele:

  • Bij het verzenden van een brief moet de formulierkop worden ingesteld met de optionele parameter “additional_headers”. Als deze ontbreekt, kan er een fout optreden bij het verzenden;
  • Scheid kopteksten met nieuweregel- en wagensymbolen (\r\n);
  • De regellengte bedraagt ​​maximaal zeventig tekens. Pas het aan (\r\n).

Wat te doen als de functie geen e-mails verzendt

Zelfs met alle hierboven genoemde punten werkt e-mail mogelijk niet. In dit geval wordt alles zoals het hoort naar de lokale server verzonden. Een van de redenen waarom dit gebeurt is een onjuiste configuratie van de functie op de hosting. Daarom moet u het configuratiebestand php.ini raadplegen, waarin u zoekt naar de functie “disable_functions”.

Om de functionaliteit te controleren, schrijft u deze eenvoudige code en plaatst u deze in de hoofdmap van het gemaakte internetproject.

Als alles correct werkt, verschijnt de nummer één “1” op het browserscherm. Het wordt na uitvoering per “print” teruggestuurd.

Belangrijk! Als dit het geval is, worden de e-mails opgeslagen in de map C:\openserver\userdata\temp\email. Op voorwaarde dat u het op de lokale schijf “C” hebt geïnstalleerd.

Verzenden met bijlage

Laten we eens kijken naar een voorbeeld van hoe u berichten kunt verzenden met een bijgevoegd bestand. Hiervoor wordt de functie sendMailAttachment() gebruikt. Laten we eens kijken hoe dit werkt met een voorbeeld:

// stel het pad in naar het te verzenden bestand$mailTo = " [e-mailadres beveiligd]" ; // afzenderadres$van = " [e-mailadres beveiligd]" ; // van wie $subject = "Testbestand" ; // subject $message = "Tekst met bijlage"; // e-mailinhoud$r = sendMailAttachment($mailTo, $from, $subject, $message, $file) ; // stuur een brief met bijlage echo ($r ) ?Verzonden: Fout. Niet verzonden!: "; //$r = sendMailAttachment($mailTo, $from, $subject, $message); // een brief verzenden zonder bijlage //echo ($r)? Verzonden"; ?>

"Fout. Niet verzonden!"

Coderingsproblemen

Soms komen berichten in de vorm van vragen “?” of vreemde karakters. Of de ontvanger het zal lezen, hangt af van hoe correct het is gehercodeerd. Bij standaard verzendmethoden houdt php geen rekening met de codering. Er stond al een artikel over dit onderwerp op mijn blog “UTF-8 en”. De berichtinhoud zelf kan elke codering hebben. De hele moeilijkheid ligt in de Van-header. Volgens de standaard zouden ze in US-ASCII moeten zijn. Er zijn twee vormen van codering: BASE64 en Quoted-Printable. De eerste is universeler en werkt met UTF-8, dus gebruik hem. Bijvoorbeeld,"Adres om naar te sturen" " ; $van = "Van" ;$onderwerp = "Onderwerp" ; $bericht = Hallo Tekst "<$from >;$kopteksten =

; "Inhoudstype: tekst/html; charset= UTF-8 \r \n "

;<$from>$headers .=

"Van: Elke tekst

\r\n"

;

mail($naar, $onderwerp, $bericht, $headers);

?> Tekst "; $headers = "Inhoudstype: tekst/html; charset= UTF-8 \r\n"; $headers .= "Van: elke tekst


\r\n"; mail($naar, $onderwerp, $bericht, $headers); ?>

Het werk van de mailfunctie is dus niet erg ingewikkeld. We hebben gekeken naar de meest voorkomende fouten die kunnen optreden tijdens de implementatie ervan. Ik zou je willen aanraden om de portal voor programmeurs te bezoeken GeekBrains.ru , waar u zeker iets interessants zult vinden. Abonneer u op mijn VKontakte-groep, u vindt daar ook veel nuttige informatie.