slogan3

Help mij met het schrijven van Ruby code voor geautomatiseerde e-mailverwerking

description

Met deze prompt kun je een Ruby script ontwikkelen dat je e-mailworkflow automatiseert, waardoor je tijd bespaart en foutgevoelige handmatige taken elimineert. Het is specifiek gericht op e-mailprotocol integratie en robuuste foutafhandeling, wat het praktischer maakt dan algemene scripts.

prompt

Help mij met het schrijven van Ruby code die automatisch e-mails verwerkt volgens de volgende criteria: <beschrijf de criteria voor het filteren, sorteren of reageren op e-mails>. Geef aan ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van Ruby-code die IMAP gebruikt om e-mails te filteren op onderwerp 'Factuur', bijlagen op te slaan en foutafhandeling te implementeren: ```ruby require 'net/imap' require 'mail' require 'fileutils' # Configuratie IMAP_SERVER = 'imap.jouwdomein.com' IMAP_PORT = 993 USERNAME = 'jouwgebruikersnaam' PASSWORD = 'jouwwachtwoord' FOLDER = 'INBOX' ATTACHMENTS_DIR = 'bijlagen' # Maak de directory voor bijlagen aan als deze niet bestaat FileUtils.mkdir_p(ATTACHMENTS_DIR) begin # Verbinding maken met IMAP imap = Net::IMAP.new(IMAP_SERVER, IMAP_PORT, true) imap.login(USERNAME, PASSWORD) imap.select(FOLDER) # Zoeken naar e-mails met onderwerp 'Factuur' ids = imap.search(["HEADER", "SUBJECT", "Factuur"]) ids.each do |id| begin # E-mail ophalen msg_data = imap.fetch(id, "RFC822")[0].attr["RFC822"] mail = Mail.read_from_string(msg_data) # E-mailgegevens tonen (optioneel) puts "Verwerken email: #{mail.subject}" # Bijlagen opslaan mail.attachments.each do |attachment| filename = attachment.filename filepath = File.join(ATTACHMENTS_DIR, filename) # Bijlage opslaan met foutafhandeling begin File.open(filepath, "wb") { |f| f.write(attachment.body.decoded) } puts "Bijlage opgeslagen: #{filename}" rescue => e puts "Fout bij opslaan bijlage #{filename}: #{e.message}" end end rescue => e puts "Fout bij het verwerken van email ID #{id}: #{e.message}" end end # Afsluiten imap.logout imap.disconnect rescue => e puts "Fout bij verbinding of authenticatie: #{e.message}" end ``` **Gebruik en benodigdheden:** - Installeer de Ruby-gems: `mail` (voor het parseren van e-mails). - Pas de variabelen aan met jouw IMAP-server, gebruikersnaam, wachtwoord, en eventueel andere instellingen. - Dit script zoekt naar alle e-mails met 'Factuur' in het onderwerp, verwerkt ze, en slaat alle bijlagen op in de map 'bijlagen'. **Aanbevelingen voor efficiëntie:** - Verwerk alleen nieuwe of onverwerkte e-mails door bijvoorbeeld een status of label te gebruiken. - Voeg logica toe om al verwerkte e-mails te markeren of te verwijderen. - Overweeg het gebruik van IMAP `SEARCH` met criteria voor ongelezen of onverwerkte berichten voor betere efficiëntie. Heeft u nog verdere wensen of aanpassingen?
provider: deepseek
model: deepseek-chat
Ik help je graag met het schrijven van Ruby code voor e-mailverwerking. Hier is een complete oplossing: ## Benodigde e-mailprotocollen/services: - **IMAP** (aanbevolen) of POP3 voor het ophalen van e-mails - **SMTP** voor het versturen van antwoorden/bevestigingen ## Vereiste gems: ```bash gem install mail gem install net-imap gem install net-smtp ``` ## Ruby code: ```ruby require 'mail' require 'net/imap' require 'fileutils' class EmailProcessor def initialize(imap_server, username, password, attachment_path = './attachments') @imap = Net::IMAP.new(imap_server, ssl: true) @username = username @password = password @attachment_path = attachment_path create_attachment_directory end def process_emails connect_to_server select_inbox # Zoek e-mails met onderwerp 'Factuur' @imap.search(['SUBJECT', 'Factuur']).each do |message_id| process_single_email(message_id) end rescue Net::IMAP::Error => e puts "IMAP Fout: #{e.message}" rescue StandardError => e puts "Onverwachte fout: #{e.message}" ensure disconnect end private def connect_to_server @imap.login(@username, @password) puts "Verbonden met e-mailserver" end def select_inbox @imap.select('INBOX') end def process_single_email(message_id) envelope = @imap.fetch(message_id, 'ENVELOPE')[0].attr['ENVELOPE'] puts "Verwerk e-mail: #{envelope.subject}" # Markeer als gelezen @imap.store(message_id, '+FLAGS', [:Seen]) # Verwerk bijlagen save_attachments(message_id) # Log de verwerking log_processed_email(envelope) rescue StandardError => e puts "Fout bij verwerken e-mail #{message_id}: #{e.message}" end def save_attachments(message_id) mail_data = @imap.fetch(message_id, 'RFC822')[0].attr['RFC822'] mail = Mail.new(mail_data) mail.attachments.each do |attachment| filename = safe_filename(attachment.filename) filepath = File.join(@attachment_path, filename) File.open(filepath, 'wb') do |file| file.write(attachment.body.decoded) end puts "Bijlage opgeslagen: #{filename}" end end def safe_filename(filename) # Maak bestandsnaam veilig filename.gsub(/[^0-9A-Za-z.\-]/, '_') end def create_attachment_directory FileUtils.mkdir_p(@attachment_path) unless Dir.exist?(@attachment_path) end def log_processed_email(envelope) log_entry = { timestamp: Time.now, subject: envelope.subject, from: envelope.from[0].name, date: envelope.date } # Schrijf naar logbestand (kan uitgebreid worden met database) File.open('email_processing.log', 'a') do |file| file.puts("#{log_entry[:timestamp]} - Verwerkt: #{log_entry[:subject]}") end end def disconnect @imap.logout @imap.disconnect puts "Verbinding verbroken" end end # Gebruiksvoorbeeld: processor = EmailProcessor.new( 'imap.gmail.com', # Pas aan naar jouw provider 'jouw_email@gmail.com', 'jouw_wachtwoord', './factuur_bijlagen' # Map voor opslag bijlagen ) # Verwerk e-mails processor.process_emails ``` ## Aanvullende configuratie: 1. **Voor Gmail**: Gebruik `imap.gmail.com` en zorg dat IMAP toegang is ingeschakeld 2. **Beveiliging**: Overweeg om omgevingsvariabelen te gebruiken voor gevoelige data 3. **Scheduling**: Gebruik `cron` (Linux) of Task Scheduler (Windows) voor automatische uitvoering ## Foutafhandeling features: - Verbindingsfouten - Ongeldige e-mailformaten - Bestandssysteemfouten - Netwerk timeouts - Logging van alle verwerkte e-mails ## Optimalisaties: - Batch verwerking van e-mails - Geheugenefficiënte bijlage verwerking - Automatische opruiming van oude logs - Retry mechanisme voor mislukte verwerkingen Pas de serverinstellingen en paden aan volgens jouw e-mailprovider en bestandssysteemstructuur.