Formulier zend niet naar gmail

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark Coenie

Mark Coenie

20/06/2020 14:31:49
Quote Anchor link
Hi,

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
    
if (mail("example@gmail.com", "Onderwerp", "Test berichtje")) {
    echo '<p>Het e-mailbericht is verzonden.</p>';
} else {
    echo '<p>Het e-mailbericht kon niet worden verzonden.</p>';
}
 
PHP hulp

PHP hulp

12/07/2020 01:24:03
 
Thomas van den Heuvel

Thomas van den Heuvel

20/06/2020 15:21:21
Quote Anchor link
Krijg je echt de melding dat het e-mailbericht kon niet worden verzonden (else-statement) ingeval je een bericht probeert te sturen naar gmail? Dat zou dan vreemd klinken, maar misschien is dit een hosting-ding? Heb je toevallig hele goedkope hosting ofzo?

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
 
Mark Coenie

Mark Coenie

20/06/2020 21:42:43
Quote Anchor link
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"
 
Thomas van den Heuvel

Thomas van den Heuvel

20/06/2020 22:22:15
Quote Anchor link
Wellicht is de mailfunctionaliteit dan zéér beperkt waarbij je enkel naar de eigen webmail kan sturen? Zou dit navragen bij je host of pakketinformatie hier op naslaan.

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
 
- Ariën -
Beheerder

- Ariën -

20/06/2020 22:22:39
Quote Anchor link
Probeer het eens met de headers, waaronder een from-header die bij jouw domein hoort.

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 -
 
Mark Coenie

Mark Coenie

20/06/2020 23:41:31
Quote Anchor link
Ik heb de headers allemaal uitgeprobeerd die van toepassing waren. (dus niet de html headers)
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$headers     = 'From: <noreply@domeinnaam.com>' . "\r\n";
$headers    .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers    .= 'X-Priority: Normal' . "\r\n";
 
- Ariën -
Beheerder

- Ariën -

20/06/2020 23:48:37
Quote Anchor link
Wat bedoel je met "Als ik het weer verander naar een webmail (ook naar een webmail met andere domeinnaam) wordt het formulier wel verzonden."

Een webmail is niets anders dan online e-mail cliënt, ingesteld op jouw mailserver.
 
Thomas van den Heuvel

Thomas van den Heuvel

21/06/2020 14:22:21
Quote Anchor link
Waarschijnlijk bedoelt @Mark dat hij alleen naar adresssen van dat, of "lokale" domeinen kan sturen.

Dit zou je dus aan je host kunnen vragen, of mogelijk staat dit dus bij de informatie van je hostingpakket (beperkt mailverkeer mogelijk oid).
 
Mark Coenie

Mark Coenie

21/06/2020 14:26:54
Quote Anchor link
@Thomas van den Heuvel
Ik krijg geen melding te zien als ik dit gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$success = mail('example@example.com', 'My Subject', $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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mail('mail@een-website.nl', 'onderwerp', 'bericht', $headers)


En kan ook worden verzonden naar een email van een andere website bv:
website van het formulier: www.eenwebsite.nl
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mail('mail@een-andere-ewebsite.nl', 'onderwerp', 'bericht', $headers)


Maar zodra de ontvanger wordt veranderd in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
mail('voorbeeld@hotmail.com', 'onderwerp', 'bericht', $headers)
// of
mail('voorbeeld@gmail.com', 'onderwerp', 'bericht', $headers)

Dan krijg ik de melding dat het bericht niet is verzonden.
Gewijzigd op 21/06/2020 14:29:15 door Mark Coenie
 
Thomas van den Heuvel

Thomas van den Heuvel

21/06/2020 14:29:32
Quote Anchor link
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?
 
Mark Coenie

Mark Coenie

21/06/2020 16:22:20
Quote Anchor link
Ik krijg nu deze melding:
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.
 
Ozzie PHP

Ozzie PHP

21/06/2020 16:34:45
Quote Anchor link
"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).
 
Thomas van den Heuvel

Thomas van den Heuvel

21/06/2020 16:54:43
Quote Anchor link
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.
 
- Ariën -
Beheerder

- Ariën -

22/06/2020 12:43:41
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

22/06/2020 13:50:05
 
Thomas van den Heuvel

Thomas van den Heuvel

22/06/2020 15:15:01
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

22/06/2020 22:37:17
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

22/06/2020 23:26:41
Quote Anchor link
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" <pietje@site.com> simpelweg pietje@site.com. 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.
 
Ward van der Put
Moderator

Ward van der Put

23/06/2020 08:31:50
Quote Anchor link
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.
 
Ivo P

Ivo P

23/06/2020 10:14:09
Quote Anchor link
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 "foo@phphulp.nl")

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.