slogan3

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

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.