Hvordan sende e-post ved hjelp av PHP mail()-funksjonen

โšก Smart oppsummering

PHP-post er den innebygde funksjonen som sender e-post direkte fra et PHP-skript ved hjelp av serverens SMTP-innstillinger. Denne gjennomgangen dekker mail()-syntaksen og -parameterne, konfigurering av SMTP i php.ini, rensing av brukerinput med filter_var, sending av sikker e-post og bruk av PHP.Mailer for pรฅlitelig levering.

  • ๐Ÿ“ง Hva mail() gjรธr: mail()-funksjonen sender en e-post fra et skript, og tar mottaker, emne, melding og valgfrie overskrifter.
  • ๐Ÿ“จ SMTP-transport: PHP-e-post er avhengig av SMTP, hvis vert, port og autentisering er angitt i php.ini-konfigurasjonsfilen.
  • ???? CC og BCC: Valgfrie overskrifter legger til mottakere av karbonkopi og blindkopi, med blindkopi skjult for de andre mottakerne.
  • ๐Ÿ›ก๏ธ Rens inndata: filter_var med FILTER_SANITIZE_EMAIL og FILTER_VALIDATE_EMAIL blokkerer headerinjeksjon fra kontaktskjemainndata.
  • ๐Ÿ”’ Sikre Mail: Kryptering av forbindelsen med SSL eller TLS beskytter meldingsinnholdet mot รฅ bli lest under overfรธring.
  • ๐Ÿงฐ Bruk PHPMailer: PHPMailer legger til SMTP-autentisering, vedlegg og HTML-e-post, noe som gjรธr den mer pรฅlitelig enn raw mail().
  • ๐Ÿค– AI Assist: AI-verktรธy kan konfigurere PHPMailer med SMTP og foreslรฅ lรธsninger som holder e-postene dine unna spam-mappen.

PHP Mail

Hva er PHP-post?

PHP-post er den innebygde PHP-funksjonen som brukes til รฅ sende e-poster fra PHP-skript.

E-postfunksjonen godtar fรธlgende parametere:

  • Epostadresse
  • Emne
  • Melding
  • CC- eller BCC-e-postadresser

Hvorfor og nรฅr du skal bruke PHP-e-post

E-postfunksjonen er nyttig i mange situasjoner:

  • Det er en kostnadseffektiv mรฅte รฅ varsle brukere om viktige hendelser pรฅ.
  • La brukere kontakte deg via e-post ved รฅ oppgi et kontaktskjema pรฅ nettstedet som sender det oppgitte innholdet pรฅ e-post.
  • Utviklere kan bruke den til รฅ motta systemfeilmeldinger via e-post.
  • Du kan bruke den til รฅ sende e-post til abonnentene pรฅ nyhetsbrevet.
  • Du kan bruke den til รฅ sende lenker for tilbakestilling av passord til brukere som har glemt passordene sine.
  • Du kan bruke den til รฅ sende aktiverings- og bekreftelseslenker pรฅ e-post. Dette er nyttig nรฅr du registrerer brukere og bekrefter e-postadressene deres.

Sender e-post med PHP

PHP-postfunksjonen har fรธlgende grunnleggende syntaks.

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

HER,

  • "$to_email_address" er e-postadressen til e-postmottakeren
  • "$subject" er e-postemnet
  • "$message" er meldingen som skal sendes.
  • ยซ[$headers]ยป er valgfritt; det kan brukes til รฅ inkludere informasjon som CC og BCC.
    • CC er forkortelsen for carbon copy. Det brukes nรฅr du vil sende en kopi til en interessert person, dvs. at en klage-e-post sendt til et selskap ogsรฅ kan sendes som CC til klagenemnda.
    • BCC er forkortelsen for blindkopi. Det ligner pรฅ CC, men e-postadressene som er inkludert i BCC-delen vises ikke til de andre mottakerne.

Enkelt Mail Transmission Protokoll (SMTP)

PHP-e-post bruker Simple Mail Transmission Protokoll (SMTP) for รฅ sende e-post.

Pรฅ en hosted server ville SMTP-innstillingene allerede vรฆre angitt.

SMTP-e-postinnstillingene kan konfigureres fra filen ยซphp.iniยป i PHP-installasjonsmappen.

For รฅ konfigurere SMTP-innstillinger pรฅ din lokale vert, forutsatt at du bruker XAMPP pรฅ Windows, finn filen ยซphp.iniยป i katalogen ยซC:\xampp\phpยป.

  • ร…pne den med Notisblokk eller et hvilket som helst tekstredigeringsprogram. Vi bruker Notisblokk i dette eksemplet. Klikk pรฅ Rediger-menyen.

Enkelt Mail Transmission Protokoll

  • Klikk pรฅ Finnโ€ฆ-menyen

Enkelt Mail Transmission Protokoll

  • Sรธk-dialogboksen vil vises

Enkelt Mail Transmission Protokoll

  • Klikk pรฅ Finn neste-knappen

Enkelt Mail Transmission Protokoll

Finn oppfรธringene under [postfunksjon]. Standardlinjene ser vanligvis slik ut:

  • ; SMTP = lokal vert
  • ; smtp_port = 25

Fjern semikolonene fรธr SMTP og smtp_port, og sett SMTP til din SMTP-server og porten til SMTP-porten din. Innstillingene dine skal se slik ut:

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

Merk: SMTP-innstillingene kan fรฅs fra webhotellleverandรธren din. Hvis serveren krever autentisering, legg til fรธlgende linjer:

  • auth_brukernavn = eksempel_brukernavn@example.com
  • auth_password = eksempel_passord

Lagre de nye endringene og start maskinen pรฅ nytt Apache server.

PHP Mail Eksempel

La oss nรฅ se pรฅ et eksempel som sender en enkel e-post.

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

Utgang:

Enkelt Mail Transmission Protokoll

Merk: Eksemplet ovenfor tar bare de fire obligatoriske parameterne. Du bรธr erstatte den fiktive e-postadressen ovenfor med en ekte e-postadresse.

Desinfisering av brukerinndata fra e-post

Eksemplet ovenfor bruker hardkodede verdier i kildekoden for e-postadressen og andre detaljer for enkelhets skyld.

La oss anta at du mรฅ opprette et kontaktskjema der brukerne fyller ut detaljene og deretter sender inn.

  • Brukere kan ved et uhell eller med vilje injisere kode i overskriftene, noe som kan fรธre til sending av spam-e-post.
  • For รฅ beskytte systemet ditt mot slike angrep, kan du opprette en egendefinert funksjon som renser og validerer verdiene fรธr e-posten sendes.

La oss lage en tilpasset funksjon som validerer og renser e-postadressen ved hjelp av den innebygde filter_var-funksjonen. Filter_var-funksjonen brukes til รฅ rense og validere brukerdata.

Den har fรธlgende grunnleggende syntaks.

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

HER,

  • "filter_var(...)" er validerings- og desinfiseringsfunksjonen
  • "$field" er verdien av feltet som skal filtreres.
  • ยซSANITERINGSTYPEยป er typen sanering som skal utfรธres pรฅ feltet, for eksempel:
    • FILTER_VALIDATE_EMAIL โ€“ returnerer sann for gyldige e-postadresser og usann for ugyldige e-postadresser.
    • FILTER_SANITIZE_EMAIL โ€“ fjerner ulovlige tegn fra e-postadresser, slik at en adresse med lรธse tegn reduseres til info@domene.com.
    • FILTER_SANITIZE_URL โ€“ fjerner ulovlige tegn fra URLs, og etterlater en ren adresse som https://www.example.com.
    • FILTER_SANITIZE_STRING โ€“ fjerner tagger fra strengverdier, slik at am bold blir am bold. Merk at dette filteret er utdatert i PHP 8.1; bruk htmlspecialchars() i stedet.

Koden nedenfor bruker en tilpasset funksjon for รฅ sende sikker e-post.

<?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";
}
?>

Utgang:

Desinfisering av brukerinndata fra e-post

Sikre Mail

E-poster kan bli fanget opp under overfรธring av utilsiktede mottakere.

Dette kan eksponere innholdet i e-posten for utilsiktede mottakere.

Sikker e-post lรธser dette problemet ved รฅ transmitsende e-poster over en kryptert forbindelse ved hjelp av SSL eller TLS, for eksempel SMTP over SSL pรฅ port 465 eller STARTTLS pรฅ port 587.

Kryptering forvrenger meldingen fรธr den sendes, slik at bare den tiltenkte mottakerens e-postserver kan lese den.

PHPMailer: Et bedre alternativ til mail()

For ekte applikasjoner bruker de fleste utviklere PHPMailer-biblioteket i stedet for raw mail()-funksjonen. PHPMailer autentiserer seg med en ekstern SMTP-server, noe som forbedrer leveringsevnen betraktelig, og det gjรธr vedlegg og HTML-e-post enkle.

Installer det med Composer, og send deretter e-post via en autentisert, kryptert SMTP-tilkobling 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 gir deg SMTP-autentisering, innebygd kryptering, stรธtte for vedlegg og tydeligere feilhรฅndtering, og det er derfor det er det anbefalte valget for produksjons-e-post.

Spรธrsmรฅl og svar

Den vanligste รฅrsaken er at ingen e-postserver er konfigurert pรฅ localhost. Angi riktige SMTP-verdier i php.ini, eller bruk PHP.Mailmed en autentisert SMTP-konto. Sjekk ogsรฅ serverfeilloggen og spam-mappen din.

Legg til overskrifter som setter MIME-versjon til 1.0 og innholdstype til tekst/html, og legg deretter til HTML-markering i meldingsteksten. PHPMailer hรฅndterer dette automatisk nรฅr du angir isHTML(true)-alternativet.

FILTER_SANITIZE_STRING er utdatert siden PHP 8.1. Bruk htmlspecialchars() for รฅ escape utdata for visning, eller en spesifikk validator som FILTER_VALIDATE_EMAIL, avhengig av om du renser eller sjekker verdien.

Ja. Gi AI-en din SMTP-vert, port og sikkerhetstype, sรฅ kan den generere den fulle PHP-filen.Mailoppsett med autentisering, en avsender, mottakere og feilhรฅndtering. Lagre legitimasjon i miljรธvariabler, ikke kode.

Ja. AI kan gi rรฅd om SPF-, DKIM- og DMARC-poster, bruke en autentisert SMTP-avsender, unngรฅ spam-utlรธserord og angi en gyldig Fra-adresse, og deretter hjelpe deg med รฅ teste leveringsevnen.

Oppsummer dette innlegget med: