Mails uitlezen door PHP
Ik ben bezig met een systeem.
Nu wil ik het volgende.
De bezoeker heeft een vraag en emailt naar contact@******.net
De website leest met PHP de email en zet hem in de database, de afzender, tijd en bericht.
Hoe moet ik zoiets maken? Met een cronjob dacht ik zelf?
Iemand die kan helpen
mvg
- Ariën -:
Topic titel gewijzgd naar: Mails uitlezen door PHP (was: PHP mail).
Gewijzigd op 22/08/2017 15:58:12 door - Ariën -
Hoe dit werkt ligt aan je control-panel die je gebruikt en/of aan de mailsoftware op de server.
- cron draait een dagje niet
- mailbox onbereikbaar door veranderd password
- mailbox vol
Wel is te overwegen om de mailtjes CC naar een andere, echte, mailbox te laten gaan, om je script te kunnen controleren in het begin.
http://php.net/manual/en/book.imap.php (en het eerste commentaar op die pagina).
En als je geen pipe op kunt zetten (bijvoorbeeld externe mailbox), dan kun je aan de slag met de imap_* functies: http://osticket.com/wiki/Email_Piping
Hier wat meer informatie uit hun documentatie voor het instellen hiervan.
Je zou ook hun script "/path/to/api/pipe.php" kunnen analyseren hoe ze het scriptgewijs verwerken.
php://stdin, waarin je dan de complete mail inclusief headers etc ontvangt. Hier zal dus wat parsing aan te pas komen, te meer omdat je al snel te maken krijgt met multipart/alternative etc. Als je bijlagen accepteert zul je dat ook moeten afhandelen. Kortom: om het goed te doen heeft wat voeten in de aarde.
Correct. En het komt in feite gewoon neer op het lezen van Is het trouwens niet veel makkelijker om een contact formulier te maken die de gegevens gelijk in de database zet? En vervolgens eventueel nog mailen naar iemand.
Om te kunnen garanderen dat de formatting is zoals je die wil hebben is dat inderdaad het handigst. Anders zit je afhankelijk van je wensen mbt wat wordt overgenomen uit emails al heel snel naar iets te kijken dat een webmail client is, maar toch net niet.
Let er bij het schrijven wel op, dat het de mailserver (sendmail ?) is die het script moet kunnen uitvoeren. En die moet dus allereerst het script kunnen zien (dus niet in je home/dir/ plaatsen) en dat hij ook dat script zelf uitvoeren
Ivo P op 23/08/2017 12:25:06:
ontvangen via email heeft het voordeel, dat je elke mail zo af kunt vangen en dat je niet je potentiele klanten eerst naar je website moet sturen om daar de vraag in te vullen.
Hij heeft wel aangegeven dat hij bezig is met een systeem en heeft het over 'bezoekers'. Dus dan zou hij in zijn systeem een dergelijke module kunnen bouwen.
Ivo P op 23/08/2017 12:25:06:
Let er bij het schrijven wel op, dat het de mailserver (sendmail ?) is die het script moet kunnen uitvoeren.
Je kan een inkomende mail direct doorsturen naar php.
Als het op een gekoppelde site (zelfde server) ingevuld kan worden, dan heb je wel meer zeggenschap over de data en het verwerken. Dan zou ik niet eerst de mail aanbieden aan een mailserver om hem op een (dezelfde?) mailserver weer in te lezen.
Dan heb je a) veel overhead en headers extra, en b) zeker als het over meerdere servers gaat, kan op verloren gaan van de mails.
Bedankt voor de reacties allemaal.
Helaas kom ik er nog steeds niet uit.
Ik maak gebruik van DirectAdmin.
Kan iemand mij helpen?
http://forum.directadmin.com/showthread.php?t=1092
Je kan dus |/home/xxxxxx/domains/xxxxxxx.nl/public_html/script.php als alias-forwarder instellen.
- Ariën - op 23/08/2017 19:21:43:
Als ik op internet rondneus op 'DirectAdmin + mail piping' kom ik op dit uit:
http://forum.directadmin.com/showthread.php?t=1092
Je kan dus |/home/xxxxxx/domains/xxxxxxx.nl/public_html/script.php als alias-forwarder instellen.
http://forum.directadmin.com/showthread.php?t=1092
Je kan dus |/home/xxxxxx/domains/xxxxxxx.nl/public_html/script.php als alias-forwarder instellen.
Als ik dat doe krijg ik een email terug van dat de email niet aan gekomen is. Ik heb e gegevens vervangen.
Ik ben er ook mee aan het spelen, maar nog niet met het gewenste resultaat. Maar ik kom wel stukje bij beetje verder.
Update
Na een half uur aanstoeien en 15 mails verder, krijg ik de mails eindelijk gepiped naar een tekstbestand.
Code (php)
En de invoer in Directadmin bij 'Destination Email' (mét quotes):
"|/usr/local/bin/php -q /home/****/domains/*****.nl/public_html/mailpipe/pipe.php"
Volgende zaak is om de mail-content uit elkaar te trekken, maar daar zijn wel wat opensource parsers voor te vinden.
Enige nadeel is wel dat je 'failed' mailtjes krijgt, omdat exim niet echt lijkt te snappen dat hij kan pipen.
Gewijzigd op 23/08/2017 20:10:42 door - Ariën -
Het is veel eenvoudiger om in je script gewoon een shebang regel op te nemen, en het executable bit te geven. Datzelfde geldt voor cron jobs etc.
Ik ga het nog eens verder uitpluizen binnenkort.
Uiteraard het executable bit niet vergeten, voor ter hoogte van de uitvoerende gebruiker. Normaliter zal dat een u+rx zijn, maar voor email piping zal het waarschijnlijk o+rx zijn, omdat de mailserver uiteraard niet onder jouw gebruiker draait.
Log in op directadmin als de user waar het onder moet werken.
Maak een forwarder aan, b.v.: test@DIRECTADMINDOMEIN
Destination e-mail moet zijn:
"|/usr/local/bin/php -q /home/DIRECTADMINUSER/domains/DIRECTADMINDOMEIN/public_html/pipe.php"
Als je nu mailt naar test@DIRECTADMINDOMEIN wordt dit gestuurd naar het bestand pipe.php in je home directory.
De teksten met hoofdletter vervangen naar jouw situatie ;)
Toch blijf ik er bij, is het niet veel makkelijker om je vragen GELIJK in te voeren in de database, in plaats van ze eerst te mailen en dan terug uit te lezen?
Gewijzigd op 24/08/2017 07:04:54 door Peter K