Mails uitlezen door PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jesper S

Jesper S

22/08/2017 15:53:13
Quote Anchor link
Hallo PHPHulp,

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 -
 
PHP hulp

PHP hulp

02/05/2024 11:09:30
 
- Ariën  -
Beheerder

- Ariën -

22/08/2017 15:57:08
Quote Anchor link
Als je zelf mails wilt verwerken door PHP kan je beter verdiepen of je dit via e-mail piping kan doen. Dat is een regel die duidelijk maakt dat mails die binnenkomen naar PHP worden doorgestuurd, zodat je die output zelf kan afhandelen.

Hoe dit werkt ligt aan je control-panel die je gebruikt en/of aan de mailsoftware op de server.
 
E vH

E vH

22/08/2017 16:14:29
 
Ivo P

Ivo P

22/08/2017 16:16:01
Quote Anchor link
inderdaad: via pipe wordt de mail altijd direct aan het script gegeven en komt dus niet in een mailbox te staan. Je bent dan ook niet afhankelijk van problemen als
- 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.
 
Rob Doemaarwat

Rob Doemaarwat

22/08/2017 19:07:04
Quote Anchor link
En als je geen pipe op kunt zetten (bijvoorbeeld externe mailbox), dan kun je aan de slag met de imap_* functies: http://php.net/manual/en/book.imap.php (en het eerste commentaar op die pagina).
 
Peter K

Peter K

23/08/2017 07:21:47
Quote Anchor link
osTicket maakt b.v. gebruik van Email Piping, zoals hierboven beschreven.
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.
 
Ben van Velzen

Ben van Velzen

23/08/2017 10:40:34
Quote Anchor link
Correct. En het komt in feite gewoon neer op het lezen van 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.
 
Peter K

Peter K

23/08/2017 11:36:31
Quote Anchor link
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.
 
Ben van Velzen

Ben van Velzen

23/08/2017 12:12:01
Quote Anchor link
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.
 
Ivo P

Ivo P

23/08/2017 12:25:06
Quote Anchor link
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.

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
 
Peter K

Peter K

23/08/2017 12:46:52
Quote Anchor link
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.
 
- SanThe -

- SanThe -

23/08/2017 13:22:04
Quote Anchor link
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.
 
Ivo P

Ivo P

23/08/2017 13:23:12
Quote Anchor link
In mijn geval is "systeem" vrijwel altijd een backend, maar dat kun je inderdaad ook als een front-end lezen.

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.
 
Jesper S

Jesper S

23/08/2017 19:18:11
Quote Anchor link
Hallo,

Bedankt voor de reacties allemaal.

Helaas kom ik er nog steeds niet uit.
Ik maak gebruik van DirectAdmin.

Kan iemand mij helpen?
 
- Ariën  -
Beheerder

- Ariën -

23/08/2017 19:21:43
Quote Anchor link
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.
 
Jesper S

Jesper S

23/08/2017 19:35:51
Quote Anchor link
- 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.

Als ik dat doe krijg ik een email terug van dat de email niet aan gekomen is. Ik heb e gegevens vervangen.
 
- Ariën  -
Beheerder

- Ariën -

23/08/2017 19:56:16
Quote Anchor link
Wat zegt de mail? En hoe ziet je script eruit? En wat staat er exact (gecencureerd) in je invoerveld? Je bent de quotes om je pipeing niet vergeten?

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$fd
= fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
    $email .= fread($fd, 1024);
}

fclose($fd);

$fdw = fopen("/home/******/domains/*****.nl/public_html/mailpipe/mail.txt", "w+");
fwrite($fdw, $email);
fclose($fdw);

echo "0";
?>


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 -
 
Ben van Velzen

Ben van Velzen

23/08/2017 21:07:08
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

23/08/2017 21:22:22
Quote Anchor link
Dat heb ik ook geprobeerd, maar dat leek niet lekker te werken.
Ik ga het nog eens verder uitpluizen binnenkort.
 
Ben van Velzen

Ben van Velzen

23/08/2017 21:36:47
Quote Anchor link
In jouw geval gewoon een regel als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
#!/usr/local/bin/php -q
<?php
// hier je code
?>

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.
 
Peter K

Peter K

24/08/2017 07:04:04
Quote Anchor link
Ik heb het zelf werkend als volgt:

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
 

Pagina: 1 2 volgende »



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.