ik heb een webformulier gemaakt maar die kan niet verzonden worden naar gmail maar wel naar de webmail van de bijbehorende website. Heeft dit te maken met beveiliging?
if (mail("[email protected]", "Onderwerp", "Test berichtje")) {
echo '<p>Het e-mailbericht is verzonden.</p>';
} else {
echo '<p>Het e-mailbericht kon niet worden verzonden.</p>';
}
"This mail server requires authentication when attempting to send to a non-local e-mail address."
Blijkbaar staat je server zo ingesteld dat de mail() functie geen e-mails naar een e-mailadres buiten de server mag sturen, maar alleen naar e-mailadressen van domeinen op diezelfde server. Je zult dus ergens moeten aangeven dat de server dat wel mag (tenzij dit is geblokkeerd door je hoster).
tl;dr mail() schiet mogelijk op vele fronten tekort als je veel/vaak mailt. Het is dan waarschijnlijk beter om een pakket als phpMailer te gebruiken, te meer omdat dit ook een heleboel zorgen uit handen neemt.
Ozzie PHP op 21/06/2020 16:34:45
Je zult dus ergens moeten aangeven dat de server dat wel mag (tenzij dit is geblokkeerd door je hoster).
Dit is wellicht een optie (whitelist je "localhost"), maar als dat dus niet kan is het misschien handiger om een pakket als phpMailer te gebruiken om mail te versturen. Hier zitten namelijk authenticatiemogelijkheden ingebouwd.
Mocht je PHP-functionaliteit niet goed dichtgetimmerd zijn en je je van mail() bedient met bijbehorende whitelist-oplossing, dan zou jouw site misbruikt kunnen worden voor spam. In dat opzicht is phpMailer "veiliger", omdat het dingen controleert, en je ook assisteert bij het bouwen van (complexere MIME-)mail.
phpMailer is waarschijnlijk ook een beter alternatief als je van plan bent om (relatief) veel mail te versturen. phpMailer kan namelijk rechtstreeks met de mailserver communiceren. Dit in tegenstelling tot mail(), die elke keer een verbinding opbouwt, en na het afleveren van het mailbericht weer "ophangt". Je kunt je voorstellen dat als je honderden mailtjes eruitstuurt in luttele seconden dat er dan misschien iets te hard gehamerd wordt op de mailserver ingeval je mail() gebruikt.
Ik lees dat de topicstarter een webserver huurt, ik ga er even vanuit dat hij een VPS bedoelt.
Dan lijkt me dat hij ook zelf vrijheid moet hebben in het mailen. Ik denk zelf aan een foute mailinstelling, en dat de systeembeheerder het moet oplossen.
phpMailer kan ik zeker aanbevelen voor in de praktijk, vooral omdat deze modulair is, en om te bouwen is naar de settings voor Gmail, SMTP of de standaard mailfunctie. En uiteraard ook omdat deze de juiste headers gebruikt.
Maar een simpele mail() zou ook moeten werken vind ik, omdat mail() een doorvoer is naar het standaard (postfix?) mail-programma op de server. En die ook behoort ook fatsoenlijk te mailen.
Mja, dat is de implementatie van het eerdere voorstel, maar misschien is het interessant om te weten wat de reden is voor deze configuratie, er vanuitgaande dat het geen foute instelling betreft.
Het zou zomaar een voorgeconfigureerde versie (middels een image) van Plesk kunnen zijn, waarbij de hostingboer heeft besloten om de mail (uit veiligheidsoverwegingen) dicht te gooien.
Of misschien is dat wel de default op deze hosting-vorm? Wordt er gebruik gemaakt van shared hosting? (Zou mogelijk ook verklaren waarom https niet werkt?)
Het zou ook nog kunnen dat, als er geen afzendadres is ingesteld via "de juiste headers" (zie hierboven), dat het e-mailbericht als "relay" wordt beschouwd, en dat wordt zonder authenticatie normaliter geweigerd omdat dit anders misbruikt kan worden voor spam (zie ook link hieronder).
Ook stond mij iets bij dat sommige headers met e-mailadressen in de "simpele vorm" opgegeven moeten worden, dus in plaats van "pietje" <[email protected]> simpelweg [email protected]. Dus misschien loopt het wel stuk op de vorm?
Lees anders alle reacties in deze thread eens door. Hier komen wel een aantal argumenten ter tafel over aanpak, verklaring van wat er gebeurt, en voorstellen voor het oplossen.
Als je serieus werk wilt maken van e-mail voor een (zakelijke) website, waarbij je zelf niet al je headers hoeft te bouwen / je niet vertrouwd hoeft te zijn met al deze kleine nuances / je voorkomt dat als je het dan voor elkaar krijgt om de mail te verzenden dat het aan de andere kant toch in de (spam)prullenbak belandt omdat de mail slecht is opgesteld ... gebruik gewoon een pakket?
Heb je geprobeerd of je wel mail kunt verzenden mét authenticatie?
En/of informeer bij je host. Als ze geen mail verwerken zonder authenticatie zul je hier toch aan moeten, of naar een andere hostingpartij moeten gaan.
De foutmelding is toch vrij duidelijk.
"This mail server requires authentication when attempting to send to a non-local e-mail address."
Vertaald:
"je moet een username/password opgeven als je een mail wilt sturen naar een mailadres dat niet gehost wordt op deze server".
(dus niet alleen Gmail en Outlook, maar dus ook naar "[email protected]")
Nu helpt het de programmeur wel om PHPMailer te gebruiken, omdat hij dan in 3 regels klaar is, maar het lost niet magisch het issue op.
Want het issue is tot dus ver niet meer, dan dat je een user/pass mee moet geven.
Andere oplossing zou zijn om de config van de mailserver aan te passen.
Daarbij kun je bijvoorbeeld opgeven dan "localhost" een trusted server is, die gebruik mag maken van de mailserver om naar buiten te mailen.
zeker niet "iedereen", want dan heb je in no time de hoster in de mail, dat je domein afgesloten wordt wegens spam zenden
[size=xsmall]Toevoeging op 23/06/2020 10:15:43:[/size]
En het zou dus handig zijn om te weten wat username en password dan zou moeten zijn.
Als de mailserver op localhost draait, dan zou Plesk het antwoord kunnen bevatten.