Hoe u e-mail verzendt met behulp van de PHP mail()-functie

โšก Slimme samenvatting

PHP mail is de ingebouwde functie waarmee je rechtstreeks vanuit een PHP-script e-mails kunt verzenden via de SMTP-instellingen van de server. Deze handleiding behandelt de syntaxis en parameters van mail(), het configureren van SMTP in php.ini, het valideren van gebruikersinvoer met filter_var, het verzenden van beveiligde e-mail en het gebruik van PHP.Mailer voor betrouwbare levering.

  • ???? Wat mail() doet: De functie mail() verzendt een e-mail vanuit een script, waarbij de ontvanger, het onderwerp, het bericht en optionele headers worden gebruikt.
  • ๐Ÿ“จ SMTP-transport: PHP-mail maakt gebruik van SMTP, waarvan de host, poort en authenticatie worden ingesteld in het configuratiebestand php.ini.
  • ๐Ÿ“‹ CC en BCC: Optionele headers voegen ontvangers voor de carbon copy en blind carbon copy toe, waarbij de BCC voor de andere ontvangers verborgen blijft.
  • ๐Ÿ›ก๏ธ Invoer opschonen: filter_var in combinatie met FILTER_SANITIZE_EMAIL en FILTER_VALIDATE_EMAIL voorkomt het injecteren van headers vanuit invoervelden in contactformulieren.
  • ๐Ÿ”’ Beveilig Mail: Het versleutelen van de verbinding met SSL of TLS beschermt de inhoud van berichten tegen onderschepping tijdens de overdracht.
  • ๐Ÿงฐ Gebruik PHPMailer: PHPMailer voegt SMTP-authenticatie, bijlagen en HTML-e-mail toe, waardoor het betrouwbaarder is dan raw mail().
  • ๐Ÿค– AI-assistentie: AI-tools kunnen PHP configureren.Mailmet SMTP en suggesties voor oplossingen om te voorkomen dat uw e-mails in de spammap terechtkomen.

PHP Mail

Wat is PHP-mail?

PHP mail is de ingebouwde PHP-functie die wordt gebruikt om e-mails vanuit PHP-scripts te verzenden.

De mailfunctie accepteert de volgende parameters:

  • E-mailadres
  • Onderwerp
  • Typ hier uw vraag of bericht
  • CC- of BCC-e-mailadressen

Waarom en wanneer PHP-mail te gebruiken?

De mailfunctie is in veel situaties handig:

  • Het is een kosteneffectieve manier om gebruikers op de hoogte te stellen van belangrijke gebeurtenissen.
  • Geef gebruikers de mogelijkheid om via e-mail contact met u op te nemen door een contactformulier op de website te plaatsen waarmee de verstrekte inhoud per e-mail wordt verzonden.
  • Ontwikkelaars kunnen het gebruiken om systeemfouten per e-mail te ontvangen.
  • U kunt het gebruiken om e-mails te sturen naar uw nieuwsbriefabonnees.
  • Je kunt het gebruiken om links voor het opnieuw instellen van wachtwoorden te sturen naar gebruikers die hun wachtwoord vergeten zijn.
  • Je kunt het gebruiken om activerings- en bevestigingslinks via e-mail te versturen. Dit is handig bij het registreren van gebruikers en het verifiรซren van hun e-mailadressen.

E-mail verzenden met PHP

De PHP-mailfunctie heeft de volgende basissyntaxis.

<?php
mail($to_email_address,$subject,$message,[$headers],[$parameters]);
?>

HIER,

  • โ€œ$to_email_addressโ€ is het e-mailadres van de ontvanger van de e-mail
  • โ€œ$subjectโ€ is het e-mailonderwerp
  • โ€œ$messageโ€ is het bericht dat moet worden verzonden.
  • โ€œ[$headers]โ€ is optioneel; het kan worden gebruikt om informatie zoals CC en BCC toe te voegen.
    • CC is de afkorting voor carbon copy (kopie). Het wordt gebruikt wanneer je een kopie wilt sturen naar een belanghebbende, bijvoorbeeld een e-mail met een klacht die naar een bedrijf wordt gestuurd, kan ook als CC naar de klachtencommissie worden verzonden.
    • BCC is de afkorting voor blind carbon copy (blinde kopie). Het is vergelijkbaar met CC, maar de e-mailadressen in het BCC-veld worden niet aan de andere ontvangers getoond.

Eenvoudig Mail Transmission Protocol (SMTP)

PHP-mail gebruikt Simple. Mail Transmission Protocol (SMTP) om e-mail te verzenden.

Op een gehoste server zijn de SMTP-instellingen al geconfigureerd.

De SMTP-mailinstellingen kunnen worden geconfigureerd via het bestand "php.ini" in de PHP-installatiemap.

Om de SMTP-instellingen op uw localhost te configureren, ervan uitgaande dat u XAMPP gebruikt op WindowsZoek het bestand โ€œphp.iniโ€ in de map โ€œC:\xampp\phpโ€.

  • Open het bestand met Kladblok of een andere teksteditor. In dit voorbeeld gebruiken we Kladblok. Klik op het menu 'Bewerken'.

Eenvoudig Mail Transmission Protocol

  • Klik op het menu 'Zoekenโ€ฆ'

Eenvoudig Mail Transmission Protocol

  • Het dialoogvenster 'Zoeken' verschijnt.

Eenvoudig Mail Transmission Protocol

  • Klik op de knop 'Volgende zoeken'.

Eenvoudig Mail Transmission Protocol

Zoek de vermeldingen onder [mailfunctie]. De standaardregels zien er meestal als volgt uit:

  • ; SMTP = localhost
  • ; smtp_poort = 25

Verwijder de puntkomma's voor SMTP en smtp_port en stel SMTP in op uw SMTP-server en de poort naar uw SMTP-poort. Uw instellingen zouden er als volgt uit moeten zien:

  • SMTP = smtp.voorbeeld.com
  • smtp_poort = 25

Let op: de SMTP-instellingen kunt u opvragen bij uw webhostingprovider. Als de server authenticatie vereist, voeg dan de volgende regels toe:

  • auth_gebruikersnaam = voorbeeld_gebruikersnaam@voorbeeld.com
  • auth_password = voorbeeld_wachtwoord

Sla de nieuwe wijzigingen op en herstart het systeem. apache server.

PHP Mail Voorbeeld

Laten we nu eens kijken naar een voorbeeld waarbij een eenvoudige e-mail wordt verzonden.

<?php
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
mail($to_email,$subject,$message,$headers);
?>

Output:

Eenvoudig Mail Transmission Protocol

Let op: het bovenstaande voorbeeld gebruikt alleen de 4 verplichte parameters. U dient het fictieve e-mailadres te vervangen door een echt e-mailadres.

E-mailgebruikersinvoer opschonen

In het bovenstaande voorbeeld worden voor het gemak hard gecodeerde waarden in de broncode gebruikt voor het e-mailadres en andere details.

Stel dat u een contactformulier moet maken waar gebruikers hun gegevens invullen en het vervolgens verzenden.

  • Gebruikers kunnen per ongeluk of opzettelijk code in de headers injecteren, wat kan leiden tot het versturen van spammails.
  • Om uw systeem tegen dergelijke aanvallen te beschermen, kunt u een aangepaste functie maken die de waarden opschoont en valideert voordat de e-mail wordt verzonden.

Laten we een aangepaste functie maken die het e-mailadres valideert en opschoont met behulp van de ingebouwde functie `filter_var`. De functie `filter_var` wordt gebruikt om gebruikersinvoer te valideren en op te schonen.

De basissyntaxis is als volgt.

<?php
filter_var($field, SANITIZATION_TYPE);
?>

HIER,

  • โ€œfilter_var(โ€ฆ)โ€ is de validatie- en opschoningsfunctie
  • โ€œ$fieldโ€ is de waarde van het veld dat moet worden gefilterd.
  • โ€œSANITIZATION_TYPEโ€ is het type ontsmetting dat op het veld moet worden uitgevoerd, bijvoorbeeld:
    • FILTER_VALIDATIE_EMAIL โ€“ retourneert true voor geldige e-mailadressen en false voor ongeldige e-mailadressen.
    • E-MAIL_FILTER_SANITIZE โ€“ verwijdert ongeldige tekens uit e-mailadressen, waardoor een adres met ongewenste tekens wordt teruggebracht tot info@domein.com.
    • FILTER_SANITIZE_URL โ€“ verwijdert ongeldige tekens uit URLs, waardoor een schoon adres overblijft zoals https://www.example.com.
    • FILTER_SANITIZE_STRING โ€“ verwijdert tags uit tekenreekswaarden, dus 'am bold' wordt 'am bold'. Let op: dit filter is verouderd in PHP 8.1; gebruik in plaats daarvan htmlspecialchars().

De onderstaande code gebruikt een aangepaste functie om beveiligde e-mail te verzenden.

<?php
function sanitize_my_email($field) {
$field = filter_var($field, FILTER_SANITIZE_EMAIL);
if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
return true;
} else {
return false;
}
}
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
// check if the email address is invalid
$secure_check = sanitize_my_email($to_email);
if ($secure_check == false) {
echo "Invalid input";
} else { // send email
mail($to_email, $subject, $message, $headers);
echo "This email is sent using PHP Mail";
}
?>

Output:

E-mailgebruikersinvoer opschonen

Beveilig Mail

E-mails kunnen tijdens de verzending worden onderschept door onbedoelde ontvangers.

Hierdoor kan de inhoud van de e-mail bij onbedoelde ontvangers terechtkomen.

Beveiligde e-mail lost dit probleem op door transmitHet versturen van e-mails via een versleutelde verbinding met behulp van SSL of TLS, bijvoorbeeld SMTP via SSL op poort 465 of STARTTLS op poort 587.

Versleuteling codeert het bericht voordat het wordt verzonden, zodat alleen de mailserver van de beoogde ontvanger het kan lezen.

PHPMailer: Een beter alternatief voor mail()

Voor daadwerkelijke toepassingen gebruiken de meeste ontwikkelaars PHP.MailGebruik de `er`-bibliotheek in plaats van de `mail()`-functie. PHPMailDe e-mailserver maakt gebruik van een externe SMTP-server, wat de leverbaarheid aanzienlijk verbetert, en vereenvoudigt het verzenden van bijlagen en HTML-e-mails.

Installeer het met Composer en verstuur vervolgens e-mail via een geauthenticeerde, versleutelde SMTP-verbinding zoals hieronder weergegeven.

<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';

$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->Username = 'user@example.com';
$mail->Password = 'secret';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

$mail->setFrom('noreply@example.com', 'My App');
$mail->addAddress('name@example.com');
$mail->Subject = 'Testing PHPMailer';
$mail->Body = 'This email is sent using PHPMailer over SMTP';
$mail->send();
?>

Vergeleken met mail(), PHPMailER biedt SMTP-authenticatie, ingebouwde versleuteling, ondersteuning voor bijlagen en een duidelijkere foutafhandeling, waardoor het de aanbevolen keuze is voor e-mail in productieomgevingen.

Veelgestelde vragen

De meest voorkomende oorzaak is dat er geen mailserver is geconfigureerd op localhost. Stel de juiste SMTP-waarden in php.ini in of gebruik PHP.MailGebruik een geauthenticeerd SMTP-account. Controleer ook het serverfoutlogboek en uw spammap.

Voeg headers toe die MIME-Version instellen op 1.0 en Content-Type op text/html, en plaats vervolgens HTML-opmaak in de berichttekst. PHPMailer handelt dit automatisch af wanneer je de optie isHTML(true) instelt.

FILTER_SANITIZE_STRING is verouderd sinds PHP 8.1. Gebruik htmlspecialchars() om uitvoer te escapen voor weergave, of een specifieke validator zoals FILTER_VALIDATE_EMAIL, afhankelijk van of u de waarde wilt opschonen of controleren.

Ja. Geef AI je SMTP-host, poort en beveiligingstype, en het kan de volledige PHP-code genereren.MailEen configuratie met authenticatie, een afzender, ontvangers en foutafhandeling. Sla de inloggegevens op in omgevingsvariabelen, niet in de code.

Ja. AI kan adviseren over SPF-, DKIM- en DMARC-records, het gebruik van een geauthenticeerde SMTP-afzender, het vermijden van spam-triggerwoorden en het instellen van een geldig 'Van'-adres, en vervolgens helpen bij het testen van de leverbaarheid.

Vat dit bericht samen met: