Ontwikkel een PHP-script voor geautomatiseerde e-mailverwerking met IMAP
description
Met deze prompt kun je een krachtig PHP-script ontwikkelen dat e-mailverwerking automatiseert, wat je veel handmatig werk bespaart. De aanpak helpt bij het integreren van e-mailfunctionaliteit in je applicaties, verbetert efficiëntie en zorgt voor betrouwbare verwerking van inkomende berichten.
prompt
Help me een PHP-script te ontwikkelen dat automatisch e-mails kan ophalen, verwerken en classificeren via IMAP. Leg uit hoe ik verbinding maak met de mailserver, e-mails filter op onderwerp of afzender, bijlagen opsla en acties onderneem gebaseerd o ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hieronder vind je een voorbeeld PHP-script dat verbinding maakt met een IMAP-mailserver, e-mails ophaalt, filtert op onderwerp, bijlagen opslaat en een bevestigingsmail verstuurt. Let op dat je de juiste PHP-extensies hebt geïnstalleerd (zoals IMAP en SMTP via PHPMailer) en dat je de beveiligingsinstellingen van je Gmail-account hebt aangepast (bijvoorbeeld app-specifiek wachtwoord of minder veilige apps toestaan).
```php
<?php
// Configuratiegegevens
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'gebruiker@gmail.com';
$password = 'wachtwoord123';
// Verbinden met IMAP
$inbox = imap_open($hostname, $username, $password) or die('Kan geen verbinding maken: ' . imap_last_error());
// Zoek naar mails met onderwerp 'factuur'
$emails = imap_search($inbox, 'SUBJECT "factuur"');
if ($emails) {
rsort($emails); // nieuwste eerst
foreach ($emails as $email_number) {
// Haal de volledige email op
$overview = imap_fetch_overview($inbox, $email_number, 0);
$message = imap_fetchbody($inbox, $email_number, '');
// Haal details op
$headers = imap_fetchheader($inbox, $email_number);
$structure = imap_fetchstructure($inbox, $email_number);
// Afzender
$from = $overview[0]->from;
// Controleer en sla bijlagen op
if (isset($structure->parts) && count($structure->parts)) {
for ($i = 0; $i < count($structure->parts); $i++) {
$part = $structure->parts[$i];
if ($part->ifdparameters) {
foreach ($part->dparameters as $object) {
if (strtolower($object->attribute) == 'filename') {
$filename = $object->value;
$attachment = imap_fetchbody($inbox, $email_number, $i+1);
// Decodeer op basis van encoding
switch ($part->encoding) {
case 0: // 7bit
$data = $attachment;
break;
case 1: // 8bit
$data = $attachment;
break;
case 3: // base64
$data = base64_decode($attachment);
break;
case 4: // quoted-printable
$data = quoted_printable_decode($attachment);
break;
default:
$data = $attachment;
}
// Sla bijlage op
file_put_contents('bijlagen/' . $filename, $data);
}
}
}
}
}
// Stuur bevestigingsmail
require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/SMTP.php';
$mail = new PHPMailer\PHPMailer\PHPMailer();
// SMTP configuratie
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'gebruiker@gmail.com';
$mail->Password = 'wachtwoord123';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
// Ontvanger en inhoud
$mail->setFrom('gebruiker@gmail.com', 'Automatische Bevestiging');
$mail->addAddress($overview[0]->from);
$mail->Subject = 'Bevestiging ontvangst factuur';
$mail->Body = 'Uw factuur is ontvangen en verwerkt.';
if (!$mail->send()) {
echo 'Fout bij versturen: ' . $mail->ErrorInfo;
}
}
}
// Sluit de verbinding
imap_close($inbox);
?>
```
**Belangrijke opmerkingen:**
- Zorg dat je de PHP IMAP-extensie hebt geïnstalleerd (`php-imap`).
- Voor Gmail moet je mogelijk een app-specifiek wachtwoord gebruiken of minder veilige apps toestaan.
- De map `bijlagen/` moet bestaan en writable zijn.
- Voor het versturen van e-mails wordt PHPMailer gebruikt; download en include de juiste bestanden.
- Test het script zorgvuldig en pas het aan op je eigen behoeften.
Wil je dat ik je help met het opzetten van een meer uitgebreide versie of specifieke functies?
provider: deepseek
model: deepseek-chat
Ik help je graag met het ontwikkelen van een PHP-script voor e-mailverwerking. Hier is een complete uitleg:
## Vereisten
Zorg dat de IMAP-extensie is geïnstalleerd in PHP:
```bash
sudo apt-get install php-imap
```
## PHP Script
```php
<?php
// Mailserver configuratie
$mailserver = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'gebruiker@gmail.com';
$password = 'wachtwoord123';
// Filtercriteria
$gezochtOnderwerp = 'factuur';
// Verbinding maken met IMAP-server
try {
$inbox = imap_open($mailserver, $username, $password);
if (!$inbox) {
throw new Exception('Kan geen verbinding maken met mailserver: ' . imap_last_error());
}
echo "Verbonden met mailserver\n";
// Zoek e-mails met onderwerp 'factuur'
$emails = imap_search($inbox, 'SUBJECT "' . $gezochtOnderwerp . '"');
if ($emails) {
foreach ($emails as $email_number) {
verwerkEmail($inbox, $email_number);
}
} else {
echo "Geen e-mails gevonden met onderwerp: $gezochtOnderwerp\n";
}
// Sluit verbinding
imap_close($inbox);
} catch (Exception $e) {
echo "Fout: " . $e->getMessage() . "\n";
}
function verwerkEmail($inbox, $email_number) {
// Haal header informatie op
$header = imap_headerinfo($inbox, $email_number);
$afzender = $header->from[0]->mailbox . "@" . $header->from[0]->host;
$onderwerp = $header->subject;
echo "Verwerk e-mail: $onderwerp van $afzender\n";
// Haal de volledige e-mail op
$structuur = imap_fetchstructure($inbox, $email_number);
$bericht = imap_fetchbody($inbox, $email_number, 1);
// Verwerk bijlagen
$bijlagenVerwerkt = verwerkBijlagen($inbox, $email_number, $structuur);
if ($bijlagenVerwerkt) {
// Stuur bevestigingsmail
stuurBevestiging($afzender, $onderwerp);
// Markeer e-mail als gelezen (optioneel)
imap_setflag_full($inbox, $email_number, "\\Seen");
}
}
function verwerkBijlagen($inbox, $email_number, $structuur) {
$mapVoorBijlagen = 'bijlagen/';
// Maak map aan als deze niet bestaat
if (!file_exists($mapVoorBijlagen)) {
mkdir($mapVoorBijlagen, 0777, true);
}
$bijlagenGevonden = false;
if (isset($structuur->parts)) {
for ($i = 0; $i < count($structuur->parts); $i++) {
$bijlage = $structuur->parts[$i];
if ($bijlage->ifdparameters) {
$bestandsnaam = $bijlage->dparameters[0]->value;
$inhoud = imap_fetchbody($inbox, $email_number, $i+1);
// Decodeer de bijlage
if ($bijlage->encoding == 3) {
$inhoud = base64_decode($inhoud);
} elseif ($bijlage->encoding == 4) {
$inhoud = quoted_printable_decode($inhoud);
}
// Sla bestand op
$volledigPad = $mapVoorBijlagen . $bestandsnaam;
file_put_contents($volledigPad, $inhoud);
echo "Bijlage opgeslagen: $bestandsnaam\n";
$bijlagenGevonden = true;
}
}
}
return $bijlagenGevonden;
}
function stuurBevestiging($naar, $onderwerp) {
$van = 'gebruiker@gmail.com';
$bevestigingsOnderwerp = "Bevestiging: $onderwerp ontvangen";
$bericht = "Beste afzender,\n\nUw e-mail met onderwerp '$onderwerp' is succesvol ontvangen en verwerkt.\n\nMet vriendelijke groet,\nAutomatisch verwerkingssysteem";
$headers = "From: $van\r\n";
$headers .= "Reply-To: $van\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
if (mail($naar, $bevestigingsOnderwerp, $bericht, $headers)) {
echo "Bevestigingsmail verzonden naar: $naar\n";
return true;
} else {
echo "Kon bevestigingsmail niet verzenden naar: $naar\n";
return false;
}
}
?>
```
## Belangrijke opmerkingen:
1. **Gmail configuratie**: Voor Gmail moet je mogelijk:
- Two-factor authentication uitschakelen
- "Minder veilige apps" inschakelen (niet aanbevolen)
- App-specifiek wachtwoord gebruiken
2. **Beveiliging**: Sla wachtwoorden nooit in plaintext op. Gebruik environment variables:
```php
$password = getenv('EMAIL_PASSWORD');
```
3. **Cron job**: Om dit automatisch te laten draaien:
```bash
# Elke 5 minuten
*/5 * * * * php /pad/naar/script.php
```
4. **Error handling**: Voeg logging toe voor betere monitoring:
```php
error_log("E-mail verwerkt: $onderwerp - " . date('Y-m-d H:i:s'));
```
5. **Bijlagen map**: Zorg dat de webserver schrijfrechten heeft op de bijlagen map.
Dit script maakt verbinding met Gmail, zoekt factuur-e-mails, slaat bijlagen op en stuurt bevestigingsmails terug.