Ik heb een klein probleempje met het goed en uniform versturen van e-mails in PHP. Wanneer ik alles als plain/text verstuur komt het overal aan maar verschilt de whitespace per server, wanneer ik als HTML verstuur komt de e-mail niet op alle adressen aan en worden UTF of ISO tekens niet goed getoond in het onderwerp.
Ik ben wat aan het spelen gegaan, dus de code is wellicht niet helemaal zoals het hoort maar het geeft een beetje een impressie waar ik mee bezig ben.
De variabelen die verstuurd worden worden bij een HTML e-mail zoals hieronder 'gefilterd'. Het doel is om schadelijke tekens als quote en single quotes om te zetten. Gezien htmlentities slashes toevoegd worden deze weer weggehaald (nutteloos waarschijnlijk) en als laatste wordt nl2br gebruikt omdat htmlentities volgens mij de whitespace (behalve spaties) verwijderd.
De headers zien er op dit moment zoals hieronder uit en spreken denk ik voor zich. Ik heb UTF-8 ipv iso overigens geprobeerd maar dan wordt er niets omgezet.
De mailfunctie ziet er als volgt uit:
Een hoop vragen..
- Kan het zijn dat HTML e-mails eerder geweigerd worden of in een spamfilter belanden?
- Waarom wordt in het onderwerp niet de goede tekens getoond maar wel in de content? Een onderwerp ziet er bijvoorbeeld zo uit: " Test '
- Is het beter om plain/text te gebruiken wanneer je eigenlijk geen HTML code in de mail zelf gebruikt?
- Is er een manier om whitespace, zoals ingevoerd, bij plain text altijd hetzelfde te houden onafhankelijk van server en/of ontvanger?
- Is bovenstaande een goede manier om schadelijke tekens als quotes te filteren? Of zou een preg_replace beter zijn? Zo ja welke tekens zou ik dan moeten omzetten?
Het gaat niet om een specifiek script maar het zijn wat vragen waar ik niet echt of juist tegenstrijdige antwoorden op kan vinden.
Ik ben wat aan het spelen gegaan, dus de code is wellicht niet helemaal zoals het hoort maar het geeft een beetje een impressie waar ik mee bezig ben.
De variabelen die verstuurd worden worden bij een HTML e-mail zoals hieronder 'gefilterd'. Het doel is om schadelijke tekens als quote en single quotes om te zetten. Gezien htmlentities slashes toevoegd worden deze weer weggehaald (nutteloos waarschijnlijk) en als laatste wordt nl2br gebruikt omdat htmlentities volgens mij de whitespace (behalve spaties) verwijderd.
PHP:
1
2
| $onderwerp = nl2br(stripslashes(htmlentities($_POST['onderwerp'], ENT_QUOTES, 'iso-8859-1'))); $inhoud = nl2br(stripslashes(htmlentities($_POST['inhoud'], ENT_QUOTES, 'iso-8859-1'))); |
De headers zien er op dit moment zoals hieronder uit en spreken denk ik voor zich. Ik heb UTF-8 ipv iso overigens geprobeerd maar dan wordt er niets omgezet.
PHP:
1
2
3
| $headers = "From: verzender@voorbeeld.nl \r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; |
De mailfunctie ziet er als volgt uit:
PHP:
1
| mail($emailadres, $onderwerpc, $inhoudc, $headers); |
Een hoop vragen..
- Kan het zijn dat HTML e-mails eerder geweigerd worden of in een spamfilter belanden?
- Waarom wordt in het onderwerp niet de goede tekens getoond maar wel in de content? Een onderwerp ziet er bijvoorbeeld zo uit: " Test '
- Is het beter om plain/text te gebruiken wanneer je eigenlijk geen HTML code in de mail zelf gebruikt?
- Is er een manier om whitespace, zoals ingevoerd, bij plain text altijd hetzelfde te houden onafhankelijk van server en/of ontvanger?
- Is bovenstaande een goede manier om schadelijke tekens als quotes te filteren? Of zou een preg_replace beter zijn? Zo ja welke tekens zou ik dan moeten omzetten?
Het gaat niet om een specifiek script maar het zijn wat vragen waar ik niet echt of juist tegenstrijdige antwoorden op kan vinden.