E-mail bericht ontleden en in MySQL zetten
Ik heb een nogal complexe vraag wat betreft PHP en MySQL waar ik niet helemaal uit kom. Voor een project heb ik een website gemaakt met een aanmeldingsformulier. Als een gebruiker dit invult, dan worden uiteindelijk de gegevens per E-mail verzonden. Ik zou die gegevens handmatig moeten overnemen om in de database te zetten.
Hier gaat natuurlijk veel tijd in zitten en bovendien is de kans op fouten groter.
Ik wil dit proces als volgt gaan doen. Als er een aanmelding binnen komt, wordt deze handmatig gecontroleerd. Dus, gekeken of alles wel juist is ingevuld. Vervolgens stuur ik de mail door naar een afgeschermde mailbox.
Met een PHP-script wordt de mail dan ontleed en worden de gegevens in de database gezet.
De mail bestaat uit een plain-tekst mail en ziet er zo uit:
Wat wil je doen? : Gegevens toevoegen
Voornaam : Jan
Achternaam : Janssen
E-mailadres : [email protected]
Website : www.janssen.com
Plaats : Leeuwarden
Provincie : Friesland
Leeftijd : 43
Opmerkingen :
Nu heb ik al wel een script dat een connectie maakt naar de mailbox en met IMAP-opties de boel kan uitlezen. Echter, het script doet (nog) niet wat ik graag wil. Ik wil graag dat als er "Gegevens toevoegen" staat, dat het script het commando INSERT gebruikt in MySQL. "Gegevens verwijderen" zou da dus het commando DELETE betekenen.
Verder wil ik graag dat de velden 'voornaam', 'achternaam' etc. apart in een veld worden geplaatst in de database. Anders dan in het script staat, zoek ik dus een manier om de gegevens in het bericht te filteren en NIET om het gehele bericht in de database te zetten. Het gaat alleen om de ingevoerde gegevens.
Dit is het script:
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?
include "../dbconnection.inc.php";
/** Instellingen van je server **/
$server = '..nl';
$port = 143; // Standaard imap poort
/** Mail-acount gegevens **/
$username = '@.nl'; // [email protected]
$password = ''; // wachtwoord
/** Verbinden met mailbox **/
$mbox = imap_open('{' . $server . ':' . $port . '}INBOX', $username, $password);
$headers = imap_headers($mbox);
$info = imap_mailboxmsginfo($mbox);
$aantalberichten = $info->Nmsgs;
if ($headers == false)// als er geen verbinding was of geen email dan error weergeven.
{
echo "Geen berichten!<br>";
}
else
{
while (list ($key, $val) = each ($headers)) // gewoon de email whilen die in de op de server staan
{
$val;
$id = substr($val, 9, 1);
// de gegevens ophalen:
// $bericht = imap_body($mbox, $id);
$data = imap_headerinfo($mbox, $id); // hiermee haal je allerlei aanvullende gegevens over het bericht op. naar wel adres het is gestuurd maar ook de datum en het onderwerp. Tevens kan je zo alls 'flags' opvragen.
$onderwerp = $data->subject;
$datum = $data->date;
$bericht = imap_body ($mbox, $id);
echo '<b>Afzender:</b> '.$data->fromaddress.'<br>';
echo '<b>Onderwerp:</b> '.$data->subject.'<br>';
echo '<b>Bericht:</b><br>'.$bericht.'<br>';
echo '<b>Ontvangen:</b> '.$data->date;
echo"<hr>";
$sql = mysql_query(" INSERT INTO `mail`(`onderwerp`,`bericht`,`datum`)VALUES('$onderwerp','$bericht','$datum')");
imap_delete($mbox, $id);
imap_expunge($mbox);
}
}
imap_close($mbox);
?>
include "../dbconnection.inc.php";
/** Instellingen van je server **/
$server = '..nl';
$port = 143; // Standaard imap poort
/** Mail-acount gegevens **/
$username = '@.nl'; // [email protected]
$password = ''; // wachtwoord
/** Verbinden met mailbox **/
$mbox = imap_open('{' . $server . ':' . $port . '}INBOX', $username, $password);
$headers = imap_headers($mbox);
$info = imap_mailboxmsginfo($mbox);
$aantalberichten = $info->Nmsgs;
if ($headers == false)// als er geen verbinding was of geen email dan error weergeven.
{
echo "Geen berichten!<br>";
}
else
{
while (list ($key, $val) = each ($headers)) // gewoon de email whilen die in de op de server staan
{
$val;
$id = substr($val, 9, 1);
// de gegevens ophalen:
// $bericht = imap_body($mbox, $id);
$data = imap_headerinfo($mbox, $id); // hiermee haal je allerlei aanvullende gegevens over het bericht op. naar wel adres het is gestuurd maar ook de datum en het onderwerp. Tevens kan je zo alls 'flags' opvragen.
$onderwerp = $data->subject;
$datum = $data->date;
$bericht = imap_body ($mbox, $id);
echo '<b>Afzender:</b> '.$data->fromaddress.'<br>';
echo '<b>Onderwerp:</b> '.$data->subject.'<br>';
echo '<b>Bericht:</b><br>'.$bericht.'<br>';
echo '<b>Ontvangen:</b> '.$data->date;
echo"<hr>";
$sql = mysql_query(" INSERT INTO `mail`(`onderwerp`,`bericht`,`datum`)VALUES('$onderwerp','$bericht','$datum')");
imap_delete($mbox, $id);
imap_expunge($mbox);
}
}
imap_close($mbox);
?>
Bovenstaand script heb ik van internet afgeplukt in de hoop hierop verder te kunnen bouwen. Ik hoop dat iemand me een beetje op weg kan helpen, zoveel kennis heb ik er (nog) niet van en ja, alle begin is moeilijk, maar dit complexe verhaal (wat het invoer-proces flink vergemakkelijkt), krijg ik momenteel niet geschreven in een script.
Alvast hartelijk dank,
Roland.
backticks horen niet in een query
niet onnodig variabelen aanmaken
Roland.
-Gebruiker vult aanmeldformulier in
-Jij ontvangt een mail met de gevevens
-Voor goedkeuring wil jij deze ergens heen sturen zo dat ie d.m.v. een script in de database komt?
Of dit kan weet ik niet, maar ik zou 't sowieso anders doen.
-Gebruiker vult aanmeldformulier in
-Gegevens worden in database geschreven met een extra veld 'actief' o.i.d.
Dat actief veld zet je standaard op 0 (dat kan je instellen in je phpmyadmin, of je stuurt 't mee met t script)
-Er wordt een email naar jou verstuurt dat er een nieuwe aanmelding is met een linkje naar die gebruiker.
-Op die pagina maak je een knopje 'Goedkeuren' of 'Activeren' o.i.d. waardoor actief 0 in 1 veranderd.
Nou kun je bijv alleen gebruikers met actief 1 weergeven of toegang geven o.i.d.
Gewijzigd op 12/02/2011 15:46:20 door Michael -