Sådan sender du e-mail ved hjælp af PHP-mail()-funktionen

⚡ Smart opsummering

PHP mail er den indbyggede funktion, der sender e-mails direkte fra et PHP-script ved hjælp af serverens SMTP-indstillinger. Denne gennemgang dækker mail()-syntaksen og -parametrene, konfiguration af SMTP i php.ini, rensning af brugerinput med filter_var, afsendelse af sikker mail og brug af PHP.Mailer for pålidelig levering.

  • 📧 Hvad mail() gør: Funktionen mail() sender en e-mail fra et script og tager modtager, emne, besked og valgfrie headere.
  • 📨 SMTP-transport: PHP-mail er afhængig af SMTP, hvis vært, port og godkendelse er angivet i php.ini-konfigurationsfilen.
  • ???? CC og BCC: Valgfrie overskrifter tilføjer modtagere af carbonkopi og blindkopi, hvor BCC er skjult for de andre modtagere.
  • 🛡️ Rens input: filter_var med FILTER_SANITIZE_EMAIL og FILTER_VALIDATE_EMAIL blokerer header-indsprøjtning fra kontaktformularinput.
  • 🔒 Sikkert Mail: Kryptering af forbindelsen med SSL eller TLS beskytter beskedindholdet mod at blive læst under overførsel.
  • 🧰 Brug PHPMailare: PHPMailer tilføjer SMTP-godkendelse, vedhæftede filer og HTML-e-mail, hvilket gør den mere pålidelig end raw mail().
  • 🤖 AI Assist: AI-værktøjer kan konfigurere PHPMailer med SMTP og foreslå løsninger, der holder dine e-mails ude af spam-mappen.

PHP Mail

Hvad er PHP-mail?

PHP mail er den indbyggede PHP-funktion, der bruges til at sende e-mails fra PHP-scripts.

Mail-funktionen accepterer følgende parametre:

  • E-mail adresse
  • Emne
  • Besked
  • CC- eller BCC-e-mailadresser

Hvorfor og hvornår man skal bruge PHP-mail

Mailfunktionen er nyttig i mange situationer:

  • Det er en omkostningseffektiv måde at underrette brugerne om vigtige begivenheder.
  • Lad brugere kontakte dig via e-mail ved at angive en kontaktformular på webstedet, der sender det leverede indhold via e-mail.
  • Udviklere kan bruge den til at modtage systemfejl via e-mail.
  • Du kan bruge det til at sende e-mail til dine nyhedsbrevsabonnenter.
  • Du kan bruge den til at sende links til nulstilling af adgangskode til brugere, der har glemt deres adgangskoder.
  • Du kan bruge den til at sende aktiverings- og bekræftelseslinks via e-mail. Dette er nyttigt, når du registrerer brugere og verificerer deres e-mailadresser.

Sender mail ved hjælp af PHP

PHP-mailfunktionen har følgende grundlæggende syntaks.

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

HER,

  • "$to_email_address" er e-mail-adressen på mailmodtageren
  • "$subject" er e-mailens emne
  • "$message" er den besked, der skal sendes.
  • “[$headers]” er valgfri; den kan bruges til at inkludere oplysninger som CC og BCC.
    • CC er en forkortelse for carbon copy. Det bruges, når man vil sende en kopi til en interesseret person, dvs. en klage-e-mail sendt til en virksomhed kan også sendes som CC til klagenævnet.
    • BCC er en forkortelse for blind carbon copy. Det minder om CC, men e-mailadresserne i BCC-sektionen vises ikke til de andre modtagere.

Simpelt Mail Transmission Protokol (SMTP)

PHP-mail bruger Simple Mail Transmission Protokol (SMTP) til at sende post.

På en hosted server ville SMTP-indstillingerne allerede være angivet.

SMTP-mailindstillingerne kan konfigureres fra filen "php.ini" i PHP-installationsmappen.

For at konfigurere SMTP-indstillinger på din lokale vært, forudsat at du bruger XAMPP Windows, find filen “php.ini” i mappen “C:\xampp\php”.

  • Åbn den med Notesblok eller en hvilken som helst teksteditor. Vi bruger Notesblok i dette eksempel. Klik på menuen Rediger.

Simpelt Mail Transmission protokol

  • Klik på menuen Find…

Simpelt Mail Transmission protokol

  • Dialogboksen Find vises

Simpelt Mail Transmission protokol

  • Klik på knappen Find næste

Simpelt Mail Transmission protokol

Find posterne under [mail function]. Standardlinjerne ser normalt sådan ud:

  • ; SMTP = lokal vært
  • ; smtp_port = 25

Fjern semikolonerne før SMTP og smtp_port, og indstil SMTP til din SMTP-server og porten til din SMTP-port. Dine indstillinger bør se således ud:

  • SMTP = smtp.example.com
  • smtp_port = 25

Bemærk: SMTP-indstillingerne kan fås fra din webhostingudbyder. Hvis serveren kræver godkendelse, skal du tilføje følgende linjer:

  • auth_brugernavn = eksempel_brugernavn@eksempel.com
  • auth_password = eksempel_adgangskode

Gem de nye ændringer, og genstart Apache serveren.

PHP Mail Eksempel

Lad os nu se på et eksempel, der sender en simpel mail.

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

Simpelt Mail Transmission protokol

Bemærk: Ovenstående eksempel bruger kun de 4 obligatoriske parametre. Du bør erstatte ovenstående fiktive e-mailadresse med en rigtig e-mailadresse.

Rengøring af e-mailbrugeres input

Ovenstående eksempel bruger hårdkodede værdier i kildekoden til e-mailadressen og andre detaljer for nemheds skyld.

Lad os antage, at du skal oprette en kontaktformular, hvor brugerne udfylder oplysningerne og derefter sender den.

  • Brugere kan ved et uheld eller forsætligt indsætte kode i headerne, hvilket kan resultere i at sende spam-mails.
  • For at beskytte dit system mod sådanne angreb kan du oprette en brugerdefineret funktion, der renser og validerer værdierne, før mailen sendes.

Lad os oprette en brugerdefineret funktion, der validerer og renser e-mailadressen ved hjælp af den indbyggede filter_var-funktion. Filter_var-funktionen bruges til at rense og validere brugerinputdata.

Det har følgende grundlæggende syntaks.

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

HER,

  • "filter_var(...)" er validerings- og desinficeringsfunktionen
  • "$field" er værdien af ​​det felt, der skal filtreres.
  • "SANITISERINGSTYPE" er den type desinfektion, der skal udføres på marken, såsom:
    • FILTER_VALIDATE_EMAIL – returnerer sand for gyldige e-mailadresser og falsk for ugyldige e-mailadresser.
    • FILTER_SANITIZE_EMAIL – fjerner ulovlige tegn fra e-mailadresser, så en adresse med tilfældige tegn reduceres til info@domæne.com.
    • FILTER_SANITIZE_URL – fjerner ulovlige tegn fra URLs, og efterlader en ren adresse såsom https://www.example.com.
    • FILTER_SANITIZE_STRING – fjerner tags fra strengværdier, så am bold bliver am bold. Bemærk, at dette filter er udfaset i PHP 8.1; brug htmlspecialchars() i stedet.

Koden nedenfor bruger en brugerdefineret funktion til at sende sikker mail.

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

Rengøring af e-mailbrugeres input

Sikkert Mail

E-mails kan opsnappes under transmission af utilsigtede modtagere.

Dette kan afsløre indholdet af e-mailen for utilsigtede modtagere.

Sikker post løser dette problem ved at transmitSend e-mails over en krypteret forbindelse ved hjælp af SSL eller TLS, for eksempel SMTP over SSL på port 465 eller STARTTLS på port 587.

Kryptering forvrænger beskeden, før den sendes, så kun den tilsigtede modtagers mailserver kan læse den.

PHPMailer: Et bedre alternativ til mail()

Til rigtige applikationer bruger de fleste udviklere PHPMailer-biblioteket i stedet for raw mail()-funktionen. PHPMailer autentificerer sig med en ekstern SMTP-server, hvilket forbedrer leveringsevnen betydeligt, og det gør vedhæftede filer og HTML-e-mails enkle.

Installer det med Composer, og send derefter mail via en godkendt, krypteret SMTP-forbindelse som vist nedenfor.

<?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();
?>

Sammenlignet med mail(), PHPMailer giver dig SMTP-godkendelse, indbygget kryptering, understøttelse af vedhæftede filer og tydeligere fejlhåndtering, hvilket er grunden til, at det er det anbefalede valg til produktions-e-mail.

Ofte Stillede Spørgsmål

Den mest almindelige årsag er ingen konfigureret mailserver på localhost. Indstil korrekte SMTP-værdier i php.ini, eller brug PHPMailmed en godkendt SMTP-konto. Tjek også serverfejlloggen og din spammappe.

Tilføj headere, der sætter MIME-version til 1.0 og indholdstype til text/html, og indsæt derefter HTML-markup i beskedens brødtekst. PHPMailer håndterer dette automatisk, når du indstiller dens isHTML(true)-indstilling.

FILTER_SANITIZE_STRING er udfaset siden PHP 8.1. Brug htmlspecialchars() til at escape output til visning, eller en specifik validator såsom FILTER_VALIDATE_EMAIL, afhængigt af om du renser eller kontrollerer værdien.

Ja. Giv AI din SMTP-vært, port og sikkerhedstype, så kan den generere den fulde PHPMailopsætning med godkendelse, en afsender, modtagere og fejlhåndtering. Gem legitimationsoplysninger i miljøvariabler, ikke kode.

Ja. AI kan rådgive om SPF-, DKIM- og DMARC-poster, bruge en godkendt SMTP-afsender, undgå spam-triggerord og indstille en gyldig Fra-adresse og derefter hjælpe dig med at teste leveringsevnen.

Opsummer dette indlæg med: