E-mail - PHP

Lær at sende e-mail beskeder med PHP mail() funktion

Introduktion

Med PHP's mail() funktion kan vi sende emails.

Et oplagt sted at bruge denne funktion er ved at lave en kontaktformular på din hjemmeside hvor brugerne kan sende en besked til dig.

E-mails kan også sendes automatisk hver gang en bruger uploader en fil eller når der sker en bestemt fejl på din hjemmeside.

Mail i Windows

Da mail() funktionen fungere anderledes på Windows systemer og UNIX systemer så skal vi sætte nogle indstillinger før vi bruger mail() hvis vi bruger Windows.

Det handler om e-mail server adressen (SMTP serveren), email afsender adressen og eventuelt et port nummer til SMTP serveren.

Jeg har webhotel hos one.com og der bruges SMTP serveren mailout.one.com.

Hvis du ikke kender SMTP server adressen og porten så spørg din webhotel udbyder (der hvor du har din hjemmeside).

Simpelt e-mail eksempel

Her er et simpelt eksempel på kode der sender en e-mail fra PHP med mail() funktionen.

Komplet e-mail eksempel med formular

For at give dine brugere mulighed for at sende en e-mail til dig fra din hjemmeside kan du bruge følgende kode.

Hvis emailen ikke blev sendt får brugeren besked på dette og samtidig vises den besked som brugeren skrev så brugeren har mulighed for at kopiere teksten og kontakte dig ved at sende at skrive direkte til din email adresse uden at bruge hjemmesiden.



Resultatet ovenfor er skabt af følgende kode

Undgå spam

Når man laver en kontaktformular på sin hjemmeside er der chance for at der med tiden vil begynde at dukke spam e-mail op i din indbakke.
Spam kan være en computer som er sat til at bruge din formular automatisk og ind imellem sende beskeder.

Det gode ved en HTML formular der bruger PHP mail() funktionen er at vi behøver ikke skrive vores e-mail-adresse i HTML koden. E-mail-adressen skriver vi kun i PHP koden og den har spam computerne ikke adgang til så de kan kun spamme dig ved at bruge formularen.



Her er en metode til at undgå automatisk afsendt spam.

Tilføj et ekstra <input> tag i din formular og skjul det med CSS.
Ved også at tilføje et <label> tag kan man se en beskrivelse om at man ikke skal udfylde feltet i tilfælde af browseren ikke bruger CSS koden.


Eller måske style="visibility: hidden; height: 0; width: 0;".

Når <input> tagget er skjult med CSS vil det være usynligt for en bruger som dermed ikke har mulighed for at indtaste noget i feltet.
Men <input> tagget vil formodentligt blive udfyldt af en spam computer der automatisk udfylde feltet.

I PHP tester vi så om det skjulte <input> felt er udfyldt.
Hvis det er udfyldt så er der formodentligt tale om spam og vi kan undlade at sende e-mailen.

Webhotel med begrænsninger

På mit webhotel hos one.com er der en begrænsning så man maksimalt kan sende 20 emails per dag med mail() funktionen hvis man bruger en ekstern email adresse.
Sender man mere end 20 emails per dag vil mail() returner false og ikke sende e-mailen.

Derfor bruger jeg en intern email adresse som er en adresse der har samme domænenavn som hjemmesiden.
Altså hvis hjemmesiden hedder http://example.com så vil en intern email adresse være user@example.com.

Hvis man bruger en ekstern email adresse som user@example.com så kan man altså kun sende 20 emails per dag.

Hvis man hellere vil modtage sine emails i en ekstern adresse som user@example.com så kan det løses ved at bruge en intern adresse til mail() funktionen også indstille sin e-mail konto til at viderestille e-mails til den eksterne email adresse.

E-mail-adressen kan viderestilles hos webhotel udbyderen.

Jeg ved ikke hvor udbredt denne begrænsning er men hvis du bruger en ekstern email adresse og oplever problemer med at sende emails selvom koden er rigtig så kunne det være på grund af denne begrænsning fra webhotellets side.

Det er formodentligt lavet for at begrænse spam.

Hvis tegn som æøå ikke vises korrekt

Vises tegn som æøå forkert i de e-mails du sender så er der muligvis fordi den HTML side hvor formularen udfyldes på ikke bruger samme encoding som mail() funktionen.

Sørg for at charset bliver sat til det samme begge steder som her.


Mail server

På Windows kan man bruge hMailServer til at teste ens PHP e-mail kode lokalt selvom det kan være svært at opsætte men jeg har da fået det til at lykkedes.

Skriv din kommentar

Spørg mig om hvad som helst
Du kan også skrive direkte til mig på
Stem
Søg
Language

Select English to navigate the website in English. Things like the navigation menu and contact form will be in English, but the main content on each page will not be translated.