Php verzendt brieven waarin wordt aangegeven van wie. E-mails verzenden met php

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 dit fio; het is onder deze naam dat alles wat de gebruiker in dit veld heeft ingevoerd, wordt verzonden. De placeholder-parameter specificeert wat ter toelichting 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"];

Variabelenamen 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 te sturen", "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 het uitroepteken niet 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.

Op virtuele hostingservers is het verzenden van e-mail vanaf de site alleen toegestaan ​​met behulp van de PHP mail()-functie.

Het e-mailadres waarmee e-mails vanaf de site worden verzonden, wordt geregistreerd in het ISPmanager-hostingcontrolepaneel.

Hetzelfde e-mailadres moet worden ingevoerd in de site-instellingen. Een e-mailmatch is een voorwaarde voor de juiste werking van de PHP Mail-functie.

Het opgeven van mailboxen zoals: @gmail.com, @yandex.ru, etc. zal ertoe leiden dat e-mails in de spam terechtkomen!

Om te configureren gaat u naar ISP-manager >> sectie "World Wide Web" >> "WWW-domeinen"

Selecteer een domein en geef in het veld "E-mailadres van de beheerder" het e-mailadres op vanwaar u berichten wilt verzenden.

Om de werking van php mail() op de server te testen, moet u een bestand testmail.php maken met de volgende inhoud in de hoofdmap van de site:

// Bericht

$message = "php-mail testen";

// Als een regel van de brief langer is dan 70 tekens, gebruiken we wordwrap()

$bericht = tekstomloop($bericht, 70);

// Versturen

mail(" [e-mailadres beveiligd]", "Mijn onderwerp", $bericht);

?>

Waar [e-mailadres beveiligd] e-mailadres waarnaar het bericht moet worden verzonden.

Om dit te controleren, moet u het script uitvoeren; dit kunt u doen via een browser door de volgende link te openen:

http://domian.com/testmail.php

waarbij domain.com de naam is van de site in de root waarvan het testmail.php-script is gemaakt.

Als het bericht “test php mail” op de opgegeven e-mail arriveert, werkt de php mail-functie correct.

Het voorbeeld is afkomstig uit de officiële documentatie voor PHP mail http://php.net/manual/ru/function.mail.php

Mail versturen vanuit CMS Drupal 7.

Standaard worden alle berichten van Drupal7 verzonden met behulp van php mail(), de e-mail van de afzender wordt opgegeven bij het installeren van Drupal7.

Het is noodzakelijk dat de e-mail van de afzender in Drupal overeenkomt met de "Administrator's e-mail" in het ISPmanager hosting controlepaneel.

In de toekomst kan de e-mail van de afzender worden gewijzigd in het administratieve gedeelte van Drupal, in de sectie: Beheer » Configuratie » Systeem

Als het verzenden van berichten vanaf de site niet werkt, moet u controleren of de module voor mail via smtp is ingeschakeld. Om dit te controleren, ga naar de modules sectie in het administratieve gedeelte van de Drupal website: Beheer »Modules

Schakel de SMTP-module uit door het vakje naast de module uit te vinken en de instelling “Configuratie opslaan” op te slaan.

Het is mogelijk dat het versturen van berichten via SMTP op een andere manier wordt gerealiseerd. Om berichten via SMTP te kunnen versturen, moet PHPMailer op de site aanwezig zijn. PHPMailer-bestanden bevinden zich standaard in de map ./sites/all/modules/smtp/phpmailer.

Er zijn verschillende andere manieren om het verzenden van siteberichten via php mail en SMTP te implementeren. U vindt ze in de documentatie van het CMS

Alle berichten van Drupal-sites worden verzonden met behulp van Druapl's interne functie drupal_mail(). De meeste verzendende modules worden via deze functie geïmplementeerd. De instellingen staan ​​in het bestand ./includes/mail.inc

In het bijzonder zijn de volgende lijnen verantwoordelijk voor het verzenden van berichten:

drupal_mail($module, $key, $to, $taal, $params = array(), $from = NULL, $send = TRUE)

E-mail verzenden vanuit CMS Joomla 3

Standaard worden alle berichten van Joomla verzonden met php mail(), het e-mailadres van de afzender wordt opgegeven bij het installeren van Joomla.

Het is noodzakelijk dat de e-mail van de afzender in Joomla overeenkomt met de "E-mail van de beheerder" in het ISPmanager hosting controlepaneel.

In de toekomst kan de e-mail van de afzender worden gewijzigd in het administratieve gedeelte van Jommla in de sectie: Systeem » Algemene configuratie » Serverinstellingen » E-mailinstellingen

In het veld “Mailler” moet u “PHP Mail” of “Sendmail” selecteren, en ook in het veld “SMTP Authentication” selecteert u “Nee”.

In Joomla kunnen instellingen voor het verzenden van e-mail worden opgegeven in het configuratiebestand configuratie.php, die zich in de hoofdmap van de site bevindt.

Configuration.php bevat de volgende regels:

public $mailer = "mail";

public $mailfrom = "beheerder van uwdomein.com";

public $fromname = "J25-demo";

public $sendmail = "/usr/sbin/sendmail";

publiek $smtpauth = "0";

publiek $smtpuser = "";

publiek $smtppass = "";

public $smtphost = "localhost";

public $smtpsecure = "geen";

publiek $smtpport = "25";

$mailer: "mail" gebruikt de PHP-mailfunctie; "sendmail" gebruikt SMTP-mail op de server.

$mailfrom: Van-adres. Het e-mailadres dat Joomla gebruikt om e-mail vanaf de site te verzenden.

$sendmail: pad waar het Sendmail-programma zich bevindt. Wordt gebruikt als $mailer is geïnstalleerd in Sendmail.

$smtpauth: als de SMTP-server authenticatie vereist om e-mail te verzenden, stel deze dan in op "1". Anders "0". Wordt gebruikt als $mailer is geïnstalleerd in Sendmail.

$smtpuser: gebruikersnaam voor toegang tot de SMTP-server. Wordt gebruikt als $mailer is geïnstalleerd in Sendmail.

$smtppass: wachtwoord voor toegang tot de SMTP-server. Wordt gebruikt als $mailer is geïnstalleerd in Sendmail.

$smtphost: SMTP-host. SMTP-serveradres bij het verzenden van e-mail. Wordt gebruikt als $mailer is geïnstalleerd in Sendmail.

$smtpsecure: Selecteer het beveiligingsmodel dat uw SMTP-server gebruikt: SSL of TLS. Standaard uitgeschakeld. Wordt gebruikt als $mailer is geïnstalleerd in Sendmail.

$smtpport: SMTP-poort. De minst beveiligde servers gebruiken poort 25.

Joomla heeft veel modules, die elk hun eigen systeem kunnen gebruiken voor het verzenden van e-mail vanaf de site, onafhankelijk van de algemene instellingen van het Joomla CMS zelf. In dit opzicht is een situatie mogelijk wanneer het verzenden via php mail globaal is geconfigureerd, en in een specifieke module, die bijvoorbeeld verantwoordelijk is voor “Feedback”, via SMTP.

Mail versturen met CMS WordPress 4

Standaard worden alle berichten van WordPress verzonden met php mail(), het e-mailadres van de afzender wordt opgegeven bij het installeren van WordPress.

Het is noodzakelijk dat de e-mail van de afzender in WordPress overeenkomt met de “E-mail van de beheerder” in het ISPmanager hosting controlepaneel.

In de toekomst kan het e-mailadres van de afzender worden gewijzigd in het administratieve gedeelte van WordPress in de sectie: Instellingen »Algemeen

Als er geen berichten vanaf de site worden verzonden, moet u controleren of er een plug-in is voor het verzenden van brieven via SMTP, en zo ja, deze uitschakelen.

Ga naar de sectie: Plug-ins » Geïnstalleerde Plufins

Als er een plug-in bestaat voor het verzenden via SMTP, moet deze worden uitgeschakeld.

Soms kan er een fout optreden:

“Het bericht kon niet worden verzonden. Mogelijke reden: de server ondersteunt de functie mail() niet..."

Om dit op te lossen moet je het bestand op de website bewerken:

./wp-includes/pluggable.php

Zoek de regels in dit bestand:

// Instellen om PHP's mail() te gebruiken

$phpmailer->IsMail();

En vervangen door:

// Instellen om PHP's mail() te gebruiken

$phpmailer->IsSendmail();

Verschillende WordPress-modules kunnen zowel php mail() als SMTP gebruiken om e-mails te verzenden, ongeacht de algemene instellingen. Wat dat betreft is er een situatie mogelijk waarbij het versturen via php mail globaal is geconfigureerd, en in de module die bijvoorbeeld verantwoordelijk is voor “Feedback”, via SMTP.

Houd er rekening mee dat u voor informatie over aanvullende instellingen voor deze en andere CMS'en de CMS-documentatie raadpleegt.

De afgelopen zes maanden ben ik ijverig begonnen met het leren van PHP. Lang geleden heb ik voor mezelf een boek gedownload en in mijn vrije tijd gelezen. Ik heb precies nul kennis uit dit boek gehaald. Nu ben ik sinds een half jaar bezig met het maken van een website voor autoadvertenties, vrijwel in pure PHP.

Vandaag besloot ik een script te schrijven dat verantwoordelijk is voor het verzenden van e-mailberichten vanaf de site. Het blijkt dat dit in PHP heel eenvoudig gebeurt.

Hoe worden e-mails verzonden via PHP?

Ten eerste zou ik willen verduidelijken dat PHP op zichzelf geen brieven kan verzenden. PHP heeft een functie die werkt met mailservers.

De meeste moderne betaalde hostingdiensten, zelfs de goedkoopste, hebben zo'n server in hun pakket. Meestal dit Verzend mail. Het enige wat u hoeft te doen is een verzoek om verzending te verzenden en sendmail zal het doen.

Als alleen hostingproviders gratis websitepromotie zouden doen, zou het absoluut prachtig zijn.

PHP-code voor het verzenden van e-mails

Er is slechts één functie verantwoordelijk voor het verzenden van e-mail in PHP mail();, die de syntaxis heeft:

E-mail (waarheen te sturen, onderwerp van het bericht, bericht, aanvullende informatie);

De beste verklaring wordt beschouwd als een voorbeeld, dus om onnodig water te vermijden en alles meteen uit te leggen zoals het is, een voorbeeld:

$e-mail = " [e-mailadres beveiligd]"; $subject = "Onderwerp van de brief"; $message = "Gefeliciteerd, u heeft zojuist een brief ontvangen.\n Deze brief is verzonden met PHP"; $headers = "Van: adminwa.ru \r\n Inhoudstype: tekst/plain; charset=utf-8\r\n"; mail($email, $onderwerp, $bericht, $headers);

En nu een paar opmerkingen over het gegeven stukje code.

IN $ e-mail u moet het adres van de ontvanger van uw bericht opgeven, als er meerdere zijn, gescheiden door een komma. Houd er rekening mee dat iedereen die uw brief heeft ontvangen, alle ontvangers zal zien.

$onderwerp mag niet meer dan 255 tekens lang zijn. Dit is geen PHP-beperking, maar een e-mailstandaard.

Lijn breekt in $onderwerp En $ bericht uitgevoerd door een speciaal teken (expressie) – \n

IN $kopteksten u kunt aanvullende parameters beschrijven Van- van wie is de e-mail? Inhoudstype– letterformaat (u kunt dit opgeven tekst/gewoon– platte tekst of tekst/html– html-opmaak), tekenset– lettercodering en verschillende andere.

Alle lijnen binnen $kopteksten moet worden gescheiden door \r\n.

Dat zijn eigenlijk alle trucs. Er zijn natuurlijk een paar extra parameters, zoals een extra e-mailadres en andere, maar niet iedereen heeft ze nodig, en als ze nodig zijn, kun je deze informatie gemakkelijk op internet vinden.

bool mail(tekenreeks naar, tekenreeksonderwerp, tekenreeksbericht [, tekenreeks aanvullende_headers [, tekenreeks aanvullende_parameters]])

De volgende RFC's kunnen ook helpen: RFC 1896, RFC 2045, RFC 2046, RFC 2047, RFC 2048 en RFC 2049.

mail() geeft terug WAAR, als de post met succes is geaccepteerd voor bezorging, ONWAAR anders.

Belangrijk! Houd er rekening mee dat het succesvol accepteren voor bezorging niet betekent dat de post ook daadwerkelijk de beoogde bestemming zal bereiken.

Voorbeeld 1: E-mail verzenden.

mail(" [e-mailadres beveiligd]", "Mijn onderwerp", "Regel 1\nLijn 2\nLijn 3");

Als er een vierde stringargument wordt doorgegeven, wordt die string aan het einde van de header ingevoegd. Dit wordt meestal gebruikt om extra headers toe te voegen. Verschillende extra kopteksten worden gescheiden door regelteruglooptekens en nieuweregeltekens.

Opmerking: je bent verplicht \r\n te gebruiken om kopteksten te scheiden, hoewel sommige Unix-mailagenten afzonderlijke nieuwe regels kunnen verwerken (\n).

Parameter aanvullende_parameters kan worden gebruikt om aanvullende parameters door te geven aan een programma dat is geconfigureerd om te gebruiken bij het verzenden van e-mail door de configuratie sendmail_path in te stellen. Dit kan bijvoorbeeld worden gebruikt om het afzenderadres in te stellen bij gebruik van sendmail. Mogelijk moet u de gebruiker waaronder uw webserver draait toevoegen aan uw sendmail-configuratie om te voorkomen dat de "X-Warning header!" toe aan het bericht wanneer u de afzender met deze methode instelt.

Opmerking: deze vijfde parameter werd geïntroduceerd in PHP 4.0.5.

U kunt ook een eenvoudige tekenreeksconstructietechniek gebruiken om complexe e-mailberichten te maken.

"; /* Om HTML-mail te verzenden, kunt u de Content-type header instellen. */ $headers= "MIME-versie: 1.0\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; /* aanvullende headers */ $headers .= "Van: Verjaardagsherinnering \r\n"; $headers .= "Cc: [e-mailadres beveiligd]\r\n"; $headers .= "Bcc: [e-mailadres beveiligd]\r\n"; /* en nu verzonden vanuit */ mail($to, $subject, $message, $headers);

Opmerking: Zorg ervoor dat er geen nieuweregeltekens in staan naar of binnen onderwerp, anders wordt de e-mail mogelijk niet correct 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.

Geeft terug: WAAR of de brief succesvol is verzonden of ONWAAR als 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 waarbij er geen sprake is van grootschalige mailings.