Formulier zend niet naar gmail
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?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
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>';
}
Normaal zou het niet uit moeten/mogen maken waar je een e-mailbericht naartoe stuurt als je de beschikking hebt over mailfunctionaliteit zou ik zeggen.
EDIT: oftewel, waaruit blijkt dat de mail "niet werkt"?
Gewijzigd op 20/06/2020 15:22:04 door Thomas van den Heuvel
Ik huur een webserver en is inderdaad vrij goedkoop. ik gebruik plesk om mijn websites te beheren. En inderdaad ik krijg het else statement: "het bericht kon niet worden verzonden"
Voor de beeldvorming: PHP verzorgt zelf niet het daadwerkelijk versturen van mail, althans niet met mail(). mail() draagt het e-mailbericht simpelweg over aan een (extern) proces dat dit verder af kan handelen. Blijkbaar weigert dit proces het bericht op te pakken dan ofzo.
Je zou misschien kunnen proberen om via een PHP-pakket als PHPMailer (rechtstreeks) te communiceren met GMail, maar als je pakket zo dichtgetimmerd is/lijkt, werken sockets (PHPMailer maakt hier gebruik van geloof ik) waarschijnlijk ook niet.
Mogelijk geeft error_get_last() je meer inzicht in wat er nu precies fout gaat zoals in de eerste user comment van de mail() documentatie wordt aangehaald, want false vertelt je niet zoveel.
Gewijzigd op 20/06/2020 22:23:05 door Thomas van den Heuvel
http://wiki.phpbeginners.nl/index.php/De_juiste_mailheaders
PHPmailer is ook handig, maar mail() zou ook moeten werken, zolang het goed geconfigureerd is.
Gewijzigd op 20/06/2020 22:24:03 door - Ariën -
Zodra ik het emailadres verander in een hotmail of gmail krijg ik de niet verzonden melding.
Als ik het weer verander naar een webmail (ook naar een webmail met andere domeinnaam) wodt het formulier wel verzonden.
Dit zijn de headers die sowieso in het script staan:
Code (php)
1
2
3
2
3
$headers = 'From: <[email protected]>' . "\r\n";
$headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers .= 'X-Priority: Normal' . "\r\n";
$headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers .= 'X-Priority: Normal' . "\r\n";
Een webmail is niets anders dan online e-mail cliënt, ingesteld op jouw mailserver.
Dit zou je dus aan je host kunnen vragen, of mogelijk staat dit dus bij de informatie van je hostingpakket (beperkt mailverkeer mogelijk oid).
Ik krijg geen melding te zien als ik dit gebruik:
Code (php)
1
2
3
4
2
3
4
$success = mail('[email protected]', 'My Subject', $message);
if (!$success) {
$errorMessage = error_get_last()['message'];
}
if (!$success) {
$errorMessage = error_get_last()['message'];
}
@- Ariën -
Quote:
Wat bedoel je met "Als ik het weer verander naar een webmail (ook naar een webmail met andere domeinnaam) wordt het formulier wel verzonden."
Het formulier kan wel worden verzonden naar een email met dezelfde domeinnaam bv:
website van het formulier: www.eenwebsite.nl
En kan ook worden verzonden naar een email van een andere website bv:
website van het formulier: www.eenwebsite.nl
Maar zodra de ontvanger wordt veranderd in:
Code (php)
1
2
3
2
3
mail('[email protected]', 'onderwerp', 'bericht', $headers)
// of
mail('[email protected]', 'onderwerp', 'bericht', $headers)
// of
mail('[email protected]', 'onderwerp', 'bericht', $headers)
Dan krijg ik de melding dat het bericht niet is verzonden.
Gewijzigd op 21/06/2020 14:29:15 door Fester Splinter
Mark Coenie op 21/06/2020 14:26:54:
Ik krijg geen melding te zien als ik dit gebruik:
Je zult $errorMessage ook moeten weergeven met echo oid?
mail(): SMTP server response: 503 This mail server requires authentication when attempting to send to a non-local e-mail address. Please check your mail client settings or contact your administrator to verify that the domain or address is defined for this server.geen melding
Ik vermoed dat het met het ssl certificaat te maken heeft. ik heb al mijn websites inclusief de webmails met ssl beveiligd. Echter de webserver krijg ik niet met https beveiligd en ik vermoed dat het hier mee te maken heeft.
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).
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.
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.
Bij welke hoster zit je?
Zoekende op de foutmelding in combinatie met Plesk heb ik deze link gevonden:
https://support.plesk.com/hc/en-us/articles/360009070374-Unable-to-send-email-using-MailEnable-mail-server-503-This-mail-server-requires-authentication-when-attempting-to-send-to-a-non-local-e-mail-address
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.
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.
Mark Coenie op 20/06/2020 14:31:49:
Ik heb een webformulier gemaakt maar die kan niet verzonden worden naar gmail maar wel naar de webmail van de bijbehorende website.
Dat kun je ook oplossen (of omzeilen) door de mail automatisch te forwarden naar Gmail.
"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
Toevoeging op 23/06/2020 10:15:43:
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.