Het lukt me maar niet om de mail() functie van php te laten werken. De website waar ik nu aan werk draait lokaal op xampp. Voor die website ben ik een login systeem aan het bouwen en wil een activeringsmail laten versturen via de website. Dat laatste lukt dus niet.

Kan iemand me vertellen wat ik moet doen om het te laten werken?

Martijn
Allereerst is het misschien wel handig om te weten waarom dit niet werkt. De reden is simpel: het enige wat de mail() functie van PHP doet is een verzoek doorsturen aan een proces dat kan mailen. Dit is doorgaans een mailserver. Op desktop computers en laptops zijn zelden tot nooit mailservers actief. Vergelijk het met het op de post doen van een brief (het aanroepen van mail()) terwijl de brievenbus nooit geleegd wordt (mailserver die het verder afhandelen en doorsturen faciliteert). Oftewel: PHP mailt zelf niets / kan het mailen niet zelf afhandelen. PHP geeft de mail door aan een proces wat dit wel kan.

Je kunt dit o.a. oplossen door:
1. de SMTP-server van XAMPP in te stellen op die van jouw ISP
2. te communiceren met een andere mailserver zoals die van GMail, waarbij je bijvoorbeeld gebruik maakt van een library als PHPMailer

Hierbij lijkt het mij wel heel verstandig om een soort van test modus in te programmeren, zodat bijvoorbeeld alle mail naar een test e-mailadres gaat. Het komt namelijk geregeld voor dat mensen een snapshot van een live database terughalen en dan een mailtest uitvoeren waarbij bestaande e-mailadressen van klanten en zakelijke contacten per ongeluk worden gebruikt... Oeps. Dat staat nogal onprofessioneel, dus zorg dat is voorzien in zo'n test modus in het ontwerp van je mailfunctionaliteit.

Programmeer hiertoe bijvoorbeeld een wrapper(functie) die intern bepaalt -bijvoorbeeld op grond van configuratievariabelen- wat er precies met de mail moet gebeuren. Zorg vervolgens dat alle mail-aanroepen via deze wrapper plaatsvinden, zodat al het mailverkeer vanuit je applicatie door hetzelfde poortje gaat.
De eerste ingeving bij dit het verhaal: staan poort 25 & 26 open? Dit omdat er iets van een xampp staat, is een niet - standaard hosting opzet. Sommige providers hebben/houden deez poorten standaard gesloten wegens spam.
Waarom zou je poort 26 open zetten? Die poort wordt niet voor mail gebruikt. Maar zelfs dan nog, om mail te versturen hoef je zelf niets open te zetten. Afhankelijk van je ISP is 25 naar buiten gesloten though.
Ben van Velzen op 29/10/2018 21:33:35

Waarom zou je poort 26 open zetten? Die poort wordt niet voor mail gebruikt. Maar zelfs dan nog, om mail te versturen hoef je zelf niets open te zetten. Afhankelijk van je ISP is 25 naar buiten gesloten though.


Poort 25 is standaard verzenden & poort 26 ontvangen van mail onder het smtp-protocol, als 25 geblokkeerd is heeft het geen nut om op poort 26 op een reactie van voorafgaande te wachten, toch?
Waar haal je het vandaan? Er is de MTA poort, dit is 25, bedoeld voor verzenden EN ontvangen tussen verschillende MTA's. Er is een submission poort die bedoeld is om mail naartoe te gooien. Dat is poort 587. Geen andere poorten, nergens.
Oke, ik weet nu wat meer. Mercury mailserver heb ik vervangen door hMailServer. Ik heb in hMailServer een diagnostics uitgevoerd en hiervan heb ik een screenprint van gemaakt;

https://drive.google.com/open?id=1jy4M6Be7HUxjhYpgE55qpbY3bdz0BocN

Er is een probleem met de MX record volgens de diagnostics.

Ik heb hier nog niet zo veel kaas van gegeten maar kan het zijn dat ik die MX record mis en daardoor die mail () functie niet werkt?

Martijn
Uhh, je kunt niet zomaar een eigen postkantoor (mailserver) beginnen. En zelfs al doe je dat op deze manier, dan moet deze in verbinding staan met andere postkantoren, anders kun je alleen maar lokaal mail naar jezelf sturen. Want niemand anders kent (noch vertrouwt) jouw persoonlijke postkantoor.

Het lijkt mij een stuk makkelijker dat je -als je lokaal een XAMPP servertje hebt draaien- tot op zekere hoogte het een en ander simuleert, waarbij je gebruik maakt van bestaande (online) mailservers. Dit staat ook het dichtste bij de praktijk, omdat je daadwerkelijk via het internet mail verstuurt.

Houd het gewoon simpel. De simpelste manier is gewoon de SMTP-server van je provider instellen. Raadpleeg een FAQ van je provider hoe je deze voor een mailprogramma in zou moeten stellen. Dit doe je dan in je XAMPP configuratie. Herstarten. Klaar. Simpel.

EDIT: ik denk ook niet dat het uitmaakt dat de MX-records niet werken, als je dit toch alleen maar lokaal gebruikt. Kijk anders eens hoe je die mailserver enkel voor lokaal gebruik instelt. Al lijkt mij dat nog steeds een hoop extra werk met weinig extra meerwaarde.
Dat is ook de bedoeling, mail naar me zelf sturen :-) en puur om die account die is aangemaakt te kunnen activeren en andere mail activiteiten. Het heeft namelijk niet zo veel zin om een mail te versturen via internet als ik toch alleen de website lokaal heb draaien en hier ook lokaal mail kan ontvangen.
Maar het is wel natuurgetrouwer (gaat uiteindelijk toch over het internet), eenvoudiger (geen extra applicaties nodig) en geeft mogelijk ook extra informatie qua mailopbouw (spamindex) aan de ontvangende kant.
Ik zou gaan voor optie 2 van Thomas. Hier vindt je de bestanden. https://github.com/PHPMailer/PHPMailer en Als je composer gebruikt kun je het gewoon installeren met composer require phpmailer/phpmailer

Gebruik al jaren de smtp server van mijn internetprovider. Werkt als een trein.

Reageren